Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / BackupServerActivity.java @ 6b8dad86

History | View | Annotate | Download (4.7 kB)

1
package com.rackspacecloud.android;
2

    
3
import org.apache.http.HttpResponse;
4

    
5
import com.rackspace.cloud.servers.api.client.Backup;
6
import com.rackspace.cloud.servers.api.client.CloudServersException;
7
import com.rackspace.cloud.servers.api.client.Server;
8
import com.rackspace.cloud.servers.api.client.ServerManager;
9
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
10

    
11
import android.os.AsyncTask;
12
import android.os.Bundle;
13
import android.view.View;
14
import android.view.View.OnClickListener;
15
import android.widget.AdapterView;
16
import android.widget.AdapterView.OnItemSelectedListener;
17
import android.widget.ArrayAdapter;
18
import android.widget.Button;
19
import android.widget.CheckBox;
20
import android.widget.Spinner;
21

    
22
public class BackupServerActivity extends CloudActivity implements OnItemSelectedListener, OnClickListener {
23
        
24
        private Server server;
25
        private Spinner weeklyBackupSpinner;
26
        private Spinner dailyBackupSpinner;
27
        private CheckBox enableCheckBox;
28
        private String selectedWeeklyBackup;
29
        private String selectedDailyBackup;
30
        
31
        /** Called when the activity is first created. */
32
    @Override
33
    public void onCreate(Bundle savedInstanceState) {
34
        super.onCreate(savedInstanceState);
35
        restoreState(savedInstanceState);
36
    }
37
    
38
    protected void restoreState(Bundle state){
39
                super.restoreState(state);
40
                server = (Server) this.getIntent().getExtras().get("server");
41
        setContentView(R.layout.viewbackup); 
42
        setupSpinners();
43
            setupButtons();
44
            setupCheckBox(); 
45
        }
46

    
47
    private void setupSpinners(){
48
            weeklyBackupSpinner = (Spinner) findViewById(R.id.weekly_backup_spinner);
49
            ArrayAdapter<CharSequence> weeklyAdapter = ArrayAdapter.createFromResource(this, R.array.weeklyBackupValues, android.R.layout.simple_spinner_item);
50
            weeklyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
51
            weeklyBackupSpinner.setAdapter(weeklyAdapter);
52
            weeklyBackupSpinner.setOnItemSelectedListener(this);
53
            
54
            
55
            dailyBackupSpinner = (Spinner) findViewById(R.id.daily_backup_spinner);
56
            ArrayAdapter<CharSequence> dailyAdapter = ArrayAdapter.createFromResource(this, R.array.dailyBackupValues, android.R.layout.simple_spinner_item);
57
            dailyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
58
            dailyBackupSpinner.setAdapter(dailyAdapter);
59
            dailyBackupSpinner.setOnItemSelectedListener(this);
60
    }
61
    
62
        private void setupButtons() {
63
                Button update = (Button) findViewById(R.id.backup_update_button);
64
                update.setOnClickListener(this);
65
        }
66
        
67
        private void setupCheckBox(){
68
                enableCheckBox = (CheckBox) findViewById(R.id.enable_backup_checkbox);
69
        }
70
        
71
        public void onClick(View v) {
72
                /*
73
                 * server maybe null if another task is
74
                 * currently processing
75
                 */
76
                if(server == null){
77
                        showAlert("Error", "Server is busy.");
78
                }
79
                else{
80
                        trackEvent(CATEGORY_SERVER, EVENT_BACKUP, "", -1);
81
                        new BackupServerTask().execute((Void[]) null);
82
                }
83
        }
84

    
85
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
86
                if(parent == weeklyBackupSpinner){
87
                        selectedWeeklyBackup = Backup.getWeeklyValue(pos);
88
                }
89
                if(parent == dailyBackupSpinner){
90
                        selectedDailyBackup = Backup.getDailyValue(pos);
91
                }
92
        }
93

    
94
        public void onNothingSelected(AdapterView<?> parent) {
95
                //do nothing
96
        }
97
        
98
        private class BackupServerTask extends AsyncTask<Void, Void, HttpBundle> {
99
            
100
                private CloudServersException exception;
101
                
102
                @Override
103
                //let user know their process has started
104
                protected void onPreExecute(){
105
                        showToast("Changing backup schedule process has begun");
106
                }
107
                
108
                @Override
109
                protected HttpBundle doInBackground(Void... arg0) {
110
                        HttpBundle bundle = null;
111
                        try {
112
                                bundle = (new ServerManager()).backup(server, selectedWeeklyBackup, selectedDailyBackup, enableCheckBox.isChecked(), getApplicationContext());
113
                        } catch (CloudServersException e) {
114
                                exception = e;
115
                        }
116
                        return bundle;
117
                }
118
            
119
                @Override
120
                protected void onPostExecute(HttpBundle bundle) {
121
                        HttpResponse response = bundle.getResponse();
122
                        if (response != null) {
123
                                int statusCode = response.getStatusLine().getStatusCode();        
124
                                if(statusCode == 204 || statusCode == 202){
125
                                        showToast("The server's backup schedule has been change.");
126
                                        finish();
127
                                }
128
                                else if (statusCode != 204 && statusCode != 202) {
129
                                        CloudServersException cse = parseCloudServersException(response);
130
                                        if ("".equals(cse.getMessage())) {
131
                                                showError("There was a problem changing the backup schedule.", bundle);
132
                                        } else {
133
                                                showError("There was a problem changing the backup schedule: " + cse.getMessage() + " " + statusCode, bundle);
134
                                        }
135
                                }
136
                        } else if (exception != null) {
137
                                showError("There was a problem changing the backup schedule: " + exception.getMessage(), bundle);
138
                                
139
                        }
140
                }
141
    }
142
}