Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / android / ViewServerActivity.java @ 7dbfc514

History | View | Annotate | Download (25.2 kB)

1
/**
2
 * 
3
 */
4
package com.rackspace.cloud.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.android.R;
30
import com.rackspace.cloud.servers.api.client.CloudServersException;
31
import com.rackspace.cloud.servers.api.client.Flavor;
32
import com.rackspace.cloud.servers.api.client.Image;
33
import com.rackspace.cloud.servers.api.client.ImageManager;
34
import com.rackspace.cloud.servers.api.client.Server;
35
import com.rackspace.cloud.servers.api.client.ServerManager;
36
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
37

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

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

    
60
        /** Called when the activity is first created. */
61
        @Override
62
        public void onCreate(Bundle savedInstanceState) {
63
                super.onCreate(savedInstanceState);
64
                trackPageView(GoogleAnalytics.PAGE_SERVER);
65
                server = (Server) this.getIntent().getExtras().get("server");
66
                //if an old image it wont be on the image list
67
                //so you have to fetch it manually
68
                if(server.getImage().getName() == null){
69
                        GetImageTask getImageTask = new GetImageTask();                
70
                        getImageTask.execute((Void[]) null);
71
                } 
72
                setContentView(R.layout.viewserver);
73
                restoreState(savedInstanceState);
74
        }
75

    
76
        @Override
77
        protected void onSaveInstanceState(Bundle outState) {
78
                super.onSaveInstanceState(outState);
79
                outState.putSerializable("server", server);
80
                outState.putBoolean("noAskForConfirm", noAskForConfirm);
81
                if (pollServerTask != null && isPolling) {
82
                        pollServerTask.cancel(true);
83
                }
84
                outState.putBoolean("wasPolling", isPolling);
85
        }
86

    
87
        protected void restoreState(Bundle state) {
88
                super.restoreState(state);
89
                if(state != null && state.containsKey("noAskForConfirm")){
90
                        noAskForConfirm = state.getBoolean("noAskForConfirm");
91
                }
92
                if (state != null && state.containsKey("wasPolling")
93
                                && state.getBoolean("wasPolling") == true) {
94
                        pollServerTask = new PollServerTask();
95
                        pollServerTask.execute((Void[]) null);
96
                }
97
                if (server == null && state != null && state.containsKey("server")) {
98
                        server = (Server) state.getSerializable("server");
99
                        // imageLoaded = state.getBoolean("imageLoaded");
100
                }
101
                canPoll = true;
102
                loadServerData();
103
                setupButtons();
104
                loadFlavors();
105
                loadImages();
106
        }
107

    
108
        /*
109
         * private void loadImage() { // hate to do this, but devices run out of
110
         * memory after a few rotations // because the background images are so
111
         * large if (!imageLoaded) { ImageView osLogo = (ImageView)
112
         * findViewById(R.id.view_server_os_logo); osLogo.setAlpha(100);
113
         * osLogo.setImageResource(server.getImage().logoResourceId()); imageLoaded
114
         * = true; }
115
         * 
116
         * }
117
         */
118

    
119
        /*
120
         * need to manage the polling task
121
         * if the activity is stopped
122
         */
123
        @Override
124
        public void onStop() {
125
                super.onStop();
126
                if (pollServerTask != null && isPolling) {
127
                        pollServerTask.cancel(true);
128
                        isPolling = true;
129
                }
130
                canPoll = false;
131

    
132
        }
133

    
134
        /*
135
         * restart the pollingtask if it was running before
136
         */
137
        @Override
138
        public void onStart() {
139
                super.onStart();
140
                if (isPolling) {
141
                        pollServerTask = new PollServerTask();
142
                        pollServerTask.execute((Void[]) null);
143
                }
144
                canPoll = true;
145

    
146
        }
147

    
148
        private void loadServerData() {
149
                if(server != null){
150
                        
151
                        TextView name = (TextView) findViewById(R.id.view_server_name);
152
                        name.setText(server.getName());
153

    
154
                        TextView os = (TextView) findViewById(R.id.view_server_os);
155
                        if(server.getImage().getName() == null){
156
                                if(image != null){
157
                                        os.setText(image.getName());
158
                                }
159
                        } else {
160
                                os.setText(server.getImage().getName());
161
                        }
162

    
163
                        TextView memory = (TextView) findViewById(R.id.view_server_memory);
164
                        memory.setText(server.getFlavor().getRam() + " MB");
165

    
166
                        TextView disk = (TextView) findViewById(R.id.view_server_disk);
167
                        disk.setText(server.getFlavor().getDisk() + " GB");
168

    
169
                        TextView status = (TextView) findViewById(R.id.view_server_status);
170

    
171
                        if (noAskForConfirm == false) {
172
                                if (status.getText().toString().contains("VERIFY_RESIZE")) {
173
                                        // show the confimresizeactivity
174
                                        noAskForConfirm = true;
175
                                        Intent viewIntent = new Intent(getApplicationContext(),
176
                                                        ConfirmResizeActivity.class);
177
                                        viewIntent.putExtra("server", server);
178
                                        startActivity(viewIntent);
179
                                }
180
                        }
181

    
182
                        // show status and possibly the progress, with polling
183
                        if (!"ACTIVE".equals(server.getStatus())) {
184
                                status.setText(server.getStatus() + " - "
185
                                                + server.getProgress() + "%");
186
                                pollServerTask = new PollServerTask();
187
                                pollServerTask.execute((Void[]) null);
188
                        } else {
189
                                status.setText(server.getStatus());
190
                        }
191

    
192
                        if (!ipAddressesLoaded) {
193
                                // public IPs
194
                                int layoutIndex = 12; // public IPs start here
195
                                LinearLayout layout = (LinearLayout) this
196
                                                .findViewById(R.id.view_server_layout);
197
                                String publicIps[] = server.getPublicIpAddresses();
198
                                for (int i = 0; i < publicIps.length; i++) {
199
                                        TextView tv = new TextView(this.getBaseContext());
200
                                        tv.setLayoutParams(os.getLayoutParams()); // easy quick
201
                                                                                                                                // styling! :)
202
                                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
203
                                        tv.setTextSize(os.getTextSize());
204
                                        tv.setGravity(os.getGravity());
205
                                        tv.setTextColor(Color.WHITE);
206
                                        tv.setText(publicIps[i]);
207
                                        layout.addView(tv, layoutIndex++);
208
                                }
209

    
210
                                // private IPs
211
                                layoutIndex++; // skip over the Private IPs label
212
                                String privateIps[] = server.getPrivateIpAddresses();
213
                                for (int i = 0; i < privateIps.length; i++) {
214
                                        TextView tv = new TextView(this.getBaseContext());
215
                                        tv.setLayoutParams(os.getLayoutParams()); // easy quick
216
                                                                                                                                // styling! :)
217
                                        tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
218
                                        tv.setTextSize(os.getTextSize());
219
                                        tv.setGravity(os.getGravity());
220
                                        tv.setTextColor(Color.WHITE);
221
                                        tv.setText(privateIps[i]);
222
                                        layout.addView(tv, layoutIndex++);
223
                                }
224
                                ipAddressesLoaded = true;
225
                        }
226
                }
227

    
228
                // loadImage();
229
        }
230

    
231
        private void loadFlavors() {
232
                flavorNames = new String[Flavor.getFlavors().size()];
233
                flavors = new Flavor[Flavor.getFlavors().size()];
234

    
235
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
236
                int i = 0;
237
                while (iter.hasNext()) {
238
                        Flavor flavor = iter.next();
239
                        flavors[i] = flavor;
240
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk()
241
                                        + " GB disk";
242
                        i++;
243
                }
244
                selectedFlavorId = flavors[0].getId();
245
        }
246

    
247
        private void loadImages() {
248
                imageNames = new String[Image.getImages().size()];
249
                images = new Image[Image.getImages().size()];
250

    
251
                Iterator<Image> iter = Image.getImages().values().iterator();
252
                int i = 0;
253
                while (iter.hasNext()) {
254
                        Image image = iter.next();
255
                        images[i] = image;
256
                        imageNames[i] = image.getName();
257
                        i++;
258
                }
259
                // sort arrays so they display nicely in the spinner
260
                Arrays.sort(images);
261
                Arrays.sort(imageNames);
262
                selectedImageId = images[0].getId();
263

    
264
        }
265

    
266
        private void setupButton(int resourceId, OnClickListener onClickListener) {
267
                Button button = (Button) findViewById(resourceId);
268
                button.setOnClickListener(onClickListener);
269
        }
270

    
271
        private void setupButtons() {
272
                setupButton(R.id.view_server_soft_reboot_button, new OnClickListener() {
273
                        public void onClick(View v) {
274
                                showDialog(R.id.view_server_soft_reboot_button);
275
                        }
276
                });
277

    
278
                setupButton(R.id.view_server_hard_reboot_button, new OnClickListener() {
279
                        public void onClick(View v) {
280
                                showDialog(R.id.view_server_hard_reboot_button);
281
                        }
282
                });
283

    
284
                setupButton(R.id.view_server_resize_button, new OnClickListener() {
285
                        public void onClick(View v) {
286
                                showDialog(R.id.view_server_resize_button);
287
                        }
288
                });
289

    
290
                setupButton(R.id.view_server_delete_button, new OnClickListener() {
291
                        public void onClick(View v) {
292
                                showDialog(R.id.view_server_delete_button);
293
                        }
294
                });
295

    
296
                setupButton(R.id.view_server_rename_button, new OnClickListener() {
297
                        public void onClick(View v) {
298
                                showDialog(R.id.view_server_rename_button);
299
                        }
300
                });
301

    
302
                setupButton(R.id.view_server_rebuild_button, new OnClickListener() {
303
                        public void onClick(View v) {
304
                                showDialog(R.id.view_server_rebuild_button);
305
                        }
306
                });
307

    
308
                setupButton(R.id.view_server_backup_button, new OnClickListener() {
309
                        public void onClick(View v) {
310
                                Intent viewIntent = new Intent(v.getContext(),
311
                                                BackupServerActivity.class);
312
                                viewIntent.putExtra("server", server);
313
                                startActivity(viewIntent);
314
                        }
315
                });
316

    
317
                setupButton(R.id.view_server_password_button, new OnClickListener() {
318
                        public void onClick(View v) {
319
                                Intent viewIntent = new Intent(v.getContext(),
320
                                                PasswordServerActivity.class);
321
                                viewIntent.putExtra("server", server);
322
                                startActivity(viewIntent);
323
                        }
324
                });
325

    
326
                setupButton(R.id.view_server_ping_button, new OnClickListener() {
327
                        public void onClick(View v) {
328
                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_PING, "", -1);
329

    
330
                                // ping the first public ip
331
                                Intent viewIntent = new Intent(v.getContext(),
332
                                                PingServerActivity.class);
333
                                viewIntent.putExtra("ipAddress",
334
                                                server.getPublicIpAddresses()[0]);
335
                                startActivity(viewIntent);
336

    
337
                        }
338
                });
339

    
340
        }
341

    
342
        /**
343
         * @return the server
344
         */
345
        public Server getServer() {
346
                return server;
347
        }
348

    
349
        /**
350
         * @param server
351
         *            the server to set
352
         */
353
        public void setServer(Server server) {
354
                this.server = server;
355
        }
356

    
357
        // setup menu for when menu button is pressed
358
        public boolean onCreateOptionsMenu(Menu menu) {
359
                super.onCreateOptionsMenu(menu);
360
                MenuInflater inflater = getMenuInflater();
361
                inflater.inflate(R.menu.view_server_activity_menu, menu);
362
                return true;
363
        }
364

    
365
        @Override
366
        // in options menu, when add account is selected go to add account activity
367
        public boolean onOptionsItemSelected(MenuItem item) {
368
                switch (item.getItemId()) {
369
                case R.id.refresh_server:
370
                        loadServerData();
371
                        return true;
372
                }
373
                return false;
374
        }
375

    
376
        @Override
377
        protected Dialog onCreateDialog(int id) {
378
                if (server == null) {
379
                        return new AlertDialog.Builder(ViewServerActivity.this)
380
                                        .setIcon(R.drawable.alert_dialog_icon)
381
                                        .setTitle("Error")
382
                                        .setMessage("Server is Busy")
383
                                        .setNegativeButton("Cancel",
384
                                                        new DialogInterface.OnClickListener() {
385
                                                                public void onClick(DialogInterface dialog,
386
                                                                                int whichButton) {
387
                                                                        // User clicked Cancel so do some stuff
388
                                                                }
389
                                                        }).create();
390
                } else {
391
                        switch (id) {
392
                        case R.id.view_server_soft_reboot_button:
393
                                return new AlertDialog.Builder(ViewServerActivity.this)
394
                                .setIcon(R.drawable.alert_dialog_icon)
395
                                .setTitle("Soft Reboot")
396
                                .setMessage("Are you sure you want to perform a soft reboot?")
397
                                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
398
                                        public void onClick(DialogInterface dialog, int whichButton) {
399
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBOOT, "", -1);
400
                                                new SoftRebootServerTask().execute((Void[]) null);
401
                                        }
402
                                })
403
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
404
                                        public void onClick(DialogInterface dialog, int whichButton) {
405
                                                // User clicked Cancel so do some stuff
406
                                        }
407
                                })
408
                                .create();
409
                        case R.id.view_server_hard_reboot_button:
410
                                return new AlertDialog.Builder(ViewServerActivity.this)
411
                                .setIcon(R.drawable.alert_dialog_icon)
412
                                .setTitle("Hard Reboot")
413
                                .setMessage("Are you sure you want to perform a hard reboot?")
414
                                .setPositiveButton("Reboot Server", new DialogInterface.OnClickListener() {
415
                                        public void onClick(DialogInterface dialog, int whichButton) {
416
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBOOT, "", -1);
417
                                                new HardRebootServerTask().execute((Void[]) null);
418
                                        }
419
                                })
420
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
421
                                        public void onClick(DialogInterface dialog, int whichButton) {
422
                                                // User clicked Cancel so do some stuff
423
                                        }
424
                                })
425
                                .create();
426
                        case R.id.view_server_resize_button:
427
                                return new AlertDialog.Builder(ViewServerActivity.this)
428
                                                .setItems(flavorNames, new ResizeClickListener())
429
                                                .setIcon(R.drawable.alert_dialog_icon)
430
                                                .setTitle("Resize Server")
431
                                                .setNegativeButton("Cancel",
432
                                                                new DialogInterface.OnClickListener() {
433
                                                                        public void onClick(DialogInterface dialog,
434
                                                                                        int whichButton) {
435
                                                                                // User clicked Cancel so do some stuff
436
                                                                        }
437
                                                                }).create();
438
                        case R.id.view_server_delete_button:
439
                                return new AlertDialog.Builder(ViewServerActivity.this)
440
                                .setIcon(R.drawable.alert_dialog_icon)
441
                                .setTitle("Delete Server")
442
                                .setMessage("Are you sure you want to delete this server?  This operation cannot be undone and all backups will be deleted.")
443
                                .setPositiveButton("Delete Server", new DialogInterface.OnClickListener() {
444
                                        public void onClick(DialogInterface dialog, int whichButton) {
445
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_DELETE, "", -1);
446
                                                new DeleteServerTask().execute((Void[]) null);
447
                                        }
448
                                })
449
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
450
                                        public void onClick(DialogInterface dialog, int whichButton) {
451
                                                // User clicked Cancel so do some stuff
452
                                        }
453
                                })
454
                                .create();          
455
                        case R.id.view_server_rename_button:
456
                                final EditText input = new EditText(this);
457
                                input.setText(server.getName());
458
                                return new AlertDialog.Builder(ViewServerActivity.this)
459
                                .setIcon(R.drawable.alert_dialog_icon)
460
                                .setView(input)
461
                                .setTitle("Rename")
462
                                .setMessage("Enter new name for server: ")                         
463
                                .setPositiveButton("Rename", new DialogInterface.OnClickListener() {
464
                                        public void onClick(DialogInterface dialog, int whichButton) {
465
                                                trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_RENAME, "", -1);
466
                                                modifiedServerName = input.getText().toString();
467
                                                new RenameServerTask().execute((Void[]) null);
468
                                        }
469
                                })
470
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
471
                                        public void onClick(DialogInterface dialog, int whichButton) {
472
                                                // User clicked Cancel so do some stuff
473
                                        }
474
                                })
475
                                .create();     
476
                        case R.id.view_server_rebuild_button:
477
                                return new AlertDialog.Builder(ViewServerActivity.this)
478
                                                .setItems(imageNames, new RebuildClickListener())
479
                                                .setIcon(R.drawable.alert_dialog_icon)
480
                                                .setTitle("Rebuild Server")
481
                                                .setNegativeButton("Cancel",
482
                                                                new DialogInterface.OnClickListener() {
483
                                                                        public void onClick(DialogInterface dialog,
484
                                                                                        int whichButton) {
485
                                                                                // User clicked Cancel so do some stuff
486
                                                                        }
487
                                                                }).create();
488
                        }
489
                }
490
                return new AlertDialog.Builder(ViewServerActivity.this)
491
                                .setIcon(R.drawable.alert_dialog_icon)
492
                                .setTitle("Error")
493
                                .setMessage("Server is Busy")
494
                                .setNegativeButton("Cancel",
495
                                                new DialogInterface.OnClickListener() {
496
                                                        public void onClick(DialogInterface dialog,
497
                                                                        int whichButton) {
498
                                                                // User clicked Cancel so do some stuff
499
                                                        }
500
                                                }).create();
501
        }
502

    
503
        private class ResizeClickListener implements
504
                        android.content.DialogInterface.OnClickListener {
505

    
506
                public void onClick(DialogInterface dialog, int which) {
507
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_RESIZE, "", -1);
508
                        selectedFlavorId = which + 1 + "";
509
                        new ResizeServerTask().execute((Void[]) null);
510
                }
511

    
512
        }
513

    
514
        private class RebuildClickListener implements
515
                        android.content.DialogInterface.OnClickListener {
516

    
517
                public void onClick(DialogInterface dialog, int which) {
518
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_REBUILD, "", -1);
519
                        selectedImageId = images[which].getId() + "";
520
                        new RebuildServerTask().execute((Void[]) null);
521
                }
522

    
523
        }
524

    
525
        // HTTP request tasks
526

    
527
        private class PollServerTask extends AsyncTask<Void, Void, Server> {
528

    
529
                private Server tempServer;
530

    
531
                @Override
532
                protected void onPreExecute() {
533
                        isPolling = true;
534
                }
535

    
536
                @Override
537
                protected Server doInBackground(Void... arg0) {
538
                        if (isCancelled() || !canPoll) {
539
                                return null;
540
                        }
541
                        try {
542
                                tempServer = (new ServerManager()).find(Integer.parseInt(server.getId()), getContext());
543
                        } catch (NumberFormatException e) {
544
                                // we're polling, so need to show exceptions
545
                        } catch (CloudServersException e) {
546
                                // we're polling, so need to show exceptions
547
                        }
548
                        return tempServer;
549
                }
550

    
551
                @Override
552
                protected void onPostExecute(Server result) {
553
                        server = result;
554
                        if (server != null) {
555
                                loadServerData();
556
                        }
557
                        isPolling = false;
558
                }
559

    
560
                @Override
561
                protected void onCancelled() {
562
                        isPolling = false;
563
                }
564

    
565
        }
566
        
567
        private class GetImageTask extends AsyncTask<Void, Void, Image> {
568

    
569
                private Image tempImage;
570

    
571
                @Override
572
                protected Image doInBackground(Void... arg0) {
573
                        try {
574
                                tempImage = (new ImageManager()).getImageDetails(Integer.parseInt(server.getImageId()), getContext());
575
                        } catch (NumberFormatException e) {
576
                                
577
                        }
578
                        return tempImage;
579
                }
580

    
581
                @Override
582
                protected void onPostExecute(Image result) {
583
                        image = result;
584
                        loadServerData();
585
                }
586

    
587
        }
588
        
589
        private class SoftRebootServerTask extends AsyncTask<Void, Void, HttpBundle> {
590

    
591
                private CloudServersException exception;
592

    
593
                @Override
594
                // let user know their process has started
595
                protected void onPreExecute() {
596
                        showToast("Reboot process has begun");
597
                }
598

    
599
                @Override
600
                protected HttpBundle doInBackground(Void... arg0) {
601
                        HttpBundle bundle = null;
602
                        try {
603
                                bundle = (new ServerManager()).reboot(server, ServerManager.SOFT_REBOOT, getContext());
604
                        } catch (CloudServersException e) {
605
                                exception = e;
606
                        }
607
                        return bundle;
608
                }
609

    
610
                @Override
611
                protected void onPostExecute(HttpBundle bundle) {
612
                        HttpResponse response = bundle.getResponse();
613
                        if (response != null) {
614
                                int statusCode = response.getStatusLine().getStatusCode();
615
                                if (statusCode == 202) {
616
                                        showToast("Reboot successful");
617
                                }
618
                                if (statusCode != 202) {
619
                                        CloudServersException cse = parseCloudServersException(response);
620
                                        if ("".equals(cse.getMessage())) {
621
                                                showError("There was a problem rebooting your server.", bundle);
622
                                        } else {
623
                                                showError("There was a problem rebooting your server: " + cse.getMessage(), bundle);
624
                                        }
625
                                }
626
                        } else if (exception != null) {
627
                                showError("There was a problem rebooting your server: " + exception.getMessage(), bundle);
628

    
629
                        }
630
                }
631
        }
632

    
633
        private class HardRebootServerTask extends
634
                        AsyncTask<Void, Void, HttpBundle> {
635

    
636
                private CloudServersException exception;
637

    
638
                @Override
639
                // let user know their process has started
640
                protected void onPreExecute() {
641
                        showToast("Reboot process has begun");
642
                }
643

    
644
                @Override
645
                protected HttpBundle doInBackground(Void... arg0) {
646
                        HttpBundle bundle = null;
647
                        try {
648
                                bundle = (new ServerManager()).reboot(server, ServerManager.HARD_REBOOT, getContext());
649
                        } catch (CloudServersException e) {
650
                                exception = e;
651
                        }
652
                        return bundle;
653
                }
654

    
655
                @Override
656
                protected void onPostExecute(HttpBundle bundle) {
657
                        HttpResponse response = bundle.getResponse();
658
                        if (response != null) {
659
                                int statusCode = response.getStatusLine().getStatusCode();
660
                                if (statusCode == 202) {
661
                                        showToast("Reboot successful");
662
                                }
663
                                if (statusCode != 202) {
664
                                        CloudServersException cse = parseCloudServersException(response);
665
                                        if ("".equals(cse.getMessage())) {
666
                                                showError("There was a problem rebooting your server.", bundle);
667
                                        } else {
668
                                                showError("There was a problem rebooting your server: " + cse.getMessage(), bundle);
669
                                        }
670
                                }
671
                        } else if (exception != null) {
672
                                showError("There was a problem rebooting your server: " + exception.getMessage(), bundle);
673

    
674
                        }
675
                }
676
        }
677

    
678
        private class ResizeServerTask extends AsyncTask<Void, Void, HttpBundle> {
679

    
680
                private CloudServersException exception;
681

    
682
                @Override
683
                protected void onPreExecute() {
684
                        showToast("Resize process has begun, please confirm your resize after process finishes.");
685
                }
686

    
687
                @Override
688
                protected HttpBundle doInBackground(Void... arg0) {
689
                        HttpBundle bundle = null;
690
                        try {
691
                                bundle = (new ServerManager()).resize(server, Integer.parseInt(selectedFlavorId), getContext());
692
                        } catch (CloudServersException e) {
693
                                exception = e;
694
                        }
695
                        return bundle;
696
                }
697

    
698
                @Override
699
                protected void onPostExecute(HttpBundle bundle) {
700
                        HttpResponse response = bundle.getResponse();
701
                        if (response != null) {
702
                                int statusCode = response.getStatusLine().getStatusCode();
703
                                if (statusCode == 202) {
704
                                        pollServerTask = new PollServerTask();
705
                                        pollServerTask.execute((Void[]) null);
706
                                } else {
707
                                        CloudServersException cse = parseCloudServersException(response);
708
                                        if ("".equals(cse.getMessage())) {
709
                                                showError("There was a problem resizing your server.", bundle);
710
                                        } else {
711
                                                showError("There was a problem resizing your server: " + cse.getMessage(), bundle);
712
                                        }                                        
713
                                }
714
                        } else if (exception != null) {
715
                                showError("There was a problem resizing your server: " + exception.getMessage(), bundle);
716

    
717
                        }
718

    
719
                }
720
        }
721

    
722
        public class DeleteServerTask extends AsyncTask<Void, Void, HttpBundle> {
723

    
724
                private CloudServersException exception;
725

    
726
                @Override
727
                // let user know their process has started
728
                protected void onPreExecute() {
729
                        showToast("Delete process has begun");
730
                }
731

    
732
                @Override
733
                protected HttpBundle doInBackground(Void... arg0) {
734
                        HttpBundle bundle = null;
735
                        try {
736
                                bundle = (new ServerManager()).delete(server, getContext());
737
                        } catch (CloudServersException e) {
738
                                exception = e;
739
                        }
740
                        return bundle;
741
                }
742

    
743
                @Override
744
                protected void onPostExecute(HttpBundle bundle) {
745
                        HttpResponse response = bundle.getResponse();
746
                        if (response != null) {
747
                                int statusCode = response.getStatusLine().getStatusCode();
748
                                if (statusCode == 202) {
749
                                        showToast("Delete successful");
750
                                        setResult(Activity.RESULT_OK);
751
                                        finish();
752
                                } else {
753
                                        CloudServersException cse = parseCloudServersException(response);
754
                                        if ("".equals(cse.getMessage())) {
755
                                                showError("There was a problem deleting your server.", bundle);
756
                                        } else {
757
                                                showError("There was a problem deleting your server: " + cse.getMessage(), bundle);
758
                                        }
759
                                }
760
                        } else if (exception != null) {
761
                                showError("There was a problem deleting your server: " + exception.getMessage(), bundle);                                
762
                        }                        
763
                }
764
        }
765

    
766
        private class RenameServerTask extends AsyncTask<Void, Void, HttpBundle> {
767

    
768
                private CloudServersException exception;
769

    
770
                @Override
771
                // let user know their process has started
772
                protected void onPreExecute() {
773
                        showToast("Rename process has begun.");
774
                }
775

    
776
                @Override
777
                protected HttpBundle doInBackground(Void... arg0) {
778
                        HttpBundle bundle = null;
779
                        try {
780
                                bundle = (new ServerManager()).rename(server, modifiedServerName, getContext());
781
                        } catch (CloudServersException e) {
782
                                exception = e;
783
                        }
784
                        return bundle;
785
                }
786

    
787
                @Override
788
                protected void onPostExecute(HttpBundle bundle) {
789
                        HttpResponse response = bundle.getResponse();
790
                        if (response != null) {
791
                                int statusCode = response.getStatusLine().getStatusCode();
792
                                if (statusCode == 204) {
793
                                        showToast("Rename successful");
794
                                        pollServerTask = new PollServerTask();
795
                                        pollServerTask.execute((Void[]) null);
796
                                } else {
797
                                        CloudServersException cse = parseCloudServersException(response);
798
                                        if ("".equals(cse.getMessage())) {
799
                                                showError("There was a problem renaming your server.", bundle);
800
                                        } else {
801
                                                showError("There was a problem renaming your server: " + cse.getMessage(), bundle);
802
                                        }                                        
803
                                }
804
                        }
805
                        else if (exception != null) {
806
                                showError("There was a problem renaming your server: " + exception.getMessage(), bundle);        
807
                        }
808
                }
809

    
810
        }
811

    
812
        private class RebuildServerTask extends AsyncTask<Void, Void, HttpBundle> {
813

    
814
                private CloudServersException exception;
815

    
816
                @Override
817
                protected void onPreExecute() {
818
                        showToast("Rebuild process has begun");
819
                }
820

    
821
                @Override
822
                protected HttpBundle doInBackground(Void... arg0) {
823
                        HttpBundle bundle = null;
824
                        try {
825
                                bundle = (new ServerManager()).rebuild(server, Integer.parseInt(selectedImageId), getContext());
826
                        } catch (CloudServersException e) {
827
                                exception = e;
828
                        }
829
                        return bundle;
830
                }
831

    
832
                @Override
833
                protected void onPostExecute(HttpBundle bundle) {
834
                        HttpResponse response = bundle.getResponse();
835
                        if (response != null) {
836
                                int statusCode = response.getStatusLine().getStatusCode();
837
                                if (statusCode == 202) {
838
                                        pollServerTask = new PollServerTask();
839
                                        pollServerTask.execute((Void[]) null);
840
                                } else {
841
                                        CloudServersException cse = parseCloudServersException(response);
842
                                        if ("".equals(cse.getMessage())) {
843
                                                showError("There was a problem rebuilding your server.", bundle);
844
                                        } else {
845
                                                showError("There was a problem rebuilding your server: " + cse.getMessage(), bundle);
846
                                        }                                        
847
                                }
848
                        } else if (exception != null) {
849
                                showError("There was a problem rebuilding your server: " + exception.getMessage(), bundle);
850
                        }
851

    
852
                }
853
        }
854

    
855
}