Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddFileActivity.java @ b722cab3

History | View | Annotate | Download (6.6 kB)

1 d3ea294b Adam Menz
package com.rackspacecloud.android;
2 d3ea294b Adam Menz
3 d3ea294b Adam Menz
import java.io.IOException;
4 d3ea294b Adam Menz
import java.io.StringReader;
5 d3ea294b Adam Menz
6 d3ea294b Adam Menz
import javax.xml.parsers.FactoryConfigurationError;
7 d3ea294b Adam Menz
import javax.xml.parsers.ParserConfigurationException;
8 d3ea294b Adam Menz
import javax.xml.parsers.SAXParser;
9 d3ea294b Adam Menz
import javax.xml.parsers.SAXParserFactory;
10 d3ea294b Adam Menz
11 d3ea294b Adam Menz
import org.apache.http.HttpResponse;
12 d3ea294b Adam Menz
import org.apache.http.client.ClientProtocolException;
13 d3ea294b Adam Menz
import org.apache.http.impl.client.BasicResponseHandler;
14 d3ea294b Adam Menz
import org.xml.sax.InputSource;
15 d3ea294b Adam Menz
import org.xml.sax.SAXException;
16 d3ea294b Adam Menz
import org.xml.sax.XMLReader;
17 d3ea294b Adam Menz
18 d3ea294b Adam Menz
import com.rackspace.cloud.files.api.client.ContainerObjectManager;
19 d3ea294b Adam Menz
import com.rackspace.cloud.servers.api.client.CloudServersException;
20 32731215 Adam Menz
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
21 d3ea294b Adam Menz
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
22 d3ea294b Adam Menz
23 d3ea294b Adam Menz
import android.app.Activity;
24 32731215 Adam Menz
import android.app.AlertDialog;
25 e6c34a0f Adam Menz
import android.app.ProgressDialog;
26 d3ea294b Adam Menz
import android.content.Context;
27 32731215 Adam Menz
import android.content.DialogInterface;
28 32731215 Adam Menz
import android.content.Intent;
29 d3ea294b Adam Menz
import android.os.AsyncTask;
30 d3ea294b Adam Menz
import android.os.Bundle;
31 d3ea294b Adam Menz
import android.view.View;
32 d3ea294b Adam Menz
import android.view.View.OnClickListener;
33 d3ea294b Adam Menz
import android.widget.Button;
34 d3ea294b Adam Menz
import android.widget.EditText;
35 d3ea294b Adam Menz
36 d3ea294b Adam Menz
public class AddFileActivity extends Activity implements OnClickListener{
37 d3ea294b Adam Menz
        
38 d3ea294b Adam Menz
        private Context context;        
39 d3ea294b Adam Menz
        private EditText fileName;
40 d3ea294b Adam Menz
        private EditText contents;
41 d3ea294b Adam Menz
        private String containerName;
42 d3ea294b Adam Menz
        private String path;
43 e6c34a0f Adam Menz
        private boolean isAdding;
44 e6c34a0f Adam Menz
        private ProgressDialog dialog;
45 d3ea294b Adam Menz
46 d3ea294b Adam Menz
        /** Called when the activity is first created. */
47 d3ea294b Adam Menz
    @Override
48 d3ea294b Adam Menz
    public void onCreate(Bundle savedInstanceState) {
49 d3ea294b Adam Menz
        super.onCreate(savedInstanceState);
50 d3ea294b Adam Menz
        setContentView(R.layout.addtextfile);
51 d3ea294b Adam Menz
        context = getApplicationContext();
52 d3ea294b Adam Menz
        containerName = (String) this.getIntent().getExtras().get("Cname");
53 d3ea294b Adam Menz
        path = (String) this.getIntent().getExtras().get("curPath");
54 e6c34a0f Adam Menz
        setUpDialog(savedInstanceState);
55 d3ea294b Adam Menz
        setUpInputs();
56 d3ea294b Adam Menz
    }
57 d3ea294b Adam Menz
    
58 d3ea294b Adam Menz
    private void setUpInputs(){
59 44ac7bea Adam Menz
            ((Button) findViewById(R.id.new_file_button)).setOnClickListener(this);
60 d3ea294b Adam Menz
            fileName = ((EditText)findViewById(R.id.file_name_text));
61 e6c34a0f Adam Menz
            fileName.append(".txt");
62 d3ea294b Adam Menz
            contents = ((EditText)findViewById(R.id.new_file_text));
63 d3ea294b Adam Menz
    }
64 d3ea294b Adam Menz
    
65 e6c34a0f Adam Menz
    private void setUpDialog(Bundle savedInstanceState){
66 e6c34a0f Adam Menz
        isAdding = savedInstanceState != null && savedInstanceState.containsKey("isAdding") 
67 e6c34a0f Adam Menz
                    && savedInstanceState.getBoolean("isAdding");
68 e6c34a0f Adam Menz
        if(isAdding){
69 e6c34a0f Adam Menz
                showDialog();
70 e6c34a0f Adam Menz
        }
71 e6c34a0f Adam Menz
        
72 e6c34a0f Adam Menz
    }
73 e6c34a0f Adam Menz
    
74 e6c34a0f Adam Menz
    @Override
75 e6c34a0f Adam Menz
        protected void onSaveInstanceState(Bundle outState) {
76 e6c34a0f Adam Menz
                super.onSaveInstanceState(outState);
77 e6c34a0f Adam Menz
                outState.putBoolean("isAdding", isAdding);
78 e6c34a0f Adam Menz
                if(isAdding){
79 e6c34a0f Adam Menz
                        hideDialog();
80 e6c34a0f Adam Menz
                }
81 e6c34a0f Adam Menz
        }
82 e6c34a0f Adam Menz
    
83 d3ea294b Adam Menz
    public void onClick(View arg0) {
84 d3ea294b Adam Menz
                if ("".equals(fileName.getText().toString())) {
85 d3ea294b Adam Menz
                        showAlert("Required Fields Missing", " File name is required.");
86 d3ea294b Adam Menz
                } else {
87 d3ea294b Adam Menz
                        //showActivityIndicators();
88 d3ea294b Adam Menz
                        new SaveFileTask().execute((Void[]) null);
89 d3ea294b Adam Menz
                }
90 d3ea294b Adam Menz
        }
91 d3ea294b Adam Menz
    
92 d3ea294b Adam Menz
    //using cloudServersException, it works for us too
93 d3ea294b Adam Menz
        private CloudServersException parseCloudServersException(HttpResponse response) {
94 d3ea294b Adam Menz
                CloudServersException cse = new CloudServersException();
95 d3ea294b Adam Menz
                try {
96 d3ea294b Adam Menz
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
97 d3ea294b Adam Menz
                    String body = responseHandler.handleResponse(response);
98 d3ea294b Adam Menz
                    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
99 d3ea294b Adam Menz
                    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
100 d3ea294b Adam Menz
                    XMLReader xmlReader = saxParser.getXMLReader();
101 d3ea294b Adam Menz
                    xmlReader.setContentHandler(parser);
102 d3ea294b Adam Menz
                    xmlReader.parse(new InputSource(new StringReader(body)));                            
103 d3ea294b Adam Menz
                    cse = parser.getException();                            
104 d3ea294b Adam Menz
                } catch (ClientProtocolException e) {
105 d3ea294b Adam Menz
                        cse = new CloudServersException();
106 d3ea294b Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
107 d3ea294b Adam Menz
                } catch (IOException e) {
108 d3ea294b Adam Menz
                        cse = new CloudServersException();
109 d3ea294b Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
110 d3ea294b Adam Menz
                } catch (ParserConfigurationException e) {
111 d3ea294b Adam Menz
                        cse = new CloudServersException();
112 d3ea294b Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
113 d3ea294b Adam Menz
                } catch (SAXException e) {
114 d3ea294b Adam Menz
                        cse = new CloudServersException();
115 d3ea294b Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
116 d3ea294b Adam Menz
                } catch (FactoryConfigurationError e) {
117 d3ea294b Adam Menz
                        cse = new CloudServersException();
118 d3ea294b Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
119 d3ea294b Adam Menz
                }
120 d3ea294b Adam Menz
                return cse;
121 d3ea294b Adam Menz
        }
122 d3ea294b Adam Menz
        
123 d3ea294b Adam Menz
        private void showAlert(String title, String message) {
124 32731215 Adam Menz
            try {
125 d3ea294b Adam Menz
                AlertDialog alert = new AlertDialog.Builder(this).create();
126 d3ea294b Adam Menz
                alert.setTitle(title);
127 d3ea294b Adam Menz
                alert.setMessage(message);
128 d3ea294b Adam Menz
                alert.setButton("OK", new DialogInterface.OnClickListener() {
129 d3ea294b Adam Menz
              public void onClick(DialogInterface dialog, int which) {
130 d3ea294b Adam Menz
                return;
131 d3ea294b Adam Menz
            } }); 
132 d3ea294b Adam Menz
                alert.show();
133 32731215 Adam Menz
            } catch (Exception e) {
134 32731215 Adam Menz
                    e.printStackTrace();
135 32731215 Adam Menz
            }
136 d3ea294b Adam Menz
    }
137 32731215 Adam Menz
        
138 32731215 Adam Menz
        private void startFileError(String message, HttpBundle bundle){
139 32731215 Adam Menz
                Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
140 32731215 Adam Menz
                viewIntent.putExtra("errorMessage", message);
141 32731215 Adam Menz
                viewIntent.putExtra("response", bundle.getResponseText());
142 32731215 Adam Menz
                viewIntent.putExtra("request", bundle.getCurlRequest());
143 32731215 Adam Menz
                startActivity(viewIntent);
144 32731215 Adam Menz
        }
145 d3ea294b Adam Menz
146 32731215 Adam Menz
        private class SaveFileTask extends AsyncTask<Void, Void, HttpBundle> {
147 d3ea294b Adam Menz
            private CloudServersException exception;
148 d3ea294b Adam Menz
            
149 d3ea294b Adam Menz
            @Override
150 e6c34a0f Adam Menz
                protected void onPreExecute(){
151 e6c34a0f Adam Menz
                        isAdding = true;
152 e6c34a0f Adam Menz
                        showDialog();
153 e6c34a0f Adam Menz
                }
154 e6c34a0f Adam Menz
            
155 e6c34a0f Adam Menz
            @Override
156 32731215 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
157 32731215 Adam Menz
                    HttpBundle bundle = null;
158 d3ea294b Adam Menz
                        try {
159 32731215 Adam Menz
                                bundle = (new ContainerObjectManager(context)).addObject(containerName, path, fileName.getText().toString(), "text/plain", contents.getText().toString());
160 d3ea294b Adam Menz
                        } catch (CloudServersException e) {
161 d3ea294b Adam Menz
                                exception = e;
162 d3ea294b Adam Menz
                        }
163 32731215 Adam Menz
                        return bundle;
164 d3ea294b Adam Menz
                }
165 d3ea294b Adam Menz
            
166 d3ea294b Adam Menz
                @Override
167 32731215 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
168 e6c34a0f Adam Menz
                        isAdding = false;
169 e6c34a0f Adam Menz
                        hideDialog();
170 32731215 Adam Menz
                        HttpResponse response = bundle.getResponse();
171 d3ea294b Adam Menz
                        if (response != null) {
172 d3ea294b Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
173 d3ea294b Adam Menz
                                if (statusCode == 201) {
174 d3ea294b Adam Menz
                                        setResult(Activity.RESULT_OK);
175 d3ea294b Adam Menz
                                        finish();
176 d3ea294b Adam Menz
                                } else {
177 d3ea294b Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
178 d3ea294b Adam Menz
                                        if ("".equals(cse.getMessage())) {
179 006434d8 Adam Menz
                                                startFileError("There was a problem creating your file.", bundle);
180 d3ea294b Adam Menz
                                        } else {
181 4f9d1a69 Adam Menz
                                                startFileError("There was a problem creating your file: " + cse.getMessage() +  " See details for more information", bundle);
182 d3ea294b Adam Menz
                                        }
183 d3ea294b Adam Menz
                                }
184 d3ea294b Adam Menz
                        } else if (exception != null) {
185 4f9d1a69 Adam Menz
                                startFileError("There was a problem creating your file: " + exception.getMessage()+ " See details for more information", bundle);                                
186 d3ea294b Adam Menz
                        }                        
187 d3ea294b Adam Menz
                }
188 d3ea294b Adam Menz
    }
189 e6c34a0f Adam Menz
        
190 e6c34a0f Adam Menz
        private void showDialog() {
191 e6c34a0f Adam Menz
                if(dialog == null || !dialog.isShowing()){
192 e6c34a0f Adam Menz
                        dialog = ProgressDialog.show(AddFileActivity.this, "", "Adding File...", true);
193 e6c34a0f Adam Menz
                }
194 e6c34a0f Adam Menz
    }
195 e6c34a0f Adam Menz
    
196 e6c34a0f Adam Menz
    private void hideDialog() {
197 e6c34a0f Adam Menz
            if(dialog != null){
198 e6c34a0f Adam Menz
                    dialog.dismiss();
199 e6c34a0f Adam Menz
            }
200 e6c34a0f Adam Menz
    }
201 d3ea294b Adam Menz
}