Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / EnableCDNActivity.java @ 4f5e4ef0

History | View | Annotate | Download (10.9 kB)

1
package com.rackspacecloud.android;
2

    
3
import java.io.IOException;
4
import java.io.StringReader;
5

    
6
import javax.xml.parsers.FactoryConfigurationError;
7
import javax.xml.parsers.ParserConfigurationException;
8
import javax.xml.parsers.SAXParser;
9
import javax.xml.parsers.SAXParserFactory;
10

    
11
import org.apache.http.HttpResponse;
12
import org.apache.http.client.ClientProtocolException;
13
import org.apache.http.impl.client.BasicResponseHandler;
14
import org.xml.sax.InputSource;
15
import org.xml.sax.SAXException;
16
import org.xml.sax.XMLReader;
17

    
18
import android.app.Activity;
19
import android.app.AlertDialog;
20
import android.app.Dialog;
21
import android.content.Context;
22
import android.content.DialogInterface;
23
import android.content.Intent;
24
import android.os.AsyncTask;
25
import android.os.Bundle;
26
import android.view.View;
27
import android.view.View.OnClickListener;
28
import android.widget.AdapterView;
29
import android.widget.ArrayAdapter;
30
import android.widget.Button;
31
import android.widget.Spinner;
32
import android.widget.Toast;
33
import android.widget.AdapterView.OnItemSelectedListener;
34

    
35
import com.rackspace.cloud.files.api.client.ContainerManager;
36
import com.rackspace.cloud.servers.api.client.CloudServersException;
37
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
38
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
39

    
40
public class EnableCDNActivity extends GaActivity implements OnClickListener,
41
                OnItemSelectedListener {
42

    
43
        public static String containerName = null;
44
        private String selectedTtlId;
45
        private String selectedLogRetId;
46
        private String selectedCdnId;
47
        private Spinner ttlSpinner;
48
        private Spinner logRetSpinner;
49
        private Spinner cdnSpinner;
50
        private Context context;
51
        
52
        /** Called when the activity is first created. */
53
        @Override
54
        public void onCreate(Bundle savedInstanceState) {
55
                super.onCreate(savedInstanceState);
56
                trackPageView(PAGE_CONTAINER_DETAILS);
57
                setContentView(R.layout.enable_cdn_container);
58
                context = getApplicationContext();
59
                containerName = (String) this.getIntent().getExtras().get("Cname");
60
                setupButtons();
61
                loadTtlSpinner();
62
                loadLogRetSpinner();
63
                loadCdnSpinner();
64

    
65
        }
66

    
67
        private void setupButton(int resourceId, OnClickListener onClickListener) {
68
                Button button = (Button) findViewById(resourceId);
69
                button.setOnClickListener(onClickListener);
70
        }
71

    
72
        private void setupButtons() {
73
                setupButton(R.id.enable_button, new OnClickListener() {
74
                        public void onClick(View v) {
75
                                showDialog(R.id.enable_button);
76
                        }
77
                });
78

    
79
                setupButton(R.id.disable_button, new OnClickListener() {
80
                        public void onClick(View v) {
81
                                showDialog(R.id.disable_button);
82
                        }
83
                });
84
        }
85

    
86
        private void loadCdnSpinner() {
87
                cdnSpinner = (Spinner) findViewById(R.id.cdn_spinner);
88
                cdnSpinner.setOnItemSelectedListener(this);
89
                ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
90
                                this, R.array.cdn, android.R.layout.simple_spinner_item);
91
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
92
                cdnSpinner.setAdapter(adapter);
93

    
94
        }
95

    
96
        private void loadTtlSpinner() {
97
                ttlSpinner = (Spinner) findViewById(R.id.ttl_spinner);
98
                ttlSpinner.setOnItemSelectedListener(this);
99
                ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
100
                                this, R.array.ttl, android.R.layout.simple_spinner_item);
101
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
102
                ttlSpinner.setAdapter(adapter);
103

    
104
        }
105

    
106
        private void loadLogRetSpinner() {
107
                logRetSpinner = (Spinner) findViewById(R.id.log_retention_spinner);
108
                logRetSpinner.setOnItemSelectedListener(this);
109
                ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
110
                                this, R.array.logRet, android.R.layout.simple_spinner_item);
111
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
112
                logRetSpinner.setAdapter(adapter);
113

    
114
        }
115

    
116
        public void onItemSelected(AdapterView<?> parent, View view, int id,
117
                        long arg3) {
118
                if (parent == cdnSpinner) {
119
                        selectedCdnId = cdnSpinner.getSelectedItem().toString();
120
                }
121
                if (parent == ttlSpinner) {
122
                        selectedTtlId = ttlSpinner.getSelectedItem().toString();
123
                } else if (parent == logRetSpinner) {
124
                        selectedLogRetId = logRetSpinner.getSelectedItem().toString();
125
                }
126
        }
127

    
128
        public void onNothingSelected(AdapterView<?> parent) {
129

    
130
        }
131
        
132
        private void showToast(String message) {
133
                Context context = getApplicationContext();
134
                int duration = Toast.LENGTH_SHORT;
135
                Toast toast = Toast.makeText(context, message, duration);
136
                toast.show();
137
    }
138
        
139
        @Override
140
        protected Dialog onCreateDialog(int id) {
141
                switch (id) {
142
                case R.id.enable_button:
143
                        return new AlertDialog.Builder(EnableCDNActivity.this)
144
                                        .setIcon(R.drawable.alert_dialog_icon)
145
                                        .setTitle("Enable CDN")
146
                                        .setMessage(
147
                                                        "Are you sure you want to enable CDN on this container?")
148
                                        .setPositiveButton("Enable CDN",
149
                                                        new DialogInterface.OnClickListener() {
150
                                                                public void onClick(DialogInterface dialog,
151
                                                                                int whichButton) {
152
                                                                        // User clicked OK so do some stuff
153
                                                                        trackEvent(CATEGORY_CONTAINER, EVENT_UPDATED, "", -1);
154
                                                                        new EnableCDNTask().execute((Void[]) null);
155
                                                                }
156
                                                        })
157
                                        .setNegativeButton("Cancel",
158
                                                        new DialogInterface.OnClickListener() {
159
                                                                public void onClick(DialogInterface dialog,
160
                                                                                int whichButton) {
161
                                                                        // User clicked Cancel so do some stuff
162
                                                                }
163
                                                        }).create();
164
                case R.id.disable_button:
165
                        return new AlertDialog.Builder(EnableCDNActivity.this)
166
                                        .setIcon(R.drawable.alert_dialog_icon)
167
                                        .setTitle("Change Attributes")
168
                                        .setMessage(
169
                                                        "Are you sure you want to disable CDN, and/or change attributes?")
170
                                        .setPositiveButton("Change Attributes",
171
                                                        new DialogInterface.OnClickListener() {
172
                                                                public void onClick(DialogInterface dialog,
173
                                                                                int whichButton) {
174
                                                                        // User clicked OK so do some stuff
175
                                                                        trackEvent(CATEGORY_CONTAINER, EVENT_UPDATED, "", -1);
176
                                                                        new ChangeAttributesCDNTask().execute((Void[]) null);
177
                                                                }
178
                                                        })
179
                                        .setNegativeButton("Cancel",
180
                                                        new DialogInterface.OnClickListener() {
181
                                                                public void onClick(DialogInterface dialog,
182
                                                                                int whichButton) {
183
                                                                        // User clicked Cancel so do some stuff
184
                                                                }
185
                                                        }).create();
186
                }
187
                return null;
188
        }
189
        /*
190
        private void setActivityIndicatorsVisibility(int visibility) {
191
                ProgressBar pb = (ProgressBar) findViewById(R.id.save_container_progress_bar);
192
                TextView tv = (TextView) findViewById(R.id.saving_container_label);
193
                pb.setVisibility(visibility);
194
                tv.setVisibility(visibility);
195
        }
196

197
        private void showActivityIndicators() {
198
                setActivityIndicatorsVisibility(View.VISIBLE);
199
        }
200

201
        private void hideActivityIndicators() {
202
                setActivityIndicatorsVisibility(View.INVISIBLE);
203
        }
204
        */
205

    
206
        // using CloudServersException, it works for us too
207
        private CloudServersException parseCloudServersException(
208
                        HttpResponse response) {
209
                CloudServersException cse = new CloudServersException();
210
                try {
211
                        BasicResponseHandler responseHandler = new BasicResponseHandler();
212
                        String body = responseHandler.handleResponse(response);
213
                        CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
214
                        SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
215
                        XMLReader xmlReader = saxParser.getXMLReader();
216
                        xmlReader.setContentHandler(parser);
217
                        xmlReader.parse(new InputSource(new StringReader(body)));
218
                        cse = parser.getException();
219
                } catch (ClientProtocolException e) {
220
                        cse = new CloudServersException();
221
                        cse.setMessage(e.getLocalizedMessage());
222
                } catch (IOException e) {
223
                        cse = new CloudServersException();
224
                        cse.setMessage(e.getLocalizedMessage());
225
                } catch (ParserConfigurationException e) {
226
                        cse = new CloudServersException();
227
                        cse.setMessage(e.getLocalizedMessage());
228
                } catch (SAXException e) {
229
                        cse = new CloudServersException();
230
                        cse.setMessage(e.getLocalizedMessage());
231
                } catch (FactoryConfigurationError e) {
232
                        cse = new CloudServersException();
233
                        cse.setMessage(e.getLocalizedMessage());
234
                }
235
                return cse;
236
        }
237
        
238
        private void startFileError(String message, HttpBundle bundle){
239
                Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
240
                viewIntent.putExtra("errorMessage", message);
241
                viewIntent.putExtra("response", bundle.getResponseText());
242
                viewIntent.putExtra("request", bundle.getCurlRequest());
243
                startActivity(viewIntent);
244
        }
245

    
246
        public class EnableCDNTask extends AsyncTask<Void, Void, HttpBundle> {
247
                private CloudServersException exception;
248

    
249
                @Override
250
                protected HttpBundle doInBackground(Void... arg0) {
251
                        HttpBundle bundle = null;
252
                        try {
253
                                bundle = (new ContainerManager(context)).enable(containerName,
254
                                                selectedTtlId, selectedLogRetId);
255
                        } catch (CloudServersException e) {
256
                                exception = e;
257
                        }
258
                        return bundle;
259
                }
260

    
261
                @Override
262
                protected void onPostExecute(HttpBundle bundle) {
263
                        HttpResponse response = bundle.getResponse();
264
                        if (response != null) {
265
                                int statusCode = response.getStatusLine().getStatusCode();
266
                                if (statusCode == 201) {
267
                                        setResult(Activity.RESULT_OK);
268
                                        finish();
269
                                } else if (statusCode == 202) {
270
                                        showToast("Accepted, container is already cdn enabled");
271
                                        finish();
272
                                } else {
273
                                        CloudServersException cse = parseCloudServersException(response);
274
                                        if ("".equals(cse.getMessage())) {
275
                                                startFileError("There was a problem creating your container.", bundle);
276
                                        } else {
277
                                                startFileError("There was a problem creating your container: "
278
                                                                                + cse.getMessage()
279
                                                                                + " Check container name and try again", bundle);
280
                                        }
281
                                }
282
                        } else if (exception != null) {
283
                                startFileError("There was a problem creating your container: "
284
                                                                + exception.getMessage()
285
                                                                + " Check container name and try again", bundle);
286
                        }
287
                }
288
        }
289

    
290
        public class ChangeAttributesCDNTask extends AsyncTask<Void, Void, HttpBundle> {
291
                private CloudServersException exception;
292

    
293
                @Override
294
                protected HttpBundle doInBackground(Void... arg0) {
295
                        HttpBundle bundle = null;
296
                        try {
297
                                bundle = (new ContainerManager(context)).disable(containerName,
298
                                                selectedCdnId, selectedTtlId, selectedLogRetId);
299
                        } catch (CloudServersException e) {
300
                                exception = e;
301
                        }
302
                        return bundle;
303
                }
304

    
305
                @Override
306
                protected void onPostExecute(HttpBundle bundle) {
307
                        HttpResponse response = bundle.getResponse();
308
                        if (response != null) {
309
                                int statusCode = response.getStatusLine().getStatusCode();
310
                                if (statusCode == 202) {
311
                                        setResult(Activity.RESULT_OK);
312
                                        finish();
313
                                } else {
314
                                        CloudServersException cse = parseCloudServersException(response);
315
                                        if ("".equals(cse.getMessage())) {
316
                                                startFileError("There was a problem creating your container.", bundle);
317
                                        } else {
318
                                                startFileError("There was a problem creating your container: "
319
                                                                                + cse.getMessage()
320
                                                                                + " Check container name and try again", bundle);
321
                                        }
322
                                }
323
                        } else if (exception != null) {
324
                                startFileError("There was a problem creating your container: "
325
                                                                + exception.getMessage()
326
                                                                + " Check container name and try again", bundle);
327
                        }
328
                }
329
        }
330

    
331
        public void onClick(View v) {
332
                // TODO Auto-generated method stub
333

    
334
        }
335

    
336
}