root / src / com / rackspacecloud / android / BackupServerActivity.java @ 6c0d81f1
History | View | Annotate | Download (7.6 kB)
1 | f58bf9f4 | Adam Menz | package com.rackspacecloud.android; |
---|---|---|---|
2 | f58bf9f4 | Adam Menz | |
3 | f58bf9f4 | Adam Menz | import java.io.IOException; |
4 | f58bf9f4 | Adam Menz | import java.io.StringReader; |
5 | f58bf9f4 | Adam Menz | |
6 | f58bf9f4 | Adam Menz | import javax.xml.parsers.FactoryConfigurationError; |
7 | f58bf9f4 | Adam Menz | import javax.xml.parsers.ParserConfigurationException; |
8 | f58bf9f4 | Adam Menz | import javax.xml.parsers.SAXParser; |
9 | f58bf9f4 | Adam Menz | import javax.xml.parsers.SAXParserFactory; |
10 | f58bf9f4 | Adam Menz | |
11 | f58bf9f4 | Adam Menz | import org.apache.http.HttpResponse; |
12 | f58bf9f4 | Adam Menz | import org.apache.http.client.ClientProtocolException; |
13 | f58bf9f4 | Adam Menz | import org.apache.http.impl.client.BasicResponseHandler; |
14 | f58bf9f4 | Adam Menz | import org.xml.sax.InputSource; |
15 | f58bf9f4 | Adam Menz | import org.xml.sax.SAXException; |
16 | f58bf9f4 | Adam Menz | import org.xml.sax.XMLReader; |
17 | f58bf9f4 | Adam Menz | |
18 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.Backup; |
19 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.CloudServersException; |
20 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.Server; |
21 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.ServerManager; |
22 | 32731215 | Adam Menz | import com.rackspace.cloud.servers.api.client.http.HttpBundle; |
23 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser; |
24 | f58bf9f4 | Adam Menz | |
25 | f58bf9f4 | Adam Menz | import android.app.AlertDialog; |
26 | d88d3ae1 | Adam Menz | import android.content.Context; |
27 | f58bf9f4 | Adam Menz | import android.content.DialogInterface; |
28 | 32731215 | Adam Menz | import android.content.Intent; |
29 | f58bf9f4 | Adam Menz | |
30 | f58bf9f4 | Adam Menz | import android.os.AsyncTask; |
31 | f58bf9f4 | Adam Menz | import android.os.Bundle; |
32 | f58bf9f4 | Adam Menz | import android.util.Log; |
33 | f58bf9f4 | Adam Menz | import android.view.View; |
34 | f58bf9f4 | Adam Menz | import android.view.View.OnClickListener; |
35 | f58bf9f4 | Adam Menz | import android.widget.AdapterView; |
36 | f58bf9f4 | Adam Menz | import android.widget.AdapterView.OnItemSelectedListener; |
37 | f58bf9f4 | Adam Menz | import android.widget.ArrayAdapter; |
38 | f58bf9f4 | Adam Menz | import android.widget.Button; |
39 | f58bf9f4 | Adam Menz | import android.widget.CheckBox; |
40 | f58bf9f4 | Adam Menz | import android.widget.Spinner; |
41 | 3d6c2d1a | Adam Menz | import android.widget.Toast; |
42 | f58bf9f4 | Adam Menz | |
43 | 0edf6b39 | Adam Menz | public class BackupServerActivity extends GaActivity implements OnItemSelectedListener, OnClickListener { |
44 | 0edf6b39 | Adam Menz | |
45 | f58bf9f4 | Adam Menz | private Server server;
|
46 | f58bf9f4 | Adam Menz | private Spinner weeklyBackupSpinner;
|
47 | f58bf9f4 | Adam Menz | private Spinner dailyBackupSpinner;
|
48 | f58bf9f4 | Adam Menz | private CheckBox enableCheckBox;
|
49 | f58bf9f4 | Adam Menz | private String selectedWeeklyBackup; |
50 | f58bf9f4 | Adam Menz | private String selectedDailyBackup; |
51 | 0edf6b39 | Adam Menz | |
52 | f58bf9f4 | Adam Menz | /** Called when the activity is first created. */
|
53 | f58bf9f4 | Adam Menz | @Override
|
54 | f58bf9f4 | Adam Menz | public void onCreate(Bundle savedInstanceState) { |
55 | f58bf9f4 | Adam Menz | super.onCreate(savedInstanceState);
|
56 | f58bf9f4 | Adam Menz | server = (Server) this.getIntent().getExtras().get("server"); |
57 | f58bf9f4 | Adam Menz | setContentView(R.layout.viewbackup); |
58 | f58bf9f4 | Adam Menz | setupSpinners(); |
59 | f58bf9f4 | Adam Menz | setupButtons(); |
60 | 0edf6b39 | Adam Menz | setupCheckBox(); |
61 | f58bf9f4 | Adam Menz | } |
62 | f58bf9f4 | Adam Menz | |
63 | f58bf9f4 | Adam Menz | private void setupSpinners(){ |
64 | f58bf9f4 | Adam Menz | weeklyBackupSpinner = (Spinner) findViewById(R.id.weekly_backup_spinner); |
65 | f58bf9f4 | Adam Menz | ArrayAdapter<CharSequence> weeklyAdapter = ArrayAdapter.createFromResource(this, R.array.weeklyBackupValues, android.R.layout.simple_spinner_item); |
66 | f58bf9f4 | Adam Menz | weeklyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
67 | f58bf9f4 | Adam Menz | weeklyBackupSpinner.setAdapter(weeklyAdapter); |
68 | f58bf9f4 | Adam Menz | weeklyBackupSpinner.setOnItemSelectedListener(this);
|
69 | f58bf9f4 | Adam Menz | |
70 | f58bf9f4 | Adam Menz | |
71 | f58bf9f4 | Adam Menz | dailyBackupSpinner = (Spinner) findViewById(R.id.daily_backup_spinner); |
72 | f58bf9f4 | Adam Menz | ArrayAdapter<CharSequence> dailyAdapter = ArrayAdapter.createFromResource(this, R.array.dailyBackupValues, android.R.layout.simple_spinner_item); |
73 | f58bf9f4 | Adam Menz | dailyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
74 | f58bf9f4 | Adam Menz | dailyBackupSpinner.setAdapter(dailyAdapter); |
75 | f58bf9f4 | Adam Menz | dailyBackupSpinner.setOnItemSelectedListener(this);
|
76 | f58bf9f4 | Adam Menz | } |
77 | f58bf9f4 | Adam Menz | |
78 | f58bf9f4 | Adam Menz | private void setupButtons() { |
79 | f58bf9f4 | Adam Menz | Button update = (Button) findViewById(R.id.backup_update_button); |
80 | f58bf9f4 | Adam Menz | update.setOnClickListener(this);
|
81 | f58bf9f4 | Adam Menz | } |
82 | f58bf9f4 | Adam Menz | |
83 | f58bf9f4 | Adam Menz | private void setupCheckBox(){ |
84 | f58bf9f4 | Adam Menz | enableCheckBox = (CheckBox) findViewById(R.id.enable_backup_checkbox); |
85 | f58bf9f4 | Adam Menz | } |
86 | 32731215 | Adam Menz | |
87 | 32731215 | Adam Menz | private void showAlert(String title, String message) { |
88 | 32731215 | Adam Menz | try {
|
89 | 32731215 | Adam Menz | AlertDialog alert = new AlertDialog.Builder(this).create(); |
90 | 32731215 | Adam Menz | alert.setTitle(title); |
91 | 32731215 | Adam Menz | alert.setMessage(message); |
92 | 32731215 | Adam Menz | alert.setButton("OK", new DialogInterface.OnClickListener() { |
93 | 32731215 | Adam Menz | public void onClick(DialogInterface dialog, int which) { |
94 | 32731215 | Adam Menz | return;
|
95 | 32731215 | Adam Menz | } }); |
96 | 32731215 | Adam Menz | alert.show(); |
97 | 32731215 | Adam Menz | } catch (Exception e) { |
98 | 32731215 | Adam Menz | e.printStackTrace(); |
99 | 32731215 | Adam Menz | } |
100 | 32731215 | Adam Menz | } |
101 | f58bf9f4 | Adam Menz | |
102 | f58bf9f4 | Adam Menz | public void onClick(View v) { |
103 | 32731215 | Adam Menz | /*
|
104 | 32731215 | Adam Menz | * server maybe null if another task is
|
105 | 32731215 | Adam Menz | * currently processing
|
106 | 32731215 | Adam Menz | */
|
107 | 32731215 | Adam Menz | if(server == null){ |
108 | 32731215 | Adam Menz | showAlert("Error", "Server is busy."); |
109 | 32731215 | Adam Menz | } |
110 | 32731215 | Adam Menz | else{
|
111 | 0edf6b39 | Adam Menz | trackEvent(CATEGORY_SERVER, EVENT_BACKUP, "", -1); |
112 | 32731215 | Adam Menz | new BackupServerTask().execute((Void[]) null); |
113 | 32731215 | Adam Menz | } |
114 | f58bf9f4 | Adam Menz | } |
115 | f58bf9f4 | Adam Menz | |
116 | f58bf9f4 | Adam Menz | public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { |
117 | f58bf9f4 | Adam Menz | if(parent == weeklyBackupSpinner){
|
118 | f58bf9f4 | Adam Menz | selectedWeeklyBackup = Backup.getWeeklyValue(pos); |
119 | f58bf9f4 | Adam Menz | } |
120 | f58bf9f4 | Adam Menz | if(parent == dailyBackupSpinner){
|
121 | f58bf9f4 | Adam Menz | selectedDailyBackup = Backup.getDailyValue(pos); |
122 | f58bf9f4 | Adam Menz | } |
123 | f58bf9f4 | Adam Menz | |
124 | f58bf9f4 | Adam Menz | } |
125 | f58bf9f4 | Adam Menz | |
126 | f58bf9f4 | Adam Menz | public void onNothingSelected(AdapterView<?> parent) { |
127 | f58bf9f4 | Adam Menz | //do nothing
|
128 | f58bf9f4 | Adam Menz | } |
129 | f58bf9f4 | Adam Menz | |
130 | d88d3ae1 | Adam Menz | private void showToast(String message) { |
131 | d88d3ae1 | Adam Menz | Context context = getApplicationContext();
|
132 | d88d3ae1 | Adam Menz | int duration = Toast.LENGTH_SHORT;
|
133 | d88d3ae1 | Adam Menz | Toast toast = Toast.makeText(context, message, duration); |
134 | d88d3ae1 | Adam Menz | toast.show(); |
135 | d88d3ae1 | Adam Menz | } |
136 | d88d3ae1 | Adam Menz | |
137 | f58bf9f4 | Adam Menz | private CloudServersException parseCloudServersException(HttpResponse response) {
|
138 | f58bf9f4 | Adam Menz | CloudServersException cse = new CloudServersException();
|
139 | f58bf9f4 | Adam Menz | try {
|
140 | f58bf9f4 | Adam Menz | BasicResponseHandler responseHandler = new BasicResponseHandler();
|
141 | f58bf9f4 | Adam Menz | String body = responseHandler.handleResponse(response);
|
142 | f58bf9f4 | Adam Menz | CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
|
143 | f58bf9f4 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
144 | f58bf9f4 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
145 | f58bf9f4 | Adam Menz | xmlReader.setContentHandler(parser); |
146 | f58bf9f4 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
147 | f58bf9f4 | Adam Menz | cse = parser.getException(); |
148 | f58bf9f4 | Adam Menz | } catch (ClientProtocolException e) {
|
149 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
150 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
151 | f58bf9f4 | Adam Menz | } catch (IOException e) { |
152 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
153 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
154 | f58bf9f4 | Adam Menz | } catch (ParserConfigurationException e) { |
155 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
156 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
157 | f58bf9f4 | Adam Menz | } catch (SAXException e) {
|
158 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
159 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
160 | f58bf9f4 | Adam Menz | } catch (FactoryConfigurationError e) { |
161 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
162 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
163 | f58bf9f4 | Adam Menz | } |
164 | f58bf9f4 | Adam Menz | return cse;
|
165 | f58bf9f4 | Adam Menz | } |
166 | f58bf9f4 | Adam Menz | |
167 | 32731215 | Adam Menz | private void startServerError(String message, HttpBundle bundle){ |
168 | 32731215 | Adam Menz | Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
|
169 | 32731215 | Adam Menz | viewIntent.putExtra("errorMessage", message);
|
170 | 32731215 | Adam Menz | viewIntent.putExtra("response", bundle.getResponseText());
|
171 | 32731215 | Adam Menz | viewIntent.putExtra("request", bundle.getCurlRequest());
|
172 | 32731215 | Adam Menz | startActivity(viewIntent); |
173 | 32731215 | Adam Menz | } |
174 | 32731215 | Adam Menz | |
175 | 32731215 | Adam Menz | private class BackupServerTask extends AsyncTask<Void, Void, HttpBundle> { |
176 | f58bf9f4 | Adam Menz | |
177 | f58bf9f4 | Adam Menz | private CloudServersException exception;
|
178 | f58bf9f4 | Adam Menz | |
179 | f58bf9f4 | Adam Menz | @Override
|
180 | d88d3ae1 | Adam Menz | //let user know their process has started
|
181 | d88d3ae1 | Adam Menz | protected void onPreExecute(){ |
182 | d88d3ae1 | Adam Menz | showToast("Changing backup schedule process has begun");
|
183 | d88d3ae1 | Adam Menz | } |
184 | d88d3ae1 | Adam Menz | |
185 | d88d3ae1 | Adam Menz | @Override
|
186 | 32731215 | Adam Menz | protected HttpBundle doInBackground(Void... arg0) { |
187 | 32731215 | Adam Menz | HttpBundle bundle = null;
|
188 | f58bf9f4 | Adam Menz | try {
|
189 | 32731215 | Adam Menz | bundle = (new ServerManager()).backup(server, selectedWeeklyBackup, selectedDailyBackup, enableCheckBox.isChecked(), getApplicationContext());
|
190 | f58bf9f4 | Adam Menz | } catch (CloudServersException e) {
|
191 | f58bf9f4 | Adam Menz | exception = e; |
192 | f58bf9f4 | Adam Menz | } |
193 | 32731215 | Adam Menz | return bundle;
|
194 | f58bf9f4 | Adam Menz | } |
195 | f58bf9f4 | Adam Menz | |
196 | f58bf9f4 | Adam Menz | @Override
|
197 | 32731215 | Adam Menz | protected void onPostExecute(HttpBundle bundle) { |
198 | 32731215 | Adam Menz | HttpResponse response = bundle.getResponse(); |
199 | f58bf9f4 | Adam Menz | if (response != null) { |
200 | f58bf9f4 | Adam Menz | int statusCode = response.getStatusLine().getStatusCode();
|
201 | f58bf9f4 | Adam Menz | Log.d("statuscode", Integer.toString(statusCode)); |
202 | 3d6c2d1a | Adam Menz | if(statusCode == 204 || statusCode == 202){ |
203 | d88d3ae1 | Adam Menz | showToast("The server's backup schedule has been change.");
|
204 | 3d6c2d1a | Adam Menz | finish(); |
205 | 3d6c2d1a | Adam Menz | } |
206 | 3d6c2d1a | Adam Menz | else if (statusCode != 204 && statusCode != 202) { |
207 | f58bf9f4 | Adam Menz | CloudServersException cse = parseCloudServersException(response); |
208 | f58bf9f4 | Adam Menz | if ("".equals(cse.getMessage())) { |
209 | 32731215 | Adam Menz | startServerError("There was a problem changing the backup schedule.", bundle);
|
210 | f58bf9f4 | Adam Menz | } else {
|
211 | 3d6c2d1a | Adam Menz | Log.d("info", "here"); |
212 | 32731215 | Adam Menz | startServerError("There was a problem changing the backup schedule: " + cse.getMessage() + " " + statusCode, bundle); |
213 | f58bf9f4 | Adam Menz | } |
214 | f58bf9f4 | Adam Menz | } |
215 | f58bf9f4 | Adam Menz | } else if (exception != null) { |
216 | 32731215 | Adam Menz | startServerError("There was a problem changing the backup schedule: " + exception.getMessage(), bundle);
|
217 | f58bf9f4 | Adam Menz | |
218 | f58bf9f4 | Adam Menz | } |
219 | f58bf9f4 | Adam Menz | } |
220 | f58bf9f4 | Adam Menz | } |
221 | f58bf9f4 | Adam Menz | } |