Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / BackupServerActivity.java @ d88d3ae1

History | View | Annotate | Download (6.9 kB)

1
package com.rackspacecloud.android;
2

    
3
import java.io.IOException;
4
import java.io.StringReader;
5

    
6
import javax.xml.parsers.FactoryConfigurationError;
7
import javax.xml.parsers.ParserConfigurationException;
8
import javax.xml.parsers.SAXParser;
9
import javax.xml.parsers.SAXParserFactory;
10

    
11
import org.apache.http.HttpResponse;
12
import org.apache.http.client.ClientProtocolException;
13
import org.apache.http.impl.client.BasicResponseHandler;
14
import org.xml.sax.InputSource;
15
import org.xml.sax.SAXException;
16
import org.xml.sax.XMLReader;
17

    
18
import com.rackspace.cloud.servers.api.client.Backup;
19
import com.rackspace.cloud.servers.api.client.CloudServersException;
20
import com.rackspace.cloud.servers.api.client.Server;
21
import com.rackspace.cloud.servers.api.client.ServerManager;
22
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
23

    
24
import android.app.Activity;
25
import android.app.AlertDialog;
26
import android.content.Context;
27
import android.content.DialogInterface;
28

    
29
import android.os.AsyncTask;
30
import android.os.Bundle;
31
import android.util.Log;
32
import android.view.View;
33
import android.view.View.OnClickListener;
34
import android.widget.AdapterView;
35
import android.widget.AdapterView.OnItemSelectedListener;
36
import android.widget.ArrayAdapter;
37
import android.widget.Button;
38
import android.widget.CheckBox;
39
import android.widget.Spinner;
40
import android.widget.Toast;
41

    
42
public class BackupServerActivity extends Activity implements OnItemSelectedListener, OnClickListener {
43
                
44
        private Server server;
45
        private Spinner weeklyBackupSpinner;
46
        private Spinner dailyBackupSpinner;
47
        private CheckBox enableCheckBox;
48
        private String selectedWeeklyBackup;
49
        private String selectedDailyBackup;
50

    
51
        /** Called when the activity is first created. */
52
    @Override
53
    public void onCreate(Bundle savedInstanceState) {
54
        super.onCreate(savedInstanceState);
55
        server = (Server) this.getIntent().getExtras().get("server");
56
        setContentView(R.layout.viewbackup); 
57
        setupSpinners();
58
            setupButtons();
59
            setupCheckBox();        
60
    }
61

    
62
    private void setupSpinners(){
63
            weeklyBackupSpinner = (Spinner) findViewById(R.id.weekly_backup_spinner);
64
            ArrayAdapter<CharSequence> weeklyAdapter = ArrayAdapter.createFromResource(this, R.array.weeklyBackupValues, android.R.layout.simple_spinner_item);
65
            weeklyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
66
            weeklyBackupSpinner.setAdapter(weeklyAdapter);
67
            weeklyBackupSpinner.setOnItemSelectedListener(this);
68
            
69
            
70
            dailyBackupSpinner = (Spinner) findViewById(R.id.daily_backup_spinner);
71
            ArrayAdapter<CharSequence> dailyAdapter = ArrayAdapter.createFromResource(this, R.array.dailyBackupValues, android.R.layout.simple_spinner_item);
72
            dailyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
73
            dailyBackupSpinner.setAdapter(dailyAdapter);
74
            dailyBackupSpinner.setOnItemSelectedListener(this);
75
    }
76
    
77
        private void setupButtons() {
78
                Button update = (Button) findViewById(R.id.backup_update_button);
79
                update.setOnClickListener(this);
80
        }
81
        
82
        private void setupCheckBox(){
83
                enableCheckBox = (CheckBox) findViewById(R.id.enable_backup_checkbox);
84
        }
85

    
86
        public void onClick(View v) {
87
                new BackupServerTask().execute((Void[]) null);
88
        }
89

    
90
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
91
                if(parent == weeklyBackupSpinner){
92
                        selectedWeeklyBackup = Backup.getWeeklyValue(pos);
93
                }
94
                if(parent == dailyBackupSpinner){
95
                        selectedDailyBackup = Backup.getDailyValue(pos);
96
                }
97
                
98
        }
99

    
100
        public void onNothingSelected(AdapterView<?> parent) {
101
                //do nothing
102
        }
103
        
104
        
105
        private void showAlert(String title, String message) {
106
                AlertDialog alert = new AlertDialog.Builder(this).create();
107
                alert.setTitle(title);
108
                alert.setMessage(message);
109
                alert.setButton("OK", new DialogInterface.OnClickListener() {
110
              public void onClick(DialogInterface dialog, int which) {
111
                return;
112
            } }); 
113
                alert.show();
114
        }
115
        
116
    private void showToast(String message) {
117
                Context context = getApplicationContext();
118
                int duration = Toast.LENGTH_SHORT;
119
                Toast toast = Toast.makeText(context, message, duration);
120
                toast.show();
121
    }
122
        
123
        private CloudServersException parseCloudServersException(HttpResponse response) {
124
                CloudServersException cse = new CloudServersException();
125
                try {
126
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
127
                    String body = responseHandler.handleResponse(response);
128
                    CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
129
                    SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
130
                    XMLReader xmlReader = saxParser.getXMLReader();
131
                    xmlReader.setContentHandler(parser);
132
                    xmlReader.parse(new InputSource(new StringReader(body)));                            
133
                    cse = parser.getException();                            
134
                } catch (ClientProtocolException e) {
135
                        cse = new CloudServersException();
136
                        cse.setMessage(e.getLocalizedMessage());
137
                } catch (IOException e) {
138
                        cse = new CloudServersException();
139
                        cse.setMessage(e.getLocalizedMessage());
140
                } catch (ParserConfigurationException e) {
141
                        cse = new CloudServersException();
142
                        cse.setMessage(e.getLocalizedMessage());
143
                } catch (SAXException e) {
144
                        cse = new CloudServersException();
145
                        cse.setMessage(e.getLocalizedMessage());
146
                } catch (FactoryConfigurationError e) {
147
                        cse = new CloudServersException();
148
                        cse.setMessage(e.getLocalizedMessage());
149
                }
150
                return cse;
151
    }
152
        
153
        private class BackupServerTask extends AsyncTask<Void, Void, HttpResponse> {
154
            
155
                private CloudServersException exception;
156
                
157
                @Override
158
                //let user know their process has started
159
                protected void onPreExecute(){
160
                        showToast("Changing backup schedule process has begun");
161
                }
162
                
163
                @Override
164
                protected HttpResponse doInBackground(Void... arg0) {
165
                        HttpResponse resp = null;
166
                        try {
167
                                resp = (new ServerManager()).backup(server, selectedWeeklyBackup, selectedDailyBackup, enableCheckBox.isChecked(), getApplicationContext());
168
                        } catch (CloudServersException e) {
169
                                exception = e;
170
                        }
171
                        return resp;
172
                }
173
            
174
                @Override
175
                protected void onPostExecute(HttpResponse response) {
176

    
177
                        if (response != null) {
178
                                int statusCode = response.getStatusLine().getStatusCode();        
179
                                Log.d("statuscode", Integer.toString(statusCode));
180
                                if(statusCode == 204 || statusCode == 202){
181
                                        showToast("The server's backup schedule has been change.");
182
                                        finish();
183
                                }
184
                                else if (statusCode != 204 && statusCode != 202) {
185
                                        CloudServersException cse = parseCloudServersException(response);
186
                                        if ("".equals(cse.getMessage())) {
187
                                                showAlert("Error", "There was a problem rebooting your server.");
188
                                        } else {
189
                                                Log.d("info", "here");
190
                                                showAlert("Error", "There was a problem rebooting your server: " + cse.getMessage() + " " + statusCode);
191
                                        }
192
                                }
193
                        } else if (exception != null) {
194
                                showAlert("Error", "There was a problem rebooting your server: " + exception.getMessage());
195
                                
196
                        }
197
                }
198
    }
199
}