Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / android / BackupServerActivity.java @ 9c74202f

History | View | Annotate | Download (6.3 kB)

1 7dbfc514 koutsoub
package com.rackspace.cloud.android;
2 f58bf9f4 Adam Menz
3 f58bf9f4 Adam Menz
import org.apache.http.HttpResponse;
4 f58bf9f4 Adam Menz
5 f58bf9f4 Adam Menz
import android.os.AsyncTask;
6 f58bf9f4 Adam Menz
import android.os.Bundle;
7 f58bf9f4 Adam Menz
import android.view.View;
8 f58bf9f4 Adam Menz
import android.view.View.OnClickListener;
9 f58bf9f4 Adam Menz
import android.widget.AdapterView;
10 f58bf9f4 Adam Menz
import android.widget.AdapterView.OnItemSelectedListener;
11 f58bf9f4 Adam Menz
import android.widget.ArrayAdapter;
12 f58bf9f4 Adam Menz
import android.widget.Button;
13 f58bf9f4 Adam Menz
import android.widget.CheckBox;
14 f58bf9f4 Adam Menz
import android.widget.Spinner;
15 f58bf9f4 Adam Menz
16 48601850 Mike Mayo
import com.rackspace.cloud.android.R;
17 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.Backup;
18 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.BackupManager;
19 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.CloudServersException;
20 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.Server;
21 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.ServerManager;
22 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
23 48601850 Mike Mayo
24 6b8dad86 Adam Menz
public class BackupServerActivity extends CloudActivity implements OnItemSelectedListener, OnClickListener {
25 1a79c76b Adam Menz
26 f58bf9f4 Adam Menz
        private Server server;
27 1a79c76b Adam Menz
        private Backup backup;
28 f58bf9f4 Adam Menz
        private Spinner weeklyBackupSpinner;
29 f58bf9f4 Adam Menz
        private Spinner dailyBackupSpinner;
30 f58bf9f4 Adam Menz
        private CheckBox enableCheckBox;
31 f58bf9f4 Adam Menz
        private String selectedWeeklyBackup;
32 f58bf9f4 Adam Menz
        private String selectedDailyBackup;
33 1a79c76b Adam Menz
34 f58bf9f4 Adam Menz
        /** Called when the activity is first created. */
35 1a79c76b Adam Menz
        @Override
36 1a79c76b Adam Menz
        public void onCreate(Bundle savedInstanceState) {
37 1a79c76b Adam Menz
                super.onCreate(savedInstanceState);
38 1a79c76b Adam Menz
                restoreState(savedInstanceState);
39 1a79c76b Adam Menz
        }
40 1a79c76b Adam Menz
41 1a79c76b Adam Menz
        protected void restoreState(Bundle state){
42 6b8dad86 Adam Menz
                super.restoreState(state);
43 6b8dad86 Adam Menz
                server = (Server) this.getIntent().getExtras().get("server");
44 1a79c76b Adam Menz
                setContentView(R.layout.viewbackup); 
45 1a79c76b Adam Menz
                setupSpinners();
46 1a79c76b Adam Menz
                setupButtons();
47 1a79c76b Adam Menz
                setupCheckBox(); 
48 1a79c76b Adam Menz
49 1a79c76b Adam Menz
                if(state != null && state.containsKey("backup")){
50 1a79c76b Adam Menz
                        backup = (Backup)state.getSerializable("backup");
51 1a79c76b Adam Menz
                        if(backup == null){
52 1a79c76b Adam Menz
                                loadData();
53 1a79c76b Adam Menz
                        } else {
54 1a79c76b Adam Menz
                                displayData();
55 1a79c76b Adam Menz
                        }
56 1a79c76b Adam Menz
                } else {
57 1a79c76b Adam Menz
                        loadData();
58 1a79c76b Adam Menz
                }
59 1a79c76b Adam Menz
        }
60 1a79c76b Adam Menz
61 1a79c76b Adam Menz
        @Override
62 1a79c76b Adam Menz
        protected void onSaveInstanceState(Bundle state){
63 1a79c76b Adam Menz
                state.putSerializable("backup", backup);
64 1a79c76b Adam Menz
        }
65 1a79c76b Adam Menz
66 1a79c76b Adam Menz
        private void setupSpinners(){
67 1a79c76b Adam Menz
                weeklyBackupSpinner = (Spinner) findViewById(R.id.weekly_backup_spinner);
68 1a79c76b Adam Menz
                ArrayAdapter<CharSequence> weeklyAdapter = ArrayAdapter.createFromResource(this, R.array.weeklyBackupValues, android.R.layout.simple_spinner_item);
69 1a79c76b Adam Menz
                weeklyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
70 1a79c76b Adam Menz
                weeklyBackupSpinner.setAdapter(weeklyAdapter);
71 1a79c76b Adam Menz
                weeklyBackupSpinner.setOnItemSelectedListener(this);
72 1a79c76b Adam Menz
73 1a79c76b Adam Menz
74 1a79c76b Adam Menz
                dailyBackupSpinner = (Spinner) findViewById(R.id.daily_backup_spinner);
75 1a79c76b Adam Menz
                ArrayAdapter<CharSequence> dailyAdapter = ArrayAdapter.createFromResource(this, R.array.dailyBackupValues, android.R.layout.simple_spinner_item);
76 1a79c76b Adam Menz
                dailyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
77 1a79c76b Adam Menz
                dailyBackupSpinner.setAdapter(dailyAdapter);
78 1a79c76b Adam Menz
                dailyBackupSpinner.setOnItemSelectedListener(this);
79 6b8dad86 Adam Menz
        }
80 f58bf9f4 Adam Menz
81 f58bf9f4 Adam Menz
        private void setupButtons() {
82 f58bf9f4 Adam Menz
                Button update = (Button) findViewById(R.id.backup_update_button);
83 f58bf9f4 Adam Menz
                update.setOnClickListener(this);
84 f58bf9f4 Adam Menz
        }
85 1a79c76b Adam Menz
86 f58bf9f4 Adam Menz
        private void setupCheckBox(){
87 f58bf9f4 Adam Menz
                enableCheckBox = (CheckBox) findViewById(R.id.enable_backup_checkbox);
88 f58bf9f4 Adam Menz
        }
89 1a79c76b Adam Menz
90 1a79c76b Adam Menz
        private void displayData(){
91 1a79c76b Adam Menz
                if(backup != null){
92 1a79c76b Adam Menz
                        enableCheckBox.setChecked(backup.getEnable());
93 1a79c76b Adam Menz
94 1a79c76b Adam Menz
                        if(backup.getWeekly() != null){
95 1a79c76b Adam Menz
                                weeklyBackupSpinner.setSelection(Backup.getWeeklyIndex(backup.getWeekly()));
96 1a79c76b Adam Menz
                        }
97 1a79c76b Adam Menz
98 1a79c76b Adam Menz
                        if(backup.getDaily() != null){
99 1a79c76b Adam Menz
                                dailyBackupSpinner.setSelection(Backup.getDailyIndex(backup.getDaily()));
100 1a79c76b Adam Menz
                        }
101 1a79c76b Adam Menz
                }
102 1a79c76b Adam Menz
        }
103 1a79c76b Adam Menz
104 f58bf9f4 Adam Menz
        public void onClick(View v) {
105 32731215 Adam Menz
                /*
106 32731215 Adam Menz
                 * server maybe null if another task is
107 32731215 Adam Menz
                 * currently processing
108 32731215 Adam Menz
                 */
109 32731215 Adam Menz
                if(server == null){
110 32731215 Adam Menz
                        showAlert("Error", "Server is busy.");
111 32731215 Adam Menz
                }
112 32731215 Adam Menz
                else{
113 5018a7f8 Adam Menz
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_BACKUP, "", -1);
114 32731215 Adam Menz
                        new BackupServerTask().execute((Void[]) null);
115 32731215 Adam Menz
                }
116 f58bf9f4 Adam Menz
        }
117 f58bf9f4 Adam Menz
118 f58bf9f4 Adam Menz
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
119 f58bf9f4 Adam Menz
                if(parent == weeklyBackupSpinner){
120 f58bf9f4 Adam Menz
                        selectedWeeklyBackup = Backup.getWeeklyValue(pos);
121 f58bf9f4 Adam Menz
                }
122 f58bf9f4 Adam Menz
                if(parent == dailyBackupSpinner){
123 f58bf9f4 Adam Menz
                        selectedDailyBackup = Backup.getDailyValue(pos);
124 f58bf9f4 Adam Menz
                }
125 f58bf9f4 Adam Menz
        }
126 f58bf9f4 Adam Menz
127 f58bf9f4 Adam Menz
        public void onNothingSelected(AdapterView<?> parent) {
128 f58bf9f4 Adam Menz
                //do nothing
129 f58bf9f4 Adam Menz
        }
130 1a79c76b Adam Menz
131 1a79c76b Adam Menz
        private void loadData(){
132 1a79c76b Adam Menz
                new GetBackUpTask().execute((Void[]) null);
133 1a79c76b Adam Menz
        }
134 1a79c76b Adam Menz
135 1a79c76b Adam Menz
        private class GetBackUpTask extends AsyncTask<Void, Void, Backup> {
136 1a79c76b Adam Menz
137 1a79c76b Adam Menz
                private CloudServersException exception;
138 1a79c76b Adam Menz
139 1a79c76b Adam Menz
                @Override
140 1a79c76b Adam Menz
                //let user know their process has started
141 1a79c76b Adam Menz
                protected void onPreExecute(){
142 1a79c76b Adam Menz
                        showDialog();
143 1a79c76b Adam Menz
                }
144 1a79c76b Adam Menz
145 1a79c76b Adam Menz
                @Override
146 1a79c76b Adam Menz
                protected Backup doInBackground(Void... arg0) {
147 1a79c76b Adam Menz
                        try {
148 1a79c76b Adam Menz
                                return (new BackupManager()).getBackup(server, getContext());
149 1a79c76b Adam Menz
                        } catch (CloudServersException e) {
150 1a79c76b Adam Menz
                                exception = e;
151 1a79c76b Adam Menz
                        }
152 1a79c76b Adam Menz
                        return null;
153 1a79c76b Adam Menz
                }
154 1a79c76b Adam Menz
155 1a79c76b Adam Menz
                @Override
156 1a79c76b Adam Menz
                protected void onPostExecute(Backup result) {
157 1a79c76b Adam Menz
                        hideDialog();
158 1a79c76b Adam Menz
                        if (exception != null) {
159 1a79c76b Adam Menz
                                showAlert("Error", exception.getMessage());
160 1a79c76b Adam Menz
                        } else {
161 1a79c76b Adam Menz
                                backup = new Backup();
162 1a79c76b Adam Menz
                                backup.setEnabled(result.getEnable());
163 1a79c76b Adam Menz
                                backup.setWeekly(result.getWeekly());
164 1a79c76b Adam Menz
                                backup.setDaily(result.getDaily());
165 1a79c76b Adam Menz
                                displayData();
166 1a79c76b Adam Menz
                        }
167 1a79c76b Adam Menz
                }
168 1a79c76b Adam Menz
        }
169 1a79c76b Adam Menz
170 32731215 Adam Menz
        private class BackupServerTask extends AsyncTask<Void, Void, HttpBundle> {
171 1a79c76b Adam Menz
172 f58bf9f4 Adam Menz
                private CloudServersException exception;
173 1a79c76b Adam Menz
174 f58bf9f4 Adam Menz
                @Override
175 d88d3ae1 Adam Menz
                //let user know their process has started
176 d88d3ae1 Adam Menz
                protected void onPreExecute(){
177 d88d3ae1 Adam Menz
                        showToast("Changing backup schedule process has begun");
178 d88d3ae1 Adam Menz
                }
179 1a79c76b Adam Menz
180 d88d3ae1 Adam Menz
                @Override
181 32731215 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
182 32731215 Adam Menz
                        HttpBundle bundle = null;
183 f58bf9f4 Adam Menz
                        try {
184 32731215 Adam Menz
                                bundle = (new ServerManager()).backup(server, selectedWeeklyBackup, selectedDailyBackup, enableCheckBox.isChecked(), getApplicationContext());
185 f58bf9f4 Adam Menz
                        } catch (CloudServersException e) {
186 f58bf9f4 Adam Menz
                                exception = e;
187 f58bf9f4 Adam Menz
                        }
188 32731215 Adam Menz
                        return bundle;
189 f58bf9f4 Adam Menz
                }
190 1a79c76b Adam Menz
191 f58bf9f4 Adam Menz
                @Override
192 32731215 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
193 32731215 Adam Menz
                        HttpResponse response = bundle.getResponse();
194 f58bf9f4 Adam Menz
                        if (response != null) {
195 f58bf9f4 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();        
196 3d6c2d1a Adam Menz
                                if(statusCode == 204 || statusCode == 202){
197 d88d3ae1 Adam Menz
                                        showToast("The server's backup schedule has been change.");
198 3d6c2d1a Adam Menz
                                        finish();
199 3d6c2d1a Adam Menz
                                }
200 3d6c2d1a Adam Menz
                                else if (statusCode != 204 && statusCode != 202) {
201 f58bf9f4 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
202 f58bf9f4 Adam Menz
                                        if ("".equals(cse.getMessage())) {
203 6b8dad86 Adam Menz
                                                showError("There was a problem changing the backup schedule.", bundle);
204 f58bf9f4 Adam Menz
                                        } else {
205 6b8dad86 Adam Menz
                                                showError("There was a problem changing the backup schedule: " + cse.getMessage() + " " + statusCode, bundle);
206 f58bf9f4 Adam Menz
                                        }
207 f58bf9f4 Adam Menz
                                }
208 f58bf9f4 Adam Menz
                        } else if (exception != null) {
209 6b8dad86 Adam Menz
                                showError("There was a problem changing the backup schedule: " + exception.getMessage(), bundle);
210 1a79c76b Adam Menz
211 f58bf9f4 Adam Menz
                        }
212 f58bf9f4 Adam Menz
                }
213 1a79c76b Adam Menz
        }
214 f58bf9f4 Adam Menz
}