Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ViewServerActivity.java @ f58bf9f4

History | View | Annotate | Download (22.4 kB)

1
/**
2
 * 
3
 */
4
package com.rackspacecloud.android;
5

    
6
import java.io.IOException;
7
import java.io.StringReader;
8
import java.util.Iterator;
9

    
10
import javax.xml.parsers.FactoryConfigurationError;
11
import javax.xml.parsers.ParserConfigurationException;
12
import javax.xml.parsers.SAXParser;
13
import javax.xml.parsers.SAXParserFactory;
14

    
15
import org.apache.http.HttpResponse;
16
import org.apache.http.client.ClientProtocolException;
17
import org.apache.http.impl.client.BasicResponseHandler;
18
import org.xml.sax.InputSource;
19
import org.xml.sax.SAXException;
20
import org.xml.sax.XMLReader;
21

    
22
import android.app.Activity;
23
import android.app.AlertDialog;
24
import android.app.Dialog;
25
import android.content.DialogInterface;
26
import android.content.Intent;
27
import android.graphics.Color;
28
import android.os.AsyncTask;
29
import android.os.Bundle;
30
import android.view.View;
31
import android.view.View.OnClickListener;
32
import android.widget.Button;
33
import android.widget.EditText;
34
import android.widget.ImageView;
35
import android.widget.LinearLayout;
36
import android.widget.TextView;
37

    
38
import com.rackspace.cloud.servers.api.client.CloudServersException;
39
import com.rackspace.cloud.servers.api.client.Flavor;
40
import com.rackspace.cloud.servers.api.client.Image;
41
import com.rackspace.cloud.servers.api.client.Server;
42
import com.rackspace.cloud.servers.api.client.ServerManager;
43
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
44

    
45
/**
46
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
47
 *
48
 */
49
public class ViewServerActivity extends Activity {
50
        
51
        private Server server;
52
        private boolean ipAddressesLoaded; // to prevent polling from loading tons of duplicates
53
        private Flavor[] flavors;
54
        private String[] flavorNames;
55
        private String selectedFlavorId;
56
        private boolean imageLoaded;
57
    private String modifiedServerName;
58
    private Image[] images;
59
        private String[] imageNames;
60
        private String selectedImageId;
61
        
62
    /** Called when the activity is first created. */
63
    @Override
64
    public void onCreate(Bundle savedInstanceState) {
65
        super.onCreate(savedInstanceState);
66
        server = (Server) this.getIntent().getExtras().get("server");
67
        setContentView(R.layout.viewserver);
68
        restoreState(savedInstanceState);
69
    }
70
    
71
        @Override
72
        protected void onSaveInstanceState(Bundle outState) {
73
                super.onSaveInstanceState(outState);
74
                outState.putSerializable("server", server);
75
                outState.putBoolean("imageLoaded", imageLoaded);
76
        }
77

    
78
    private void restoreState(Bundle state) {
79
            if (state != null && state.containsKey("server")) {
80
                    server = (Server) state.getSerializable("server");
81
                    imageLoaded = state.getBoolean("imageLoaded");
82
            }
83
        loadServerData();
84
        setupButtons();
85
        loadFlavors();
86
        loadImages();
87
    }
88

    
89
    private void loadImage() {
90
            // hate to do this, but devices run out of memory after a few rotations
91
            // because the background images are so large
92
            if (!imageLoaded) {
93
                ImageView osLogo = (ImageView) findViewById(R.id.view_server_os_logo);
94
                osLogo.setAlpha(100);
95
                    osLogo.setImageResource(server.getImage().logoResourceId());
96
                    imageLoaded = true;
97
            }
98

    
99
    }
100
    
101
    private void loadServerData() {
102
            TextView name = (TextView) findViewById(R.id.view_server_name);
103
            name.setText(server.getName());
104
            
105
            TextView os = (TextView) findViewById(R.id.view_server_os);
106
            os.setText(server.getImage().getName());
107
            
108
            TextView memory = (TextView) findViewById(R.id.view_server_memory);
109
            memory.setText(server.getFlavor().getRam() + " MB");
110
            
111
            TextView disk = (TextView) findViewById(R.id.view_server_disk);
112
            disk.setText(server.getFlavor().getDisk() + " GB");
113
            
114
            TextView status = (TextView) findViewById(R.id.view_server_status);
115

    
116
            // show status and possibly the progress, with polling
117
            if (!"ACTIVE".equals(server.getStatus())) {
118
                status.setText(server.getStatus() + " - " + server.getProgress() + "%");
119
                    new PollServerTask().execute((Void[]) null);
120
            } else {
121
                status.setText(server.getStatus());
122
            }
123
            
124
            if (!ipAddressesLoaded) {
125
                    // public IPs
126
                    int layoutIndex = 12; // public IPs start here
127
                    LinearLayout layout = (LinearLayout) this.findViewById(R.id.view_server_layout);            
128
                    String publicIps[] = server.getPublicIpAddresses();
129
                    for (int i = 0; i < publicIps.length; i++) {
130
                        TextView tv = new TextView(this.getBaseContext());
131
                        tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
132
                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
133
                        tv.setTextSize(os.getTextSize());
134
                        tv.setTextColor(Color.WHITE);
135
                        tv.setText(publicIps[i]);
136
                        layout.addView(tv, layoutIndex++);
137
                    }
138
                    
139
                    // private IPs
140
                    layoutIndex++; // skip over the Private IPs label
141
                    String privateIps[] = server.getPrivateIpAddresses();
142
                    for (int i = 0; i < privateIps.length; i++) {
143
                        TextView tv = new TextView(this.getBaseContext());
144
                        tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
145
                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
146
                        tv.setTextSize(os.getTextSize());
147
                        tv.setTextColor(Color.WHITE);
148
                        tv.setText(privateIps[i]);
149
                        layout.addView(tv, layoutIndex++);
150
                    }
151

    
152
                    loadImage();
153
                    ipAddressesLoaded = true;
154
            }
155
    }
156
    
157
    private void loadFlavors() {
158
                flavorNames = new String[Flavor.getFlavors().size()]; 
159
                flavors = new Flavor[Flavor.getFlavors().size()];
160

    
161
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
162
                int i = 0;
163
                while (iter.hasNext()) {
164
                        Flavor flavor = iter.next();
165
                        flavors[i] = flavor;
166
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk() + " GB disk";
167
                        i++;
168
                }
169
                selectedFlavorId = flavors[0].getId();
170
    }
171
    
172
    private void loadImages() {
173
                imageNames = new String[Image.getImages().size()]; 
174
                images = new Image[Image.getImages().size()];
175

    
176
                Iterator<Image> iter = Image.getImages().values().iterator();
177
                int i = 0;
178
                while (iter.hasNext()) {
179
                        Image image = iter.next();
180
                        images[i] = image;
181
                        imageNames[i] = image.getName(); 
182
                        i++;
183
                }
184
                selectedImageId = images[0].getId();
185
                
186
    }
187

    
188
    private void setupButton(int resourceId, OnClickListener onClickListener) {
189
                Button button = (Button) findViewById(resourceId);
190
                button.setOnClickListener(onClickListener);
191
    }
192
    
193
    private void setupButtons() {
194
            setupButton(R.id.view_server_soft_reboot_button, new OnClickListener() {
195
            public void onClick(View v) {
196
                showDialog(R.id.view_server_soft_reboot_button);
197
            }
198
        });
199
            
200
            setupButton(R.id.view_server_hard_reboot_button, new OnClickListener() {
201
            public void onClick(View v) {
202
                showDialog(R.id.view_server_hard_reboot_button);
203
            }
204
            });
205

    
206
            setupButton(R.id.view_server_resize_button, new OnClickListener() {
207
            public void onClick(View v) {
208
                showDialog(R.id.view_server_resize_button);
209
            }
210
            });
211

    
212
            setupButton(R.id.view_server_delete_button, new OnClickListener() {
213
            public void onClick(View v) {
214
                showDialog(R.id.view_server_delete_button);
215
            }
216
            });
217
            
218
            setupButton(R.id.view_server_rename_button, new OnClickListener() {
219
            public void onClick(View v) {
220
                showDialog(R.id.view_server_rename_button);
221
            }
222
            });
223
            
224
            setupButton(R.id.view_server_rebuild_button, new OnClickListener() {
225
            public void onClick(View v) {
226
                showDialog(R.id.view_server_rebuild_button);
227
            }
228
            });
229
            
230
            
231
            setupButton(R.id.view_server_backup_button, new OnClickListener() {
232
            public void onClick(View v) {
233
                    Intent viewIntent = new Intent(v.getContext(), BackupServerActivity.class);
234
                    viewIntent.putExtra("server", server);
235
                    startActivity(viewIntent);
236
            }
237
            });
238
            
239
            setupButton(R.id.view_server_password_button, new OnClickListener() {
240
            public void onClick(View v) {
241
                    Intent viewIntent = new Intent(v.getContext(), PasswordServerActivity.class);
242
                    viewIntent.putExtra("server", server);
243
                    startActivity(viewIntent);
244
            }
245
            });
246
            
247
            setupButton(R.id.view_server_ping_button, new OnClickListener() {
248
            public void onClick(View v) {
249
                    Intent viewIntent = new Intent(v.getContext(), PingServerActivity.class);
250
                    
251
                    //ping the first public ip
252
                    viewIntent.putExtra("ipAddress", server.getPublicIpAddresses()[0]);
253
                    startActivity(viewIntent);
254
            }
255
            });
256
            
257
    }
258
    
259
    private void showAlert(String title, String message) {
260
                AlertDialog alert = new AlertDialog.Builder(this).create();
261
                alert.setTitle(title);
262
                alert.setMessage(message);
263
                alert.setButton("OK", new DialogInterface.OnClickListener() {
264
              public void onClick(DialogInterface dialog, int which) {
265
                return;
266
            } }); 
267
                alert.show();
268
    }
269
        
270
    /**
271
         * @return the server
272
         */
273
        public Server getServer() {
274
                return server;
275
        }
276

    
277
        /**
278
         * @param server the server to set
279
         */
280
        public void setServer(Server server) {
281
                this.server = server;
282
        }
283

    
284
    @Override
285
    protected Dialog onCreateDialog(int id) {
286
        switch (id) {
287
        case R.id.view_server_soft_reboot_button:
288
            return new AlertDialog.Builder(ViewServerActivity.this)
289
                .setIcon(R.drawable.alert_dialog_icon)
290
                .setTitle("Soft Reboot")
291
                .setMessage("Are you sure you want to perform a soft reboot?")
292
                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
293
                        public void onClick(DialogInterface dialog, int whichButton) {
294
                                // User clicked OK so do some stuff
295
                                new SoftRebootServerTask().execute((Void[]) null);
296
                        }
297
                })
298
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
299
                        public void onClick(DialogInterface dialog, int whichButton) {
300
                                // User clicked Cancel so do some stuff
301
                        }
302
                })
303
                .create();
304
        case R.id.view_server_hard_reboot_button:
305
            return new AlertDialog.Builder(ViewServerActivity.this)
306
                .setIcon(R.drawable.alert_dialog_icon)
307
                .setTitle("Hard Reboot")
308
                .setMessage("Are you sure you want to perform a hard reboot?")
309
                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
310
                        public void onClick(DialogInterface dialog, int whichButton) {
311
                                // User clicked OK so do some stuff
312
                                new HardRebootServerTask().execute((Void[]) null);
313
                        }
314
                })
315
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
316
                        public void onClick(DialogInterface dialog, int whichButton) {
317
                                // User clicked Cancel so do some stuff
318
                        }
319
                })
320
                .create();
321
        case R.id.view_server_resize_button:
322
            return new AlertDialog.Builder(ViewServerActivity.this)
323
            .setItems(flavorNames, new ResizeClickListener())
324
                .setIcon(R.drawable.alert_dialog_icon)
325
                .setTitle("Resize Server")
326
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
327
                        public void onClick(DialogInterface dialog, int whichButton) {
328
                                // User clicked Cancel so do some stuff
329
                        }
330
                })
331
                .create();
332
        case R.id.view_server_delete_button:
333
            return new AlertDialog.Builder(ViewServerActivity.this)
334
                .setIcon(R.drawable.alert_dialog_icon)
335
                .setTitle("Delete Server")
336
                .setMessage("Are you sure you want to delete this server?  This operation cannot be undone and all backups will be deleted.")
337
                .setPositiveButton("Delete Server", new DialogInterface.OnClickListener() {
338
                        public void onClick(DialogInterface dialog, int whichButton) {
339
                                // User clicked OK so do some stuff
340
                                new DeleteServerTask().execute((Void[]) null);
341
                        }
342
                })
343
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
344
                        public void onClick(DialogInterface dialog, int whichButton) {
345
                                // User clicked Cancel so do some stuff
346
                        }
347
                })
348
                .create();          
349
         case R.id.view_server_rename_button:
350
                final EditText input = new EditText(this);
351
                input.setText(server.getName());
352
            return new AlertDialog.Builder(ViewServerActivity.this)
353
                .setIcon(R.drawable.alert_dialog_icon)
354
            .setView(input)
355
                .setTitle("Rename")
356
                .setMessage("Enter new name for server: ")                         
357
                .setPositiveButton("Rename", new DialogInterface.OnClickListener() {
358
                        public void onClick(DialogInterface dialog, int whichButton) {
359
                                // User clicked OK so do some stuff
360
                                modifiedServerName = input.getText().toString();
361
                                new RenameServerTask().execute((Void[]) null);
362
                        }
363
                })
364
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
365
                        public void onClick(DialogInterface dialog, int whichButton) {
366
                                // User clicked Cancel so do some stuff
367
                        }
368
                })
369
                .create();     
370
         case R.id.view_server_rebuild_button:
371
            return new AlertDialog.Builder(ViewServerActivity.this)
372
            .setItems(imageNames, new RebuildClickListener())
373
                 .setIcon(R.drawable.alert_dialog_icon)
374
                 .setTitle("Rebuild Server")
375
                 .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
376
                         public void onClick(DialogInterface dialog, int whichButton) {
377
                                 // User clicked Cancel so do some stuff
378
                         }
379
                 })
380
                 .create();
381
        }
382
        return null;
383
    }
384

    
385
    private class ResizeClickListener implements android.content.DialogInterface.OnClickListener {
386

    
387
                public void onClick(DialogInterface dialog, int which) {
388
                        selectedFlavorId = which + "";
389
                        new ResizeServerTask().execute((Void[]) null);
390
                }
391
            
392
    }
393
    
394
    private class RebuildClickListener implements android.content.DialogInterface.OnClickListener {
395

    
396
                public void onClick(DialogInterface dialog, int which) {
397
                        selectedImageId = images[which].getId() + "";
398
                        new RebuildServerTask().execute((Void[]) null);
399
                }
400
            
401
    }
402
    
403

    
404
    
405
    private CloudServersException parseCloudServersException(HttpResponse response) {
406
                CloudServersException cse = new CloudServersException();
407
                try {
408
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
409
                    String body = responseHandler.handleResponse(response);
410
                    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
411
                    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
412
                    XMLReader xmlReader = saxParser.getXMLReader();
413
                    xmlReader.setContentHandler(parser);
414
                    xmlReader.parse(new InputSource(new StringReader(body)));                            
415
                    cse = parser.getException();                            
416
                } catch (ClientProtocolException e) {
417
                        cse = new CloudServersException();
418
                        cse.setMessage(e.getLocalizedMessage());
419
                } catch (IOException e) {
420
                        cse = new CloudServersException();
421
                        cse.setMessage(e.getLocalizedMessage());
422
                } catch (ParserConfigurationException e) {
423
                        cse = new CloudServersException();
424
                        cse.setMessage(e.getLocalizedMessage());
425
                } catch (SAXException e) {
426
                        cse = new CloudServersException();
427
                        cse.setMessage(e.getLocalizedMessage());
428
                } catch (FactoryConfigurationError e) {
429
                        cse = new CloudServersException();
430
                        cse.setMessage(e.getLocalizedMessage());
431
                }
432
                return cse;
433
    }
434
    
435
    // HTTP request tasks
436
    
437
        private class PollServerTask extends AsyncTask<Void, Void, Server> {
438
            
439
                @Override
440
                protected Server doInBackground(Void... arg0) {
441
                        try {
442
                                server = (new ServerManager()).find(Integer.parseInt(server.getId()));
443
                        } catch (NumberFormatException e) {
444
                                // we're polling, so need to show exceptions
445
                        } catch (CloudServersException e) {
446
                                // we're polling, so need to show exceptions
447
                        }
448
                        return server;
449
                }
450
            
451
                @Override
452
                protected void onPostExecute(Server result) {
453
                        server = result;
454
                        loadServerData();
455
                }
456
    }
457

    
458
    
459
        private class SoftRebootServerTask extends AsyncTask<Void, Void, HttpResponse> {
460
            
461
                private CloudServersException exception;
462
                
463
                @Override
464
                protected HttpResponse doInBackground(Void... arg0) {
465
                        HttpResponse resp = null;
466
                        try {
467
                                resp = (new ServerManager()).reboot(server, ServerManager.SOFT_REBOOT);
468
                        } catch (CloudServersException e) {
469
                                exception = e;
470
                        }
471
                        return resp;
472
                }
473
            
474
                @Override
475
                protected void onPostExecute(HttpResponse response) {
476

    
477
                        if (response != null) {
478
                                int statusCode = response.getStatusLine().getStatusCode();                                
479
                                if (statusCode != 202) {
480
                                        CloudServersException cse = parseCloudServersException(response);
481
                                        if ("".equals(cse.getMessage())) {
482
                                                showAlert("Error", "There was a problem rebooting your server.");
483
                                        } else {
484
                                                showAlert("Error", "There was a problem rebooting your server: " + cse.getMessage());
485
                                        }
486
                                }
487
                        } else if (exception != null) {
488
                                showAlert("Error", "There was a problem rebooting your server: " + exception.getMessage());
489
                                
490
                        }
491
                }
492
    }
493

    
494
        private class HardRebootServerTask extends AsyncTask<Void, Void, HttpResponse> {
495
            
496
                private CloudServersException exception;
497

    
498
                @Override
499
                protected HttpResponse doInBackground(Void... arg0) {
500
                        HttpResponse resp = null;                        
501
                        try {
502
                                resp = (new ServerManager()).reboot(server, ServerManager.HARD_REBOOT);
503
                        } catch (CloudServersException e) {
504
                                exception = e;
505
                        }
506
                        return resp;
507
                }
508
            
509
                @Override
510
                protected void onPostExecute(HttpResponse response) {
511
                        if (response != null) {
512
                                int statusCode = response.getStatusLine().getStatusCode();                        
513
                                if (statusCode != 202) {
514
                                        CloudServersException cse = parseCloudServersException(response);
515
                                        if ("".equals(cse.getMessage())) {
516
                                                showAlert("Error", "There was a problem rebooting your server.");
517
                                        } else {
518
                                                showAlert("Error", "There was a problem rebooting your server: " + cse.getMessage());
519
                                        }
520
                                }
521
                        } else if (exception != null) {
522
                                showAlert("Error", "There was a problem rebooting your server: " + exception.getMessage());
523
                                
524
                        }
525
                }
526
    }
527

    
528
        private class ResizeServerTask extends AsyncTask<Void, Void, HttpResponse> {
529
            
530
                private CloudServersException exception;
531

    
532
                @Override
533
                protected HttpResponse doInBackground(Void... arg0) {
534
                        HttpResponse resp = null;
535
                        try {
536
                                resp = (new ServerManager()).resize(server, Integer.parseInt(selectedFlavorId));
537
                        } catch (CloudServersException e) {
538
                                exception = e;
539
                        }
540
                        return resp;
541
                }
542
            
543
                @Override
544
                protected void onPostExecute(HttpResponse response) {
545
                        if (response != null) {
546
                                int statusCode = response.getStatusLine().getStatusCode();                        
547
                                if (statusCode == 202) {
548
                                        new PollServerTask().execute((Void[]) null);
549
                                } else {                                        
550
                                        CloudServersException cse = parseCloudServersException(response);
551
                                        if ("".equals(cse.getMessage())) {
552
                                                showAlert("Error", "There was a problem deleting your server.");
553
                                        } else {
554
                                                showAlert("Error", "There was a problem deleting your server: " + cse.getMessage());
555
                                        }                                        
556
                                }
557
                        } else if (exception != null) {
558
                                showAlert("Error", "There was a problem resizing your server: " + exception.getMessage());
559
                                
560
                        }
561
                        
562
                }
563
    }
564
        
565
        public class DeleteServerTask extends AsyncTask<Void, Void, HttpResponse> {
566
            
567
                private CloudServersException exception;
568

    
569
                @Override
570
                protected HttpResponse doInBackground(Void... arg0) {
571
                        HttpResponse resp = null;
572
                        try {
573
                                resp = (new ServerManager()).delete(server);
574
                        } catch (CloudServersException e) {
575
                                exception = e;
576
                        }
577
                        return resp;
578
                }
579
            
580
                @Override
581
                protected void onPostExecute(HttpResponse response) {
582
                        if (response != null) {
583
                                int statusCode = response.getStatusLine().getStatusCode();
584
                                if (statusCode == 202) {
585
                                        setResult(Activity.RESULT_OK);
586
                                        finish();
587
                                } else {
588
                                        CloudServersException cse = parseCloudServersException(response);
589
                                        if ("".equals(cse.getMessage())) {
590
                                                showAlert("Error", "There was a problem deleting your server.");
591
                                        } else {
592
                                                showAlert("Error", "There was a problem deleting your server: " + cse.getMessage());
593
                                        }
594
                                }
595
                        } else if (exception != null) {
596
                                showAlert("Error", "There was a problem deleting your server: " + exception.getMessage());                                
597
                        }                        
598
                }
599
    }
600
        
601
        private class RenameServerTask extends AsyncTask<Void, Void, HttpResponse> {
602
                
603
                private CloudServersException exception;
604
                
605
                @Override
606
                protected HttpResponse doInBackground(Void... arg0) {
607
                        HttpResponse resp = null;
608
                        try {
609
                                resp = (new ServerManager()).rename(server, modifiedServerName);
610
                        } catch (CloudServersException e) {
611
                                exception = e;
612
                        }
613
                        return resp;
614
                }
615
                
616
                @Override
617
                protected void onPostExecute(HttpResponse response) {
618
                        if (response != null) {
619
                                int statusCode = response.getStatusLine().getStatusCode();                        
620
                                if (statusCode == 204) {        
621
                                        new PollServerTask().execute((Void[]) null);
622
                                } else {
623
                                        CloudServersException cse = parseCloudServersException(response);
624
                                        if ("".equals(cse.getMessage())) {
625
                                                showAlert("Error", "There was a problem renaming your server.");
626
                                        } else {
627
                                                showAlert("Error", "There was a problem renaming your server: " + cse.getMessage());
628
                                        }                                        
629
                                }
630
                        }
631
                    else if (exception != null) {
632
                            showAlert("Error", "There was a problem rebooting your server: " + exception.getMessage());        
633
                    }
634
                }
635
                
636
        }
637
        
638
        private class RebuildServerTask extends AsyncTask<Void, Void, HttpResponse> {
639
            
640
                private CloudServersException exception;
641

    
642
                @Override
643
                protected HttpResponse doInBackground(Void... arg0) {
644
                        HttpResponse resp = null;
645
                        try {
646
                                resp = (new ServerManager()).rebuild(server, Integer.parseInt(selectedImageId));
647
                        } catch (CloudServersException e) {
648
                                exception = e;
649
                        }
650
                        return resp;
651
                }
652
            
653
                @Override
654
                protected void onPostExecute(HttpResponse response) {
655
                        if (response != null) {
656
                                int statusCode = response.getStatusLine().getStatusCode();                        
657
                                if (statusCode == 202) {
658
                                        new PollServerTask().execute((Void[]) null);
659
                                } else {                                        
660
                                        CloudServersException cse = parseCloudServersException(response);
661
                                        if ("".equals(cse.getMessage())) {
662
                                                showAlert("Error", "There was a problem deleting your server.");
663
                                        } else {
664
                                                showAlert("Error", "There was a problem deleting your server: " + cse.getMessage());
665
                                        }                                        
666
                                }
667
                        } else if (exception != null) {
668
                                showAlert("Error", "There was a problem resizing your server: " + exception.getMessage());
669
                                
670
                        }
671
                        
672
                }
673
    }
674
        
675
        
676
}