Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / EnableCDNActivity.java @ 28dc0ca1

History | View | Annotate | Download (10.6 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.DialogInterface;
22
import android.os.AsyncTask;
23
import android.os.Bundle;
24
import android.view.View;
25
import android.view.View.OnClickListener;
26
import android.widget.AdapterView;
27
import android.widget.ArrayAdapter;
28
import android.widget.Button;
29
import android.widget.ProgressBar;
30
import android.widget.Spinner;
31
import android.widget.TextView;
32
import android.widget.AdapterView.OnItemSelectedListener;
33

    
34
import com.rackspace.cloud.files.api.client.ContainerManager;
35
import com.rackspace.cloud.servers.api.client.CloudServersException;
36
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
37

    
38
public class EnableCDNActivity extends Activity implements  OnClickListener, OnItemSelectedListener {
39
        
40

    
41
        public static String containerName = null;
42
        private String selectedTtlId;
43
        private String selectedLogRetId;
44
        private String selectedCdnId;
45
        private Spinner ttlSpinner;
46
        private Spinner logRetSpinner;
47
        private Spinner cdnSpinner;
48
        
49
    /** Called when the activity is first created. */
50
    @Override
51
    public void onCreate(Bundle savedInstanceState) {
52
        super.onCreate(savedInstanceState);
53
        setContentView(R.layout.enable_cdn_container);
54
        containerName = (String) this.getIntent().getExtras().get("Cname");
55
        setupButtons();
56
        loadTtlSpinner();
57
                loadLogRetSpinner();
58
                loadCdnSpinner();
59
       
60
    }
61
    private void setupButton(int resourceId, OnClickListener onClickListener) {
62
                Button button = (Button) findViewById(resourceId);
63
                button.setOnClickListener(onClickListener);
64
    }
65
    
66
    private void setupButtons() {
67
            setupButton(R.id.enable_button, new OnClickListener() {
68
            public void onClick(View v) {
69
                showDialog(R.id.enable_button);
70
            }
71
        });
72
            
73
            setupButton(R.id.disable_button, new OnClickListener() {
74
            public void onClick(View v) {
75
                showDialog(R.id.disable_button);
76
            }
77
            });
78
    }
79

    
80
private void loadCdnSpinner(){
81
        cdnSpinner = (Spinner) findViewById(R.id.cdn_spinner);
82
        cdnSpinner.setOnItemSelectedListener(this);
83
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
84
                        this, R.array.cdn, android.R.layout.simple_spinner_item);
85
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
86
                        cdnSpinner.setAdapter(adapter);
87

    
88
                        
89
}
90
        
91
private void loadTtlSpinner() {
92
        ttlSpinner = (Spinner) findViewById(R.id.ttl_spinner);
93
        ttlSpinner.setOnItemSelectedListener(this);
94
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
95
                        this, R.array.ttl, android.R.layout.simple_spinner_item);
96
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
97
                        ttlSpinner.setAdapter(adapter);
98

    
99
                        
100
}
101

    
102

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

    
111
}
112
   
113
public void onItemSelected(AdapterView<?> parent, View view, int id,
114
                long arg3) {
115
            if (parent == cdnSpinner) {
116
                    selectedCdnId = cdnSpinner.getSelectedItem().toString();
117
            }
118
                if (parent == ttlSpinner) {
119
                        selectedTtlId = ttlSpinner.getSelectedItem().toString();
120
                } else if (parent == logRetSpinner) {
121
                        selectedLogRetId = logRetSpinner.getSelectedItem().toString();
122
                }
123
}
124
public void onNothingSelected(AdapterView<?> parent) {
125
        
126
}
127
        private void showAlert(String title, String message) {
128
                AlertDialog alert = new AlertDialog.Builder(this).create();
129
                alert.setTitle(title);
130
                alert.setMessage(message);
131
                alert.setButton("OK", new DialogInterface.OnClickListener() {
132
              public void onClick(DialogInterface dialog, int which) {
133
                return;
134
            } }); 
135
                alert.show();
136
                hideActivityIndicators();
137
    }
138
         @Override
139
            protected Dialog onCreateDialog(int id) {
140
                switch (id) {
141
                case R.id.enable_button:
142
                    return new AlertDialog.Builder(EnableCDNActivity.this)
143
                        .setIcon(R.drawable.alert_dialog_icon)
144
                        .setTitle("Enable CDN")
145
                        .setMessage("Are you sure you want to enable CDN on this container?")
146
                        .setPositiveButton("Enable CDN", new DialogInterface.OnClickListener() {
147
                                public void onClick(DialogInterface dialog, int whichButton) {
148
                                        // User clicked OK so do some stuff
149
                                        new EnableCDNTask().execute((Void[]) null);
150
                                }
151
                        })
152
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
153
                                public void onClick(DialogInterface dialog, int whichButton) {
154
                                        // User clicked Cancel so do some stuff
155
                                }
156
                        })
157
                        .create();
158
                case R.id.disable_button:
159
                    return new AlertDialog.Builder(EnableCDNActivity.this)
160
                        .setIcon(R.drawable.alert_dialog_icon)
161
                        .setTitle("Change Attributes")
162
                        .setMessage("Are you sure you want to disable CDN, and/or change attributes?")
163
                        .setPositiveButton("Change Attributes", new DialogInterface.OnClickListener() {
164
                                public void onClick(DialogInterface dialog, int whichButton) {
165
                                        // User clicked OK so do some stuff
166
                                new DisableCDNTask().execute((Void[]) null);
167
                                }
168
                        })
169
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
170
                                public void onClick(DialogInterface dialog, int whichButton) {
171
                                        // User clicked Cancel so do some stuff
172
                                }
173
                        })
174
                        .create();
175
                }
176
                return null;
177
         }
178
    private void setActivityIndicatorsVisibility(int visibility) {
179
        ProgressBar pb = (ProgressBar) findViewById(R.id.save_container_progress_bar);
180
            TextView tv = (TextView) findViewById(R.id.saving_container_label);
181
        pb.setVisibility(visibility);
182
        tv.setVisibility(visibility);
183
    }
184

    
185
    @SuppressWarnings("unused")
186
        private void showActivityIndicators() {
187
            setActivityIndicatorsVisibility(View.VISIBLE);
188
    }
189
    
190
    private void hideActivityIndicators() {
191
            setActivityIndicatorsVisibility(View.INVISIBLE);
192
    }
193
    //using CloudServersException, it works for us too
194
    private CloudServersException parseCloudServersException(HttpResponse response) {
195
                CloudServersException cse = new CloudServersException();
196
                try {
197
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
198
                    String body = responseHandler.handleResponse(response);
199
                    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
200
                    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
201
                    XMLReader xmlReader = saxParser.getXMLReader();
202
                    xmlReader.setContentHandler(parser);
203
                    xmlReader.parse(new InputSource(new StringReader(body)));                            
204
                    cse = parser.getException();                            
205
                } catch (ClientProtocolException e) {
206
                        cse = new CloudServersException();
207
                        cse.setMessage(e.getLocalizedMessage());
208
                } catch (IOException e) {
209
                        cse = new CloudServersException();
210
                        cse.setMessage(e.getLocalizedMessage());
211
                } catch (ParserConfigurationException e) {
212
                        cse = new CloudServersException();
213
                        cse.setMessage(e.getLocalizedMessage());
214
                } catch (SAXException e) {
215
                        cse = new CloudServersException();
216
                        cse.setMessage(e.getLocalizedMessage());
217
                } catch (FactoryConfigurationError e) {
218
                        cse = new CloudServersException();
219
                        cse.setMessage(e.getLocalizedMessage());
220
                }
221
                return cse;
222
    }
223
    
224
    public class EnableCDNTask extends AsyncTask<Void, Void, HttpResponse> {
225
            private CloudServersException exception;
226
            
227
            @Override
228
                protected HttpResponse doInBackground(Void... arg0) {
229
                        HttpResponse resp = null;
230
                        try {
231
                                resp = (new ContainerManager()).enable(containerName,  selectedTtlId, selectedLogRetId);
232
                        } catch (CloudServersException e) {
233
                                exception = e;
234
                        }
235
                        return resp;
236
                }
237
            
238
                @Override
239
                protected void onPostExecute(HttpResponse response) {
240
                        if (response != null) {
241
                                int statusCode = response.getStatusLine().getStatusCode();
242
                                if (statusCode == 201) {
243
                                        setResult(Activity.RESULT_OK);
244
                                        finish();
245
                                } else if (statusCode == 202) {
246
                                                showAlert("Accepted", "Container is already cdn enabled");
247
                                                finish();
248
                                } else  {                                        
249
                                        CloudServersException cse = parseCloudServersException(response);
250
                                        if ("".equals(cse.getMessage())) {
251
                                                showAlert("Error", "There was a problem creating your container.");
252
                                        } else {
253
                                                showAlert("Error", "There was a problem creating your container: " + cse.getMessage() + " Check container name and try again");
254
                                        }
255
                                }
256
                        } else if (exception != null) {
257
                                showAlert("Error", "There was a problem creating your container: " + exception.getMessage()+" Check container name and try again");                                
258
                        }                        
259
                }
260
    }
261
    public class DisableCDNTask extends AsyncTask<Void, Void, HttpResponse> {
262
            private CloudServersException exception;
263
            
264
            @Override
265
                protected HttpResponse doInBackground(Void... arg0) {
266
                        HttpResponse resp = null;
267
                        try {
268
                                resp = (new ContainerManager()).disable(containerName, selectedCdnId, selectedTtlId, selectedLogRetId);
269
                        } catch (CloudServersException e) {
270
                                exception = e;
271
                        }
272
                        return resp;
273
                }
274
            
275
                @Override
276
                protected void onPostExecute(HttpResponse response) {
277
                        if (response != null) {
278
                                int statusCode = response.getStatusLine().getStatusCode();
279
                                if (statusCode == 202) {
280
                                        setResult(Activity.RESULT_OK);
281
                                        finish();
282
                                } else {
283
                                        CloudServersException cse = parseCloudServersException(response);
284
                                        if ("".equals(cse.getMessage())) {
285
                                                showAlert("Error", "There was a problem creating your container.");
286
                                        } else {
287
                                                showAlert("Error", "There was a problem creating your container: " + cse.getMessage() + " Check container name and try again");
288
                                        }
289
                                }
290
                        } else if (exception != null) {
291
                                showAlert("Error", "There was a problem creating your container: " + exception.getMessage()+" Check container name and try again");                                
292
                        }                        
293
                }
294
    }
295
        public void onClick(View v) {
296
                // TODO Auto-generated method stub
297
                
298
        }
299
        
300

    
301

    
302
        }