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 | } |