Statistics
| Branch: | Revision:

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

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.view.View;
15
import android.view.View.OnClickListener;
16
import android.widget.AdapterView;
17
import android.widget.AdapterView.OnItemSelectedListener;
18
import android.widget.ArrayAdapter;
19
import android.widget.Button;
20
import android.widget.CheckBox;
21
import android.widget.Spinner;
22

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

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

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

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

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

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

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

    
72

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

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

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

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

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

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

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

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

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

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

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

    
136
                private CloudServersException exception;
137

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

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

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

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

    
171
                private CloudServersException exception;
172

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

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

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

    
210
                        }
211
                }
212
        }
213
}