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