Statistics
| Branch: | Revision:

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
}