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 |
} |