Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ViewServerActivity.java @ 143cdf16

History | View | Annotate | Download (23.7 kB)

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

    
6
import java.util.Arrays;
7
import java.util.Iterator;
8

    
9
import org.apache.http.HttpResponse;
10

    
11
import android.app.Activity;
12
import android.app.AlertDialog;
13
import android.app.Dialog;
14
import android.content.DialogInterface;
15
import android.content.Intent;
16
import android.graphics.Color;
17
import android.os.AsyncTask;
18
import android.os.Bundle;
19
import android.view.Menu;
20
import android.view.MenuInflater;
21
import android.view.MenuItem;
22
import android.view.View;
23
import android.view.View.OnClickListener;
24
import android.widget.Button;
25
import android.widget.EditText;
26
import android.widget.LinearLayout;
27
import android.widget.TextView;
28

    
29
import com.rackspace.cloud.servers.api.client.CloudServersException;
30
import com.rackspace.cloud.servers.api.client.Flavor;
31
import com.rackspace.cloud.servers.api.client.Image;
32
import com.rackspace.cloud.servers.api.client.Server;
33
import com.rackspace.cloud.servers.api.client.ServerManager;
34
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
35

    
36
/**
37
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
38
 *
39
 */
40
public class ViewServerActivity extends CloudActivity {
41

    
42
        private Server server;
43
        private boolean ipAddressesLoaded; // to prevent polling from loading tons of duplicates
44
        private Flavor[] flavors;
45
        private String[] flavorNames;
46
        private String selectedFlavorId;
47
        private String modifiedServerName;
48
        private Image[] images;
49
        private String[] imageNames;
50
        private String selectedImageId;
51
        private boolean isPolling;
52
        private PollServerTask pollServerTask;
53
        private boolean canPoll;
54
        private boolean noAskForConfirm;
55

    
56
        /** Called when the activity is first created. */
57
        @Override
58
        public void onCreate(Bundle savedInstanceState) {
59
                super.onCreate(savedInstanceState);
60
                trackPageView(GoogleAnalytics.PAGE_SERVER);
61
                server = (Server) this.getIntent().getExtras().get("server");
62
                setContentView(R.layout.viewserver);
63
                restoreState(savedInstanceState);
64
        }
65

    
66
        @Override
67
        protected void onSaveInstanceState(Bundle outState) {
68
                super.onSaveInstanceState(outState);
69
                outState.putSerializable("server", server);
70
                outState.putBoolean("noAskForConfirm", noAskForConfirm);
71
                if(pollServerTask != null && isPolling){
72
                        pollServerTask.cancel(true);
73
                }
74
                outState.putBoolean("wasPolling", isPolling);
75
        }
76

    
77
        protected void restoreState(Bundle state) {
78
                super.restoreState(state);
79
                if(state != null && state.containsKey("noAskForConfirm")){
80
                        noAskForConfirm = state.getBoolean("noAskForConfirm");
81
                }
82
                if(state != null && state.containsKey("wasPolling") && state.getBoolean("wasPolling") == true){
83
                        pollServerTask = new PollServerTask();
84
                        pollServerTask.execute((Void[]) null);
85
                }
86
                if (server == null && state != null && state.containsKey("server")) {
87
                        server = (Server) state.getSerializable("server");
88
                        //imageLoaded = state.getBoolean("imageLoaded");
89
                }
90
                canPoll = true;
91
                loadServerData();
92
                setupButtons();
93
                loadFlavors();
94
                loadImages();
95
        }
96

    
97
        /*
98
         * need to manage the polling task
99
         * if the activity is stopped
100
         */
101
        @Override
102
        public void onStop(){
103
                super.onStop();
104
                if(pollServerTask != null && isPolling){
105
                        pollServerTask.cancel(true);
106
                        isPolling = true;
107
                }
108
                canPoll = false;
109

    
110
        }
111

    
112
        /*
113
         * restart the pollingtask 
114
         * if it was running before
115
         * 
116
         */
117
        @Override
118
        public void onStart(){
119
                super.onStart();
120
                if(isPolling){
121
                        pollServerTask = new PollServerTask();
122
                        pollServerTask.execute((Void[]) null);
123
                }
124
                canPoll = true;
125

    
126
        }
127

    
128
        private void loadServerData() {
129
                if(server != null){
130
                        TextView name = (TextView) findViewById(R.id.view_server_name);
131
                        name.setText(server.getName());
132

    
133
                        TextView os = (TextView) findViewById(R.id.view_server_os);
134
                        os.setText(server.getImage().getName());
135

    
136
                        TextView memory = (TextView) findViewById(R.id.view_server_memory);
137
                        memory.setText(server.getFlavor().getRam() + " MB");
138

    
139
                        TextView disk = (TextView) findViewById(R.id.view_server_disk);
140
                        disk.setText(server.getFlavor().getDisk() + " GB");
141

    
142
                        TextView status = (TextView) findViewById(R.id.view_server_status);
143

    
144
                        if(noAskForConfirm == false){
145
                                if(status.getText().toString().contains("VERIFY_RESIZE")){
146
                                        //show the confimresizeactivity
147
                                        noAskForConfirm = true;
148
                                        Intent viewIntent = new Intent(getApplicationContext(), ConfirmResizeActivity.class);
149
                                        viewIntent.putExtra("server", server);
150
                                        startActivity(viewIntent);
151
                                }
152
                        }
153

    
154
                        // show status and possibly the progress, with polling
155
                        if (!"ACTIVE".equals(server.getStatus())) {
156
                                status.setText(server.getStatus() + " - " + server.getProgress() + "%");
157
                                pollServerTask = new PollServerTask();
158
                                pollServerTask.execute((Void[]) null);
159
                        } else {
160
                                status.setText(server.getStatus());
161
                        }
162

    
163
                        if (!ipAddressesLoaded) {
164
                                // public IPs
165
                                int layoutIndex = 12; // public IPs start here
166
                                LinearLayout layout = (LinearLayout) this.findViewById(R.id.view_server_layout);            
167
                                String publicIps[] = server.getPublicIpAddresses();
168
                                for (int i = 0; i < publicIps.length; i++) {
169
                                        TextView tv = new TextView(this.getBaseContext());
170
                                        tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
171
                                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
172
                                        tv.setTextSize(os.getTextSize());
173
                                        tv.setGravity(os.getGravity());
174
                                        tv.setTextColor(Color.WHITE);
175
                                        tv.setText(publicIps[i]);
176
                                        layout.addView(tv, layoutIndex++);
177
                                }
178

    
179
                                // private IPs
180
                                layoutIndex++; // skip over the Private IPs label
181
                                String privateIps[] = server.getPrivateIpAddresses();
182
                                for (int i = 0; i < privateIps.length; i++) {
183
                                        TextView tv = new TextView(this.getBaseContext());
184
                                        tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
185
                                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
186
                                        tv.setTextSize(os.getTextSize());
187
                                        tv.setGravity(os.getGravity());
188
                                        tv.setTextColor(Color.WHITE);
189
                                        tv.setText(privateIps[i]);
190
                                        layout.addView(tv, layoutIndex++);
191
                                }
192
                                ipAddressesLoaded = true;
193
                        }
194
                }
195

    
196
                //loadImage();
197
        }
198

    
199
        private void loadFlavors() {
200
                flavorNames = new String[Flavor.getFlavors().size()]; 
201
                flavors = new Flavor[Flavor.getFlavors().size()];
202

    
203
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
204
                int i = 0;
205
                while (iter.hasNext()) {
206
                        Flavor flavor = iter.next();
207
                        flavors[i] = flavor;
208
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk() + " GB disk";
209
                        i++;
210
                }
211
                selectedFlavorId = flavors[0].getId();
212
        }
213

    
214
        private void loadImages() {
215
                imageNames = new String[Image.getImages().size()]; 
216
                images = new Image[Image.getImages().size()];
217

    
218
                Iterator<Image> iter = Image.getImages().values().iterator();
219
                int i = 0;
220
                while (iter.hasNext()) {
221
                        Image image = iter.next();
222
                        images[i] = image;
223
                        imageNames[i] = image.getName(); 
224
                        i++;
225
                }
226
                //sort arrays so they display nicely in the spinner
227
                Arrays.sort(images);
228
                Arrays.sort(imageNames);
229
                selectedImageId = images[0].getId();
230

    
231
        }
232

    
233
        private void setupButton(int resourceId, OnClickListener onClickListener) {
234
                Button button = (Button) findViewById(resourceId);
235
                button.setOnClickListener(onClickListener);
236
        }
237

    
238
        private void setupButtons() {
239
                setupButton(R.id.view_server_soft_reboot_button, new OnClickListener() {
240
                        public void onClick(View v) {
241
                                showDialog(R.id.view_server_soft_reboot_button);
242
                        }
243
                });
244

    
245
                setupButton(R.id.view_server_hard_reboot_button, new OnClickListener() {
246
                        public void onClick(View v) {
247
                                showDialog(R.id.view_server_hard_reboot_button);
248
                        }
249
                });
250

    
251
                setupButton(R.id.view_server_resize_button, new OnClickListener() {
252
                        public void onClick(View v) {
253
                                showDialog(R.id.view_server_resize_button);
254
                        }
255
                });
256

    
257
                setupButton(R.id.view_server_delete_button, new OnClickListener() {
258
                        public void onClick(View v) {
259
                                showDialog(R.id.view_server_delete_button);
260
                        }
261
                });
262

    
263
                setupButton(R.id.view_server_rename_button, new OnClickListener() {
264
                        public void onClick(View v) {
265
                                showDialog(R.id.view_server_rename_button);
266
                        }
267
                });
268

    
269
                setupButton(R.id.view_server_rebuild_button, new OnClickListener() {
270
                        public void onClick(View v) {
271
                                showDialog(R.id.view_server_rebuild_button);
272
                        }
273
                });
274

    
275

    
276
                setupButton(R.id.view_server_backup_button, new OnClickListener() {
277
                        public void onClick(View v) {
278
                                Intent viewIntent = new Intent(v.getContext(), BackupServerActivity.class);
279
                                viewIntent.putExtra("server", server);
280
                                startActivity(viewIntent);
281
                        }
282
                });
283

    
284
                setupButton(R.id.view_server_password_button, new OnClickListener() {
285
                        public void onClick(View v) {
286
                                Intent viewIntent = new Intent(v.getContext(), PasswordServerActivity.class);
287
                                viewIntent.putExtra("server", server);
288
                                startActivity(viewIntent);
289
                        }
290
                });
291

    
292
                setupButton(R.id.view_server_ping_button, new OnClickListener() {
293
                        public void onClick(View v) {
294
                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_PING, "", -1);
295

    
296
                                //ping the first public ip
297
                                Intent viewIntent = new Intent(v.getContext(), PingServerActivity.class);
298
                                viewIntent.putExtra("ipAddress", server.getPublicIpAddresses()[0]);
299
                                startActivity(viewIntent);
300

    
301

    
302
                        }
303
                });
304

    
305
        }
306

    
307
        /**
308
         * @return the server
309
         */
310
        public Server getServer() {
311
                return server;
312
        }
313

    
314
        /**
315
         * @param server the server to set
316
         */
317
        public void setServer(Server server) {
318
                this.server = server;
319
        }
320

    
321
        //setup menu for when menu button is pressed
322
        public boolean onCreateOptionsMenu(Menu menu) {
323
                super.onCreateOptionsMenu(menu);
324
                MenuInflater inflater = getMenuInflater();
325
                inflater.inflate(R.menu.view_server_activity_menu, menu);
326
                return true;
327
        } 
328

    
329
        @Override 
330
        //in options menu, when add account is selected go to add account activity
331
        public boolean onOptionsItemSelected(MenuItem item) {
332
                switch (item.getItemId()) {
333
                case R.id.refresh_server:
334
                        loadServerData();
335
                        return true;
336
                }        
337
                return false;
338
        } 
339

    
340
        @Override
341
        protected Dialog onCreateDialog(int id) {
342
                if(server == null){
343
                        return new AlertDialog.Builder(ViewServerActivity.this)
344
                        .setIcon(R.drawable.alert_dialog_icon)
345
                        .setTitle("Error")
346
                        .setMessage("Server is Busy")
347
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
348
                                public void onClick(DialogInterface dialog, int whichButton) {
349
                                        // User clicked Cancel so do some stuff
350
                                }
351
                        })
352
                        .create();
353
                }
354
                else{
355
                        switch (id) {
356
                        case R.id.view_server_soft_reboot_button:
357
                                return new AlertDialog.Builder(ViewServerActivity.this)
358
                                .setIcon(R.drawable.alert_dialog_icon)
359
                                .setTitle("Soft Reboot")
360
                                .setMessage("Are you sure you want to perform a soft reboot?")
361
                                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
362
                                        public void onClick(DialogInterface dialog, int whichButton) {
363
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBOOT, "", -1);
364
                                                new SoftRebootServerTask().execute((Void[]) null);
365
                                        }
366
                                })
367
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
368
                                        public void onClick(DialogInterface dialog, int whichButton) {
369
                                                // User clicked Cancel so do some stuff
370
                                        }
371
                                })
372
                                .create();
373
                        case R.id.view_server_hard_reboot_button:
374
                                return new AlertDialog.Builder(ViewServerActivity.this)
375
                                .setIcon(R.drawable.alert_dialog_icon)
376
                                .setTitle("Hard Reboot")
377
                                .setMessage("Are you sure you want to perform a hard reboot?")
378
                                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
379
                                        public void onClick(DialogInterface dialog, int whichButton) {
380
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBOOT, "", -1);
381
                                                new HardRebootServerTask().execute((Void[]) null);
382
                                        }
383
                                })
384
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
385
                                        public void onClick(DialogInterface dialog, int whichButton) {
386
                                                // User clicked Cancel so do some stuff
387
                                        }
388
                                })
389
                                .create();
390
                        case R.id.view_server_resize_button:
391
                                return new AlertDialog.Builder(ViewServerActivity.this)
392
                                .setItems(flavorNames, new ResizeClickListener())
393
                                .setIcon(R.drawable.alert_dialog_icon)
394
                                .setTitle("Resize Server")
395
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
396
                                        public void onClick(DialogInterface dialog, int whichButton) {
397
                                                // User clicked Cancel so do some stuff
398
                                        }
399
                                })
400
                                .create();
401
                        case R.id.view_server_delete_button:
402
                                return new AlertDialog.Builder(ViewServerActivity.this)
403
                                .setIcon(R.drawable.alert_dialog_icon)
404
                                .setTitle("Delete Server")
405
                                .setMessage("Are you sure you want to delete this server?  This operation cannot be undone and all backups will be deleted.")
406
                                .setPositiveButton("Delete Server", new DialogInterface.OnClickListener() {
407
                                        public void onClick(DialogInterface dialog, int whichButton) {
408
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_DELETE, "", -1);
409
                                                new DeleteServerTask().execute((Void[]) null);
410
                                        }
411
                                })
412
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
413
                                        public void onClick(DialogInterface dialog, int whichButton) {
414
                                                // User clicked Cancel so do some stuff
415
                                        }
416
                                })
417
                                .create();          
418
                        case R.id.view_server_rename_button:
419
                                final EditText input = new EditText(this);
420
                                input.setText(server.getName());
421
                                return new AlertDialog.Builder(ViewServerActivity.this)
422
                                .setIcon(R.drawable.alert_dialog_icon)
423
                                .setView(input)
424
                                .setTitle("Rename")
425
                                .setMessage("Enter new name for server: ")                         
426
                                .setPositiveButton("Rename", new DialogInterface.OnClickListener() {
427
                                        public void onClick(DialogInterface dialog, int whichButton) {
428
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_RENAME, "", -1);
429
                                                modifiedServerName = input.getText().toString();
430
                                                new RenameServerTask().execute((Void[]) null);
431
                                        }
432
                                })
433
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
434
                                        public void onClick(DialogInterface dialog, int whichButton) {
435
                                                // User clicked Cancel so do some stuff
436
                                        }
437
                                })
438
                                .create();     
439
                        case R.id.view_server_rebuild_button:
440
                                return new AlertDialog.Builder(ViewServerActivity.this)
441
                                .setItems(imageNames, new RebuildClickListener())
442
                                .setIcon(R.drawable.alert_dialog_icon)
443
                                .setTitle("Rebuild Server")
444
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
445
                                        public void onClick(DialogInterface dialog, int whichButton) {
446
                                                // User clicked Cancel so do some stuff
447
                                        }
448
                                })
449
                                .create();
450
                        }
451
                }
452
                return new AlertDialog.Builder(ViewServerActivity.this)
453
                .setIcon(R.drawable.alert_dialog_icon)
454
                .setTitle("Error")
455
                .setMessage("Server is Busy")
456
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
457
                        public void onClick(DialogInterface dialog, int whichButton) {
458
                                // User clicked Cancel so do some stuff
459
                        }
460
                })
461
                .create();
462
        }
463

    
464
        private class ResizeClickListener implements android.content.DialogInterface.OnClickListener {
465

    
466
                public void onClick(DialogInterface dialog, int which) {
467
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_RESIZE, "", -1);
468
                        selectedFlavorId = which + 1 + "";
469
                        new ResizeServerTask().execute((Void[]) null);
470
                }
471

    
472
        }
473

    
474
        private class RebuildClickListener implements android.content.DialogInterface.OnClickListener {
475

    
476
                public void onClick(DialogInterface dialog, int which) {
477
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBUILD, "", -1);
478
                        selectedImageId = images[which].getId() + "";
479
                        new RebuildServerTask().execute((Void[]) null);
480
                }
481

    
482
        }
483

    
484
        // HTTP request tasks
485

    
486
        private class PollServerTask extends AsyncTask<Void, Void, Server> {
487

    
488
                private Server tempServer;
489

    
490
                @Override 
491
                protected void onPreExecute(){
492
                        isPolling = true;
493
                }
494

    
495
                @Override
496
                protected Server doInBackground(Void... arg0) {
497
                        if(isCancelled() || !canPoll){
498
                                return null;
499
                        }
500
                        try {
501
                                tempServer = (new ServerManager()).find(Integer.parseInt(server.getId()), getContext());
502
                        } catch (NumberFormatException e) {
503
                                // we're polling, so need to show exceptions
504
                        } catch (CloudServersException e) {
505
                                // we're polling, so need to show exceptions
506
                        }
507
                        return tempServer;
508
                }
509

    
510
                @Override
511
                protected void onPostExecute(Server result) {
512
                        server = result;
513
                        if(server != null){
514
                                loadServerData();
515
                        }
516
                        isPolling = false;
517
                }
518

    
519
                @Override
520
                protected void onCancelled (){
521
                        isPolling = false;
522
                }
523

    
524
        }
525

    
526

    
527
        private class SoftRebootServerTask extends AsyncTask<Void, Void, HttpBundle> {
528

    
529
                private CloudServersException exception;
530

    
531
                @Override
532
                //let user know their process has started
533
                protected void onPreExecute(){
534
                        showToast("Reboot process has begun");
535
                }
536

    
537
                @Override
538
                protected HttpBundle doInBackground(Void... arg0) {
539
                        HttpBundle bundle = null;
540
                        try {
541
                                bundle = (new ServerManager()).reboot(server, ServerManager.SOFT_REBOOT, getContext());
542
                        } catch (CloudServersException e) {
543
                                exception = e;
544
                        }
545
                        return bundle;
546
                }
547

    
548
                @Override
549
                protected void onPostExecute(HttpBundle bundle) {
550
                        HttpResponse response = bundle.getResponse();
551
                        if (response != null) {
552
                                int statusCode = response.getStatusLine().getStatusCode();        
553
                                if(statusCode == 202){ showToast("Reboot successful"); }
554
                                if (statusCode != 202) {
555
                                        CloudServersException cse = parseCloudServersException(response);
556
                                        if ("".equals(cse.getMessage())) {
557
                                                showError("There was a problem rebooting your server.", bundle);
558
                                        } else {
559
                                                showError("There was a problem rebooting your server: " + cse.getMessage(), bundle);
560
                                        }
561
                                }
562
                        } else if (exception != null) {
563
                                showError("There was a problem rebooting your server: " + exception.getMessage(), bundle);
564

    
565
                        }
566
                }
567
        }
568

    
569
        private class HardRebootServerTask extends AsyncTask<Void, Void, HttpBundle> {
570

    
571
                private CloudServersException exception;
572

    
573
                @Override
574
                //let user know their process has started
575
                protected void onPreExecute(){
576
                        showToast("Reboot process has begun");
577
                }
578

    
579
                @Override
580
                protected HttpBundle doInBackground(Void... arg0) {
581
                        HttpBundle bundle = null;                
582
                        try {
583
                                bundle = (new ServerManager()).reboot(server, ServerManager.HARD_REBOOT, getContext());
584
                        } catch (CloudServersException e) {
585
                                exception = e;
586
                        }
587
                        return bundle;
588
                }
589

    
590
                @Override
591
                protected void onPostExecute(HttpBundle bundle) {
592
                        HttpResponse response = bundle.getResponse();
593
                        if (response != null) {
594
                                int statusCode = response.getStatusLine().getStatusCode();        
595
                                if(statusCode == 202){ showToast("Reboot successful"); }
596
                                if (statusCode != 202) {
597
                                        CloudServersException cse = parseCloudServersException(response);
598
                                        if ("".equals(cse.getMessage())) {
599
                                                showError("There was a problem rebooting your server.", bundle);
600
                                        } else {
601
                                                showError("There was a problem rebooting your server: " + cse.getMessage(), bundle);
602
                                        }
603
                                }
604
                        } else if (exception != null) {
605
                                showError("There was a problem rebooting your server: " + exception.getMessage(), bundle);
606

    
607
                        }
608
                }
609
        }
610

    
611
        private class ResizeServerTask extends AsyncTask<Void, Void, HttpBundle> {
612

    
613
                private CloudServersException exception;
614

    
615
                @Override
616
                protected void onPreExecute(){
617
                        showToast("Resize process has begun, please confirm your resize after process finishes.");
618
                }
619

    
620
                @Override
621
                protected HttpBundle doInBackground(Void... arg0) {
622
                        HttpBundle bundle = null;        
623
                        try {
624
                                bundle = (new ServerManager()).resize(server, Integer.parseInt(selectedFlavorId), getContext());
625
                        } catch (CloudServersException e) {
626
                                exception = e;
627
                        }
628
                        return bundle;
629
                }
630

    
631
                @Override
632
                protected void onPostExecute(HttpBundle bundle) {
633
                        HttpResponse response = bundle.getResponse();
634
                        if (response != null) {
635
                                int statusCode = response.getStatusLine().getStatusCode();                        
636
                                if (statusCode == 202) {
637
                                        pollServerTask = new PollServerTask();
638
                                        pollServerTask.execute((Void[]) null);
639
                                } else {                                        
640
                                        CloudServersException cse = parseCloudServersException(response);
641
                                        if ("".equals(cse.getMessage())) {
642
                                                showError("There was a problem resizing your server.", bundle);
643
                                        } else {
644
                                                showError("There was a problem resizing your server: " + cse.getMessage(), bundle);
645
                                        }                                        
646
                                }
647
                        } else if (exception != null) {
648
                                showError("There was a problem resizing your server: " + exception.getMessage(), bundle);
649

    
650
                        }
651

    
652
                }
653
        }
654

    
655

    
656
        public class DeleteServerTask extends AsyncTask<Void, Void, HttpBundle> {
657

    
658
                private CloudServersException exception;
659

    
660
                @Override
661
                //let user know their process has started
662
                protected void onPreExecute(){
663
                        showToast("Delete process has begun");
664
                }
665
                @Override
666
                protected HttpBundle doInBackground(Void... arg0) {
667
                        HttpBundle bundle = null;
668
                        try {
669
                                bundle = (new ServerManager()).delete(server, getContext());
670
                        } catch (CloudServersException e) {
671
                                exception = e;
672
                        }
673
                        return bundle;
674
                }
675

    
676
                @Override
677
                protected void onPostExecute(HttpBundle bundle) {
678
                        HttpResponse response = bundle.getResponse();
679
                        if (response != null) {
680
                                int statusCode = response.getStatusLine().getStatusCode();
681
                                if (statusCode == 202) {
682
                                        showToast("Delete successful");
683
                                        setResult(Activity.RESULT_OK);
684
                                        finish();
685
                                } else {
686
                                        CloudServersException cse = parseCloudServersException(response);
687
                                        if ("".equals(cse.getMessage())) {
688
                                                showError("There was a problem deleting your server.", bundle);
689
                                        } else {
690
                                                showError("There was a problem deleting your server: " + cse.getMessage(), bundle);
691
                                        }
692
                                }
693
                        } else if (exception != null) {
694
                                showError("There was a problem deleting your server: " + exception.getMessage(), bundle);                                
695
                        }                        
696
                }
697
        }
698

    
699
        private class RenameServerTask extends AsyncTask<Void, Void, HttpBundle> {
700

    
701
                private CloudServersException exception;
702

    
703
                @Override
704
                //let user know their process has started
705
                protected void onPreExecute(){
706
                        showToast("Rename process has begun.");
707
                }
708

    
709
                @Override
710
                protected HttpBundle doInBackground(Void... arg0) {
711
                        HttpBundle bundle = null;
712
                        try {
713
                                bundle = (new ServerManager()).rename(server, modifiedServerName, getContext());
714
                        } catch (CloudServersException e) {
715
                                exception = e;
716
                        }
717
                        return bundle;
718
                }
719

    
720
                @Override
721
                protected void onPostExecute(HttpBundle bundle) {
722
                        HttpResponse response = bundle.getResponse();
723
                        if (response != null) {
724
                                int statusCode = response.getStatusLine().getStatusCode();        
725
                                if (statusCode == 204) {        
726
                                        showToast("Rename successful");
727
                                        pollServerTask = new PollServerTask();
728
                                        pollServerTask.execute((Void[]) null);
729
                                } else {
730
                                        CloudServersException cse = parseCloudServersException(response);
731
                                        if ("".equals(cse.getMessage())) {
732
                                                showError("There was a problem renaming your server.", bundle);
733
                                        } else {
734
                                                showError("There was a problem renaming your server: " + cse.getMessage(), bundle);
735
                                        }                                        
736
                                }
737
                        }
738
                        else if (exception != null) {
739
                                showError("There was a problem renaming your server: " + exception.getMessage(), bundle);        
740
                        }
741
                }
742

    
743
        }
744

    
745
        private class RebuildServerTask extends AsyncTask<Void, Void, HttpBundle> {
746

    
747
                private CloudServersException exception;
748

    
749
                @Override
750
                protected void onPreExecute(){
751
                        showToast("Rebuild process has begun");
752
                }
753

    
754
                @Override
755
                protected HttpBundle doInBackground(Void... arg0) {
756
                        HttpBundle bundle = null;
757
                        try {
758
                                bundle = (new ServerManager()).rebuild(server, Integer.parseInt(selectedImageId), getContext());
759
                        } catch (CloudServersException e) {
760
                                exception = e;
761
                        }
762
                        return bundle;
763
                }
764

    
765
                @Override
766
                protected void onPostExecute(HttpBundle bundle) {
767
                        HttpResponse response = bundle.getResponse();
768
                        if (response != null) {
769
                                int statusCode = response.getStatusLine().getStatusCode();                        
770
                                if (statusCode == 202) {
771
                                        pollServerTask = new PollServerTask();
772
                                        pollServerTask.execute((Void[]) null);
773
                                } else {                                        
774
                                        CloudServersException cse = parseCloudServersException(response);
775
                                        if ("".equals(cse.getMessage())) {
776
                                                showError("There was a problem rebuilding your server.", bundle);
777
                                        } else {
778
                                                showError("There was a problem rebuilding your server: " + cse.getMessage(), bundle);
779
                                        }                                        
780
                                }
781
                        } else if (exception != null) {
782
                                showError("There was a problem rebuilding your server: " + exception.getMessage(), bundle);
783
                        }
784

    
785
                }
786
        }
787

    
788

    
789
}