Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ViewServerActivity.java @ 9548973b

History | View | Annotate | Download (26 kB)

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

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

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

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

    
23
import android.app.Activity;
24
import android.app.AlertDialog;
25
import android.app.Dialog;
26
import android.app.ProgressDialog;
27
import android.content.Context;
28
import android.content.DialogInterface;
29
import android.content.Intent;
30
import android.graphics.Color;
31
import android.os.AsyncTask;
32
import android.os.Bundle;
33
import android.util.Log;
34
import android.view.View;
35
import android.view.View.OnClickListener;
36
import android.widget.Button;
37
import android.widget.EditText;
38
import android.widget.LinearLayout;
39
import android.widget.TextView;
40
import android.widget.Toast;
41

    
42
import com.rackspace.cloud.servers.api.client.Account;
43
import com.rackspace.cloud.servers.api.client.CloudServersException;
44
import com.rackspace.cloud.servers.api.client.Flavor;
45
import com.rackspace.cloud.servers.api.client.Image;
46
import com.rackspace.cloud.servers.api.client.Server;
47
import com.rackspace.cloud.servers.api.client.ServerManager;
48
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
49

    
50
/**
51
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
52
 *
53
 */
54
public class ViewServerActivity extends Activity {
55
        
56
        private Server server;
57
        private boolean ipAddressesLoaded; // to prevent polling from loading tons of duplicates
58
        private Flavor[] flavors;
59
        private String[] flavorNames;
60
        private String selectedFlavorId;
61
        Context context;
62
        //private boolean imageLoaded;
63
    private String modifiedServerName;
64
    private Image[] images;
65
        private String[] imageNames;
66
        private String selectedImageId;
67
        private boolean isPolling;
68
        private PollServerTask pollServerTask;
69
        private boolean canPoll;
70
        
71
    /** Called when the activity is first created. */
72
    @Override
73
    public void onCreate(Bundle savedInstanceState) {
74
        super.onCreate(savedInstanceState);
75
        server = (Server) this.getIntent().getExtras().get("server");
76
        context = getApplicationContext();
77
        setContentView(R.layout.viewserver);
78
        restoreState(savedInstanceState);
79
    }
80
    
81
        @Override
82
        protected void onSaveInstanceState(Bundle outState) {
83
                super.onSaveInstanceState(outState);
84
                outState.putSerializable("server", server);
85
                if(pollServerTask != null && isPolling){
86
                        Log.d("info", "captin cancelling the polling");
87
                        pollServerTask.cancel(true);
88
                }
89
                outState.putBoolean("wasPolling", isPolling);
90
        }
91

    
92
    private void restoreState(Bundle state) {
93
            if(state != null && state.containsKey("wasPolling") && state.getBoolean("wasPolling") == true){
94
                    pollServerTask = new PollServerTask();
95
                    pollServerTask.execute((Void[]) null);
96
            }
97
            if (state != null && state.containsKey("server")) {
98
                    server = (Server) state.getSerializable("server");
99
                    //imageLoaded = state.getBoolean("imageLoaded");
100
            }
101
        loadServerData();
102
        setupButtons();
103
        loadFlavors();
104
        loadImages();
105
    }
106
/*
107
    private void loadImage() {
108
            // hate to do this, but devices run out of memory after a few rotations
109
            // because the background images are so large
110
            if (!imageLoaded) {
111
                    ImageView osLogo = (ImageView) findViewById(R.id.view_server_os_logo);
112
                    osLogo.setAlpha(100);
113
                    osLogo.setImageResource(server.getImage().logoResourceId());
114
                    imageLoaded = true;
115
            }
116

117
    }
118
*/  
119
    
120
    /*
121
     * need to manage the polling task
122
     * if the activity is stopped
123
     */
124
    @Override
125
    public void onStop(){
126
            super.onStop();
127
            if(pollServerTask != null && isPolling){
128
                    Log.d("info", "captin in onStop cancelling");
129
                    pollServerTask.cancel(true);
130
                    isPolling = true;
131
                        Log.d("info", "captin polling is true");
132
            }
133
            canPoll = false;
134
            
135
    }
136
    
137
    /*
138
     * restart the pollingtask 
139
     * if it was running before
140
     * 
141
     */
142
    @Override
143
    public void onStart(){
144
            super.onStart();
145
            if(isPolling){
146
                    Log.d("info", "captin in onStart starting");
147
                    pollServerTask = new PollServerTask();
148
                    pollServerTask.execute((Void[]) null);
149
            }
150
            canPoll = true;
151
    
152
    }
153
   
154
    private void loadServerData() {
155
            TextView name = (TextView) findViewById(R.id.view_server_name);
156
            name.setText(server.getName());
157

    
158
            TextView os = (TextView) findViewById(R.id.view_server_os);
159
            os.setText(server.getImage().getName());
160

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

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

    
167
            TextView status = (TextView) findViewById(R.id.view_server_status);
168

    
169
            // show status and possibly the progress, with polling
170
            if (!"ACTIVE".equals(server.getStatus())) {
171
                    status.setText(server.getStatus() + " - " + server.getProgress() + "%");
172
                    pollServerTask = new PollServerTask();
173
                    pollServerTask.execute((Void[]) null);
174
            } else {
175
                    status.setText(server.getStatus());
176
            }
177

    
178
            if (!ipAddressesLoaded) {
179
                    // public IPs
180
                    int layoutIndex = 12; // public IPs start here
181
                    LinearLayout layout = (LinearLayout) this.findViewById(R.id.view_server_layout);            
182
                    String publicIps[] = server.getPublicIpAddresses();
183
                    for (int i = 0; i < publicIps.length; i++) {
184
                            TextView tv = new TextView(this.getBaseContext());
185
                            tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
186
                            tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
187
                            tv.setTextSize(os.getTextSize());
188
                            tv.setTextColor(Color.WHITE);
189
                            tv.setText(publicIps[i]);
190
                            layout.addView(tv, layoutIndex++);
191
                    }
192

    
193
                    // private IPs
194
                    layoutIndex++; // skip over the Private IPs label
195
                    String privateIps[] = server.getPrivateIpAddresses();
196
                    for (int i = 0; i < privateIps.length; i++) {
197
                            TextView tv = new TextView(this.getBaseContext());
198
                            tv.setLayoutParams(os.getLayoutParams()); // easy quick styling! :)
199
                            tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
200
                            tv.setTextSize(os.getTextSize());
201
                            tv.setTextColor(Color.WHITE);
202
                            tv.setText(privateIps[i]);
203
                            layout.addView(tv, layoutIndex++);
204
                    }
205
                    ipAddressesLoaded = true;
206
            }
207

    
208
            //loadImage();
209
    }
210
    
211
    private void loadFlavors() {
212
                flavorNames = new String[Flavor.getFlavors().size()]; 
213
                flavors = new Flavor[Flavor.getFlavors().size()];
214

    
215
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
216
                int i = 0;
217
                while (iter.hasNext()) {
218
                        Flavor flavor = iter.next();
219
                        flavors[i] = flavor;
220
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk() + " GB disk";
221
                        i++;
222
                }
223
                selectedFlavorId = flavors[0].getId();
224
    }
225
    
226
    private void loadImages() {
227
                imageNames = new String[Image.getImages().size()]; 
228
                images = new Image[Image.getImages().size()];
229

    
230
                Iterator<Image> iter = Image.getImages().values().iterator();
231
                int i = 0;
232
                while (iter.hasNext()) {
233
                        Image image = iter.next();
234
                        images[i] = image;
235
                        imageNames[i] = image.getName(); 
236
                        i++;
237
                }
238
                //sort arrays so they display nicely in the spinner
239
                Arrays.sort(images);
240
                Arrays.sort(imageNames);
241
                selectedImageId = images[0].getId();
242
                
243
    }
244

    
245
    private void setupButton(int resourceId, OnClickListener onClickListener) {
246
                Button button = (Button) findViewById(resourceId);
247
                button.setOnClickListener(onClickListener);
248
    }
249
    
250
    private void setupButtons() {
251
            setupButton(R.id.view_server_soft_reboot_button, new OnClickListener() {
252
            public void onClick(View v) {
253
                            showDialog(R.id.view_server_soft_reboot_button);
254
            }
255
        });
256
            
257
            setupButton(R.id.view_server_hard_reboot_button, new OnClickListener() {
258
            public void onClick(View v) {
259
                            showDialog(R.id.view_server_hard_reboot_button);
260
            }
261
            });
262

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

    
269
            setupButton(R.id.view_server_delete_button, new OnClickListener() {
270
            public void onClick(View v) {
271
                            showDialog(R.id.view_server_delete_button);
272
            }
273
            });
274
            
275
            setupButton(R.id.view_server_rename_button, new OnClickListener() {
276
            public void onClick(View v) {
277
                            showDialog(R.id.view_server_rename_button);
278
            }
279
            });
280
            
281
            setupButton(R.id.view_server_rebuild_button, new OnClickListener() {
282
            public void onClick(View v) {
283
                            showDialog(R.id.view_server_rebuild_button);
284
            }
285
            });
286
            
287
            
288
            setupButton(R.id.view_server_backup_button, new OnClickListener() {
289
            public void onClick(View v) {
290
                        Intent viewIntent = new Intent(v.getContext(), BackupServerActivity.class);
291
                        viewIntent.putExtra("server", server);
292
                        startActivity(viewIntent);
293
            }
294
            });
295

    
296
            setupButton(R.id.view_server_password_button, new OnClickListener() {
297
                    public void onClick(View v) {
298
                                    Intent viewIntent = new Intent(v.getContext(), PasswordServerActivity.class);
299
                                    viewIntent.putExtra("server", server);
300
                                    startActivity(viewIntent);
301
                    }
302
            });
303
            
304
            setupButton(R.id.view_server_ping_button, new OnClickListener() {
305
            public void onClick(View v) {
306
                    Intent viewIntent = new Intent(v.getContext(), PingServerActivity.class);
307
                    
308
                    //ping the first public ip
309
                    viewIntent.putExtra("ipAddress", server.getPublicIpAddresses()[0]);
310
                    startActivity(viewIntent);
311
                    
312
                    
313
            }
314
            });
315
            
316
    }
317
    
318
    private void showAlert(String title, String message) {
319
                AlertDialog alert = new AlertDialog.Builder(ViewServerActivity.this).create();
320
                alert.setTitle(title);
321
                alert.setMessage(message);
322
                alert.setButton("OK", new DialogInterface.OnClickListener() {
323
              public void onClick(DialogInterface dialog, int which) {
324
                return;
325
            } }); 
326
                alert.show();
327
    }
328
    
329
    private void showToast(String message) {
330
                Context context = getApplicationContext();
331
                int duration = Toast.LENGTH_SHORT;
332
                Toast toast = Toast.makeText(context, message, duration);
333
                toast.show();
334
    }
335
    
336
    private void showToast(String title, String message) {
337
                Context context = getApplicationContext();
338
                int duration = Toast.LENGTH_SHORT;
339
                Toast toast = Toast.makeText(context, "   "+title + "\n\n" + message, duration);
340
                toast.show();
341
    }
342
        
343
    /**
344
         * @return the server
345
         */
346
        public Server getServer() {
347
                return server;
348
        }
349

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

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

    
458
    private class ResizeClickListener implements android.content.DialogInterface.OnClickListener {
459

    
460
                public void onClick(DialogInterface dialog, int which) {
461
                        selectedFlavorId = which + "";
462
                        new ResizeServerTask().execute((Void[]) null);
463
                }
464
            
465
    }
466
    
467
    private class RebuildClickListener implements android.content.DialogInterface.OnClickListener {
468

    
469
                public void onClick(DialogInterface dialog, int which) {
470
                        selectedImageId = images[which].getId() + "";
471
                        new RebuildServerTask().execute((Void[]) null);
472
                }
473
            
474
    }
475
      
476
    private CloudServersException parseCloudServersException(HttpResponse response) {
477
                CloudServersException cse = new CloudServersException();
478
                try {
479
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
480
                    String body = responseHandler.handleResponse(response);
481
                    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
482
                    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
483
                    XMLReader xmlReader = saxParser.getXMLReader();
484
                    xmlReader.setContentHandler(parser);
485
                    xmlReader.parse(new InputSource(new StringReader(body)));                            
486
                    cse = parser.getException();                            
487
                } catch (ClientProtocolException e) {
488
                        cse = new CloudServersException();
489
                        cse.setMessage(e.getLocalizedMessage());
490
                } catch (IOException e) {
491
                        cse = new CloudServersException();
492
                        cse.setMessage(e.getLocalizedMessage());
493
                } catch (ParserConfigurationException e) {
494
                        cse = new CloudServersException();
495
                        cse.setMessage(e.getLocalizedMessage());
496
                } catch (SAXException e) {
497
                        cse = new CloudServersException();
498
                        cse.setMessage(e.getLocalizedMessage());
499
                } catch (FactoryConfigurationError e) {
500
                        cse = new CloudServersException();
501
                        cse.setMessage(e.getLocalizedMessage());
502
                }
503
                return cse;
504
    }
505
    
506
    // HTTP request tasks
507
    
508
        private class PollServerTask extends AsyncTask<Void, Void, Server> {
509
            
510
                private Server tempServer;
511
                
512
                @Override 
513
                protected void onPreExecute(){
514
                        Log.d("info", "captin The POLLING TASK HAS STARTED!");
515
                        isPolling = true;
516
                }
517
                
518
                @Override
519
                protected Server doInBackground(Void... arg0) {
520
                        Log.d("info", "captin can poll is " + canPoll);
521
                        if(isCancelled() || !canPoll){
522
                                return null;
523
                        }
524
                        try {
525
                                 tempServer = (new ServerManager()).find(Integer.parseInt(server.getId()), context);
526
                        } catch (NumberFormatException e) {
527
                                // we're polling, so need to show exceptions
528
                        } catch (CloudServersException e) {
529
                                // we're polling, so need to show exceptions
530
                        }
531
                        return tempServer;
532
                }
533
            
534
                @Override
535
                protected void onPostExecute(Server result) {
536
                        server = result;
537
                        if(server != null){
538
                                Log.d("info", "captin about to load data");
539
                                loadServerData();
540
                        }
541
                        isPolling = false;
542
                        Log.d("info", "captin polling is false");
543
                }
544
                
545
                @Override
546
                protected void onCancelled (){
547
                        isPolling = false;
548
                        Log.d("info", "captin polling is false and the poll has been canceled");
549
                }
550
                
551
    }
552

    
553
    
554
        private class SoftRebootServerTask extends AsyncTask<Void, Void, HttpResponse> {
555
            
556
                private CloudServersException exception;
557
                
558
                @Override
559
                //let user know their process has started
560
                protected void onPreExecute(){
561
                        showToast("Reboot process has begun");
562
                }
563
                
564
                @Override
565
                protected HttpResponse doInBackground(Void... arg0) {
566
                        HttpResponse resp = null;
567
                        try {
568
                                resp = (new ServerManager()).reboot(server, ServerManager.SOFT_REBOOT, context);
569
                        } catch (CloudServersException e) {
570
                                exception = e;
571
                        }
572
                        return resp;
573
                }
574
            
575
                @Override
576
                protected void onPostExecute(HttpResponse response) {
577
                        if (response != null) {
578
                                int statusCode = response.getStatusLine().getStatusCode();        
579
                                if(statusCode == 202){ showToast("Reboot successful"); }
580
                                if (statusCode != 202) {
581
                                        CloudServersException cse = parseCloudServersException(response);
582
                                        if ("".equals(cse.getMessage())) {
583
                                                showToast("Error", "There was a problem rebooting your server.");
584
                                        } else {
585
                                                showToast("Error", "There was a problem rebooting your server: " + cse.getMessage());
586
                                        }
587
                                }
588
                        } else if (exception != null) {
589
                                showToast("Error", "There was a problem rebooting your server: " + exception.getMessage());
590
                                
591
                        }
592
                }
593
    }
594

    
595
        private class HardRebootServerTask extends AsyncTask<Void, Void, HttpResponse> {
596
            
597
                private CloudServersException exception;
598
                
599
                @Override
600
                //let user know their process has started
601
                protected void onPreExecute(){
602
                        showToast("Reboot process has begun");
603
                }
604

    
605
                @Override
606
                protected HttpResponse doInBackground(Void... arg0) {
607
                        HttpResponse resp = null;                        
608
                        try {
609
                                resp = (new ServerManager()).reboot(server, ServerManager.HARD_REBOOT, context);
610
                        } catch (CloudServersException e) {
611
                                exception = e;
612
                        }
613
                        return resp;
614
                }
615
            
616
                @Override
617
                protected void onPostExecute(HttpResponse response) {
618
                        if (response != null) {
619
                                int statusCode = response.getStatusLine().getStatusCode();        
620
                                if(statusCode == 202){ showToast("Reboot successful"); }
621
                                if (statusCode != 202) {
622
                                        CloudServersException cse = parseCloudServersException(response);
623
                                        if ("".equals(cse.getMessage())) {
624
                                                showToast("Error", "There was a problem rebooting your server.");
625
                                        } else {
626
                                                showToast("Error", "There was a problem rebooting your server: " + cse.getMessage());
627
                                        }
628
                                }
629
                        } else if (exception != null) {
630
                                showToast("Error", "There was a problem rebooting your server: " + exception.getMessage());
631
                                
632
                        }
633
                }
634
    }
635

    
636
        private class ResizeServerTask extends AsyncTask<Void, Void, HttpResponse> {
637
            
638
                private CloudServersException exception;
639
                
640
                @Override
641
                protected void onPreExecute(){
642
                        showToast("Resize process has begun, please confirm your resize after process finishes.");
643
                }
644

    
645
                @Override
646
                protected HttpResponse doInBackground(Void... arg0) {
647
                        HttpResponse resp = null;
648
                        try {
649
                                resp = (new ServerManager()).resize(server, Integer.parseInt(selectedFlavorId), context);
650
                        } catch (CloudServersException e) {
651
                                exception = e;
652
                        }
653
                        return resp;
654
                }
655
            
656
                @Override
657
                protected void onPostExecute(HttpResponse response) {
658
                        if (response != null) {
659
                                int statusCode = response.getStatusLine().getStatusCode();                        
660
                                if (statusCode == 202) {
661
                                        pollServerTask = new PollServerTask();
662
                                    pollServerTask.execute((Void[]) null);
663
                                } else {                                        
664
                                        CloudServersException cse = parseCloudServersException(response);
665
                                        if ("".equals(cse.getMessage())) {
666
                                                showToast("Error", "There was a problem resizing your server.");
667
                                        } else {
668
                                                showToast("Error", "There was a problem resizing your server: " + cse.getMessage());
669
                                        }                                        
670
                                }
671
                        } else if (exception != null) {
672
                                showToast("Error", "There was a problem resizing your server: " + exception.getMessage());
673
                                
674
                        }
675
                        
676
                }
677
    }
678
        
679
        
680
        public class DeleteServerTask extends AsyncTask<Void, Void, HttpResponse> {
681
            
682
                private CloudServersException exception;
683
                
684
                @Override
685
                //let user know their process has started
686
                protected void onPreExecute(){
687
                        showToast("Delete process has begun");
688
                }
689
                @Override
690
                protected HttpResponse doInBackground(Void... arg0) {
691
                        HttpResponse resp = null;
692
                        try {
693
                                resp = (new ServerManager()).delete(server, context);
694
                        } catch (CloudServersException e) {
695
                                exception = e;
696
                        }
697
                        return resp;
698
                }
699
            
700
                @Override
701
                protected void onPostExecute(HttpResponse response) {
702
                        if (response != null) {
703
                                int statusCode = response.getStatusLine().getStatusCode();
704
                                if (statusCode == 202) {
705
                                        showToast("Delete successful");
706
                                        setResult(Activity.RESULT_OK);
707
                                        finish();
708
                                } else {
709
                                        CloudServersException cse = parseCloudServersException(response);
710
                                        if ("".equals(cse.getMessage())) {
711
                                                showToast("Error", "There was a problem deleting your server.");
712
                                        } else {
713
                                                showToast("Error", "There was a problem deleting your server: " + cse.getMessage());
714
                                        }
715
                                }
716
                        } else if (exception != null) {
717
                                showToast("Error", "There was a problem deleting your server: " + exception.getMessage());                                
718
                        }                        
719
                }
720
    }
721
        
722
        private class RenameServerTask extends AsyncTask<Void, Void, HttpResponse> {
723
                
724
                private CloudServersException exception;
725
                
726
                @Override
727
                //let user know their process has started
728
                protected void onPreExecute(){
729
                        showToast("Rename process has begun.");
730
                }
731
                
732
                @Override
733
                protected HttpResponse doInBackground(Void... arg0) {
734
                        HttpResponse resp = null;
735
                        try {
736
                                resp = (new ServerManager()).rename(server, modifiedServerName, context);
737
                        } catch (CloudServersException e) {
738
                                exception = e;
739
                        }
740
                        return resp;
741
                }
742
                
743
                @Override
744
                protected void onPostExecute(HttpResponse response) {
745
                        if (response != null) {
746
                                int statusCode = response.getStatusLine().getStatusCode();        
747
                                if (statusCode == 204) {        
748
                                        showToast("Rename successful");
749
                                        pollServerTask = new PollServerTask();
750
                                    pollServerTask.execute((Void[]) null);
751
                                } else {
752
                                        CloudServersException cse = parseCloudServersException(response);
753
                                        if ("".equals(cse.getMessage())) {
754
                                                showToast("Error", "There was a problem renaming your server.");
755
                                        } else {
756
                                                showToast("Error", "There was a problem renaming your server: " + cse.getMessage());
757
                                        }                                        
758
                                }
759
                        }
760
                    else if (exception != null) {
761
                            showToast("Error", "There was a problem renaming your server: " + exception.getMessage());        
762
                    }
763
                }
764
                
765
        }
766
        
767
        private class RebuildServerTask extends AsyncTask<Void, Void, HttpResponse> {
768
            
769
                private CloudServersException exception;
770
                
771
                @Override
772
                protected void onPreExecute(){
773
                        showToast("Rebuild process has begun");
774
                }
775
                
776
                @Override
777
                protected HttpResponse doInBackground(Void... arg0) {
778
                        HttpResponse resp = null;
779
                        try {
780
                                resp = (new ServerManager()).rebuild(server, Integer.parseInt(selectedImageId), context);
781
                        } catch (CloudServersException e) {
782
                                exception = e;
783
                        }
784
                        return resp;
785
                }
786
            
787
                @Override
788
                protected void onPostExecute(HttpResponse response) {
789
                        if (response != null) {
790
                                int statusCode = response.getStatusLine().getStatusCode();                        
791
                                if (statusCode == 202) {
792
                                        pollServerTask = new PollServerTask();
793
                                    pollServerTask.execute((Void[]) null);
794
                                } else {                                        
795
                                        CloudServersException cse = parseCloudServersException(response);
796
                                        if ("".equals(cse.getMessage())) {
797
                                                showToast("Error", "There was a problem rebuilding your server.");
798
                                        } else {
799
                                                showToast("Error", "There was a problem rebuilding your server: " + cse.getMessage());
800
                                        }                                        
801
                                }
802
                        } else if (exception != null) {
803
                                showToast("Error", "There was a problem rebuilding your server: " + exception.getMessage());
804
                                
805
                        }
806
                        
807
                }
808
    }
809
        
810
        
811
}