Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / BackupServerActivity.java @ 1a79c76b

History | View | Annotate | Download (6.2 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.BackupManager;
7
import com.rackspace.cloud.servers.api.client.CloudServersException;
8
import com.rackspace.cloud.servers.api.client.Server;
9
import com.rackspace.cloud.servers.api.client.ServerManager;
10
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
11

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

    
24
public class BackupServerActivity extends CloudActivity implements OnItemSelectedListener, OnClickListener {
25

    
26
        private Server server;
27
        private Backup backup;
28
        private Spinner weeklyBackupSpinner;
29
        private Spinner dailyBackupSpinner;
30
        private CheckBox enableCheckBox;
31
        private String selectedWeeklyBackup;
32
        private String selectedDailyBackup;
33

    
34
        /** Called when the activity is first created. */
35
        @Override
36
        public void onCreate(Bundle savedInstanceState) {
37
                super.onCreate(savedInstanceState);
38
                restoreState(savedInstanceState);
39
        }
40

    
41
        protected void restoreState(Bundle state){
42
                super.restoreState(state);
43
                server = (Server) this.getIntent().getExtras().get("server");
44
                setContentView(R.layout.viewbackup); 
45
                setupSpinners();
46
                setupButtons();
47
                setupCheckBox(); 
48

    
49
                if(state != null && state.containsKey("backup")){
50
                        backup = (Backup)state.getSerializable("backup");
51
                        if(backup == null){
52
                                loadData();
53
                        } else {
54
                                displayData();
55
                        }
56
                } else {
57
                        loadData();
58
                }
59
        }
60

    
61
        @Override
62
        protected void onSaveInstanceState(Bundle state){
63
                state.putSerializable("backup", backup);
64
        }
65

    
66
        private void setupSpinners(){
67
                weeklyBackupSpinner = (Spinner) findViewById(R.id.weekly_backup_spinner);
68
                ArrayAdapter<CharSequence> weeklyAdapter = ArrayAdapter.createFromResource(this, R.array.weeklyBackupValues, android.R.layout.simple_spinner_item);
69
                weeklyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
70
                weeklyBackupSpinner.setAdapter(weeklyAdapter);
71
                weeklyBackupSpinner.setOnItemSelectedListener(this);
72

    
73

    
74
                dailyBackupSpinner = (Spinner) findViewById(R.id.daily_backup_spinner);
75
                ArrayAdapter<CharSequence> dailyAdapter = ArrayAdapter.createFromResource(this, R.array.dailyBackupValues, android.R.layout.simple_spinner_item);
76
                dailyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
77
                dailyBackupSpinner.setAdapter(dailyAdapter);
78
                dailyBackupSpinner.setOnItemSelectedListener(this);
79
        }
80

    
81
        private void setupButtons() {
82
                Button update = (Button) findViewById(R.id.backup_update_button);
83
                update.setOnClickListener(this);
84
        }
85

    
86
        private void setupCheckBox(){
87
                enableCheckBox = (CheckBox) findViewById(R.id.enable_backup_checkbox);
88
        }
89

    
90
        private void displayData(){
91
                if(backup != null){
92
                        enableCheckBox.setChecked(backup.getEnable());
93

    
94
                        if(backup.getWeekly() != null){
95
                                weeklyBackupSpinner.setSelection(Backup.getWeeklyIndex(backup.getWeekly()));
96
                        }
97

    
98
                        if(backup.getDaily() != null){
99
                                dailyBackupSpinner.setSelection(Backup.getDailyIndex(backup.getDaily()));
100
                        }
101
                }
102
        }
103

    
104
        public void onClick(View v) {
105
                /*
106
                 * server maybe null if another task is
107
                 * currently processing
108
                 */
109
                if(server == null){
110
                        showAlert("Error", "Server is busy.");
111
                }
112
                else{
113
                        trackEvent(CATEGORY_SERVER, EVENT_BACKUP, "", -1);
114
                        new BackupServerTask().execute((Void[]) null);
115
                }
116
        }
117

    
118
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
119
                if(parent == weeklyBackupSpinner){
120
                        selectedWeeklyBackup = Backup.getWeeklyValue(pos);
121
                }
122
                if(parent == dailyBackupSpinner){
123
                        selectedDailyBackup = Backup.getDailyValue(pos);
124
                }
125
        }
126

    
127
        public void onNothingSelected(AdapterView<?> parent) {
128
                //do nothing
129
        }
130

    
131
        private void loadData(){
132
                new GetBackUpTask().execute((Void[]) null);
133
        }
134

    
135
        private class GetBackUpTask extends AsyncTask<Void, Void, Backup> {
136

    
137
                private CloudServersException exception;
138

    
139
                @Override
140
                //let user know their process has started
141
                protected void onPreExecute(){
142
                        showDialog();
143
                }
144

    
145
                @Override
146
                protected Backup doInBackground(Void... arg0) {
147
                        try {
148
                                return (new BackupManager()).getBackup(server, getContext());
149
                        } catch (CloudServersException e) {
150
                                exception = e;
151
                        }
152
                        return null;
153
                }
154

    
155
                @Override
156
                protected void onPostExecute(Backup result) {
157
                        hideDialog();
158
                        if (exception != null) {
159
                                showAlert("Error", exception.getMessage());
160
                        } else {
161
                                backup = new Backup();
162
                                backup.setEnabled(result.getEnable());
163
                                backup.setWeekly(result.getWeekly());
164
                                backup.setDaily(result.getDaily());
165
                                displayData();
166
                        }
167
                }
168
        }
169

    
170
        private class BackupServerTask extends AsyncTask<Void, Void, HttpBundle> {
171

    
172
                private CloudServersException exception;
173

    
174
                @Override
175
                //let user know their process has started
176
                protected void onPreExecute(){
177
                        showToast("Changing backup schedule process has begun");
178
                }
179

    
180
                @Override
181
                protected HttpBundle doInBackground(Void... arg0) {
182
                        HttpBundle bundle = null;
183
                        try {
184
                                bundle = (new ServerManager()).backup(server, selectedWeeklyBackup, selectedDailyBackup, enableCheckBox.isChecked(), getApplicationContext());
185
                        } catch (CloudServersException e) {
186
                                exception = e;
187
                        }
188
                        return bundle;
189
                }
190

    
191
                @Override
192
                protected void onPostExecute(HttpBundle bundle) {
193
                        HttpResponse response = bundle.getResponse();
194
                        if (response != null) {
195
                                int statusCode = response.getStatusLine().getStatusCode();        
196
                                if(statusCode == 204 || statusCode == 202){
197
                                        showToast("The server's backup schedule has been change.");
198
                                        finish();
199
                                }
200
                                else if (statusCode != 204 && statusCode != 202) {
201
                                        CloudServersException cse = parseCloudServersException(response);
202
                                        if ("".equals(cse.getMessage())) {
203
                                                showError("There was a problem changing the backup schedule.", bundle);
204
                                        } else {
205
                                                showError("There was a problem changing the backup schedule: " + cse.getMessage() + " " + statusCode, bundle);
206
                                        }
207
                                }
208
                        } else if (exception != null) {
209
                                showError("There was a problem changing the backup schedule: " + exception.getMessage(), bundle);
210

    
211
                        }
212
                }
213
        }
214
}