Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ViewServerActivity.java @ 5018a7f8

History | View | Annotate | Download (23.6 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.setTextColor(Color.WHITE);
174
                                        tv.setText(publicIps[i]);
175
                                        layout.addView(tv, layoutIndex++);
176
                                }
177

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

    
194
                //loadImage();
195
        }
196

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

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

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

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

    
229
        }
230

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

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

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

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

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

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

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

    
273

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

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

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

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

    
299

    
300
                        }
301
                });
302

    
303
        }
304

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

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

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

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

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

    
462
        private class ResizeClickListener implements android.content.DialogInterface.OnClickListener {
463

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

    
470
        }
471

    
472
        private class RebuildClickListener implements android.content.DialogInterface.OnClickListener {
473

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

    
480
        }
481

    
482
        // HTTP request tasks
483

    
484
        private class PollServerTask extends AsyncTask<Void, Void, Server> {
485

    
486
                private Server tempServer;
487

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

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

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

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

    
522
        }
523

    
524

    
525
        private class SoftRebootServerTask extends AsyncTask<Void, Void, HttpBundle> {
526

    
527
                private CloudServersException exception;
528

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

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

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

    
563
                        }
564
                }
565
        }
566

    
567
        private class HardRebootServerTask extends AsyncTask<Void, Void, HttpBundle> {
568

    
569
                private CloudServersException exception;
570

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

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

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

    
605
                        }
606
                }
607
        }
608

    
609
        private class ResizeServerTask extends AsyncTask<Void, Void, HttpBundle> {
610

    
611
                private CloudServersException exception;
612

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

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

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

    
648
                        }
649

    
650
                }
651
        }
652

    
653

    
654
        public class DeleteServerTask extends AsyncTask<Void, Void, HttpBundle> {
655

    
656
                private CloudServersException exception;
657

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

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

    
697
        private class RenameServerTask extends AsyncTask<Void, Void, HttpBundle> {
698

    
699
                private CloudServersException exception;
700

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

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

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

    
741
        }
742

    
743
        private class RebuildServerTask extends AsyncTask<Void, Void, HttpBundle> {
744

    
745
                private CloudServersException exception;
746

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

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

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

    
783
                }
784
        }
785

    
786

    
787
}