root / src / com / rackspacecloud / android / PasswordServerActivity.java @ 639ae8d6
History | View | Annotate | Download (5.3 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 android.app.Activity; |
19 | d88d3ae1 | Adam Menz | import android.content.Context; |
20 | 32731215 | Adam Menz | import android.content.Intent; |
21 | f58bf9f4 | Adam Menz | import android.os.AsyncTask; |
22 | f58bf9f4 | Adam Menz | import android.os.Bundle; |
23 | f58bf9f4 | Adam Menz | import android.view.View; |
24 | f58bf9f4 | Adam Menz | import android.view.View.OnClickListener; |
25 | f58bf9f4 | Adam Menz | import android.widget.Button; |
26 | f58bf9f4 | Adam Menz | import android.widget.EditText; |
27 | f58bf9f4 | Adam Menz | import android.widget.Toast; |
28 | f58bf9f4 | Adam Menz | |
29 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.CloudServersException; |
30 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.Server; |
31 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.ServerManager; |
32 | 32731215 | Adam Menz | import com.rackspace.cloud.servers.api.client.http.HttpBundle; |
33 | f58bf9f4 | Adam Menz | import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser; |
34 | f58bf9f4 | Adam Menz | |
35 | f58bf9f4 | Adam Menz | public class PasswordServerActivity extends Activity implements OnClickListener{ |
36 | f58bf9f4 | Adam Menz | |
37 | f58bf9f4 | Adam Menz | private Server server;
|
38 | f58bf9f4 | Adam Menz | private String modifiedPassword; |
39 | f58bf9f4 | Adam Menz | |
40 | f58bf9f4 | Adam Menz | public void onCreate(Bundle savedInstanceState) { |
41 | f58bf9f4 | Adam Menz | super.onCreate(savedInstanceState);
|
42 | f58bf9f4 | Adam Menz | setContentView(R.layout.viewchangepassword); |
43 | f58bf9f4 | Adam Menz | server = (Server) this.getIntent().getExtras().get("server"); |
44 | f58bf9f4 | Adam Menz | setupButtons(); |
45 | f58bf9f4 | Adam Menz | } |
46 | f58bf9f4 | Adam Menz | |
47 | f58bf9f4 | Adam Menz | private void setupButtons() { |
48 | f58bf9f4 | Adam Menz | Button update = (Button) findViewById(R.id.password_change_button); |
49 | f58bf9f4 | Adam Menz | update.setOnClickListener(this);
|
50 | f58bf9f4 | Adam Menz | } |
51 | f58bf9f4 | Adam Menz | |
52 | f58bf9f4 | Adam Menz | @Override
|
53 | f58bf9f4 | Adam Menz | public void onClick(View v) { |
54 | f58bf9f4 | Adam Menz | String password = ((EditText)findViewById(R.id.password_edittext)).getText().toString();
|
55 | f58bf9f4 | Adam Menz | String confirm = ((EditText)findViewById(R.id.password_confirm_edittext)).getText().toString();
|
56 | f58bf9f4 | Adam Menz | if(password.equals(confirm)){
|
57 | 32731215 | Adam Menz | modifiedPassword = password; |
58 | f58bf9f4 | Adam Menz | new PasswordServerTask().execute((Void[]) null); |
59 | f58bf9f4 | Adam Menz | } |
60 | f58bf9f4 | Adam Menz | else{
|
61 | d88d3ae1 | Adam Menz | showToast("The password and confirmation do not match");
|
62 | f58bf9f4 | Adam Menz | } |
63 | f58bf9f4 | Adam Menz | } |
64 | f58bf9f4 | Adam Menz | |
65 | d88d3ae1 | Adam Menz | private void showToast(String message) { |
66 | d88d3ae1 | Adam Menz | Context context = getApplicationContext();
|
67 | d88d3ae1 | Adam Menz | int duration = Toast.LENGTH_SHORT;
|
68 | d88d3ae1 | Adam Menz | Toast toast = Toast.makeText(context, message, duration); |
69 | d88d3ae1 | Adam Menz | toast.show(); |
70 | d88d3ae1 | Adam Menz | } |
71 | f58bf9f4 | Adam Menz | |
72 | f58bf9f4 | Adam Menz | private CloudServersException parseCloudServersException(HttpResponse response) {
|
73 | f58bf9f4 | Adam Menz | CloudServersException cse = new CloudServersException();
|
74 | f58bf9f4 | Adam Menz | try {
|
75 | f58bf9f4 | Adam Menz | BasicResponseHandler responseHandler = new BasicResponseHandler();
|
76 | f58bf9f4 | Adam Menz | String body = responseHandler.handleResponse(response);
|
77 | f58bf9f4 | Adam Menz | CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
|
78 | f58bf9f4 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
79 | f58bf9f4 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
80 | f58bf9f4 | Adam Menz | xmlReader.setContentHandler(parser); |
81 | f58bf9f4 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
82 | f58bf9f4 | Adam Menz | cse = parser.getException(); |
83 | f58bf9f4 | Adam Menz | } catch (ClientProtocolException e) {
|
84 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
85 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
86 | f58bf9f4 | Adam Menz | } catch (IOException e) { |
87 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
88 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
89 | f58bf9f4 | Adam Menz | } catch (ParserConfigurationException e) { |
90 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
91 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
92 | f58bf9f4 | Adam Menz | } catch (SAXException e) {
|
93 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
94 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
95 | f58bf9f4 | Adam Menz | } catch (FactoryConfigurationError e) { |
96 | f58bf9f4 | Adam Menz | cse = new CloudServersException();
|
97 | f58bf9f4 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
98 | f58bf9f4 | Adam Menz | } |
99 | f58bf9f4 | Adam Menz | return cse;
|
100 | f58bf9f4 | Adam Menz | } |
101 | f58bf9f4 | Adam Menz | |
102 | 32731215 | Adam Menz | private void startServerError(String message, HttpBundle bundle){ |
103 | 32731215 | Adam Menz | Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
|
104 | 32731215 | Adam Menz | viewIntent.putExtra("errorMessage", message);
|
105 | 32731215 | Adam Menz | viewIntent.putExtra("response", bundle.getResponseText());
|
106 | 32731215 | Adam Menz | viewIntent.putExtra("request", bundle.getCurlRequest());
|
107 | 32731215 | Adam Menz | startActivity(viewIntent); |
108 | 32731215 | Adam Menz | } |
109 | 32731215 | Adam Menz | |
110 | 32731215 | Adam Menz | private class PasswordServerTask extends AsyncTask<Void, Void, HttpBundle> { |
111 | f58bf9f4 | Adam Menz | |
112 | f58bf9f4 | Adam Menz | private CloudServersException exception;
|
113 | f58bf9f4 | Adam Menz | |
114 | d88d3ae1 | Adam Menz | protected void onPreExecute(){ |
115 | d88d3ae1 | Adam Menz | showToast("Change root password process has begun");
|
116 | d88d3ae1 | Adam Menz | } |
117 | d88d3ae1 | Adam Menz | |
118 | f58bf9f4 | Adam Menz | @Override
|
119 | 32731215 | Adam Menz | protected HttpBundle doInBackground(Void... arg0) { |
120 | 32731215 | Adam Menz | HttpBundle bundle = null;
|
121 | f58bf9f4 | Adam Menz | try {
|
122 | 32731215 | Adam Menz | bundle = (new ServerManager()).changePassword(server, modifiedPassword, getApplicationContext());
|
123 | f58bf9f4 | Adam Menz | } catch (CloudServersException e) {
|
124 | f58bf9f4 | Adam Menz | exception = e; |
125 | f58bf9f4 | Adam Menz | } |
126 | 32731215 | Adam Menz | return bundle;
|
127 | f58bf9f4 | Adam Menz | } |
128 | f58bf9f4 | Adam Menz | |
129 | f58bf9f4 | Adam Menz | @Override
|
130 | 32731215 | Adam Menz | protected void onPostExecute(HttpBundle bundle) { |
131 | 32731215 | Adam Menz | HttpResponse response = bundle.getResponse(); |
132 | f58bf9f4 | Adam Menz | if (response != null) { |
133 | f58bf9f4 | Adam Menz | int statusCode = response.getStatusLine().getStatusCode();
|
134 | f58bf9f4 | Adam Menz | if(statusCode == 204){ |
135 | f58bf9f4 | Adam Menz | String mustMatch = "The server's root password has successfully been changed."; |
136 | f58bf9f4 | Adam Menz | Toast passwordError = Toast.makeText(getApplicationContext(), mustMatch, Toast.LENGTH_SHORT); |
137 | f58bf9f4 | Adam Menz | passwordError.show(); |
138 | f58bf9f4 | Adam Menz | finish(); |
139 | f58bf9f4 | Adam Menz | } |
140 | f58bf9f4 | Adam Menz | if (statusCode != 204) { |
141 | f58bf9f4 | Adam Menz | CloudServersException cse = parseCloudServersException(response); |
142 | f58bf9f4 | Adam Menz | if ("".equals(cse.getMessage())) { |
143 | 32731215 | Adam Menz | startServerError("There was a problem changing your password.", bundle);
|
144 | f58bf9f4 | Adam Menz | } else {
|
145 | 32731215 | Adam Menz | startServerError("There was a problem changing your password: " + cse.getMessage() + " " + statusCode, bundle); |
146 | f58bf9f4 | Adam Menz | } |
147 | f58bf9f4 | Adam Menz | } |
148 | f58bf9f4 | Adam Menz | } else if (exception != null) { |
149 | 32731215 | Adam Menz | startServerError("There was a problem changing your password: " + exception.getMessage(), bundle);
|
150 | f58bf9f4 | Adam Menz | |
151 | f58bf9f4 | Adam Menz | } |
152 | f58bf9f4 | Adam Menz | } |
153 | f58bf9f4 | Adam Menz | |
154 | f58bf9f4 | Adam Menz | |
155 | f58bf9f4 | Adam Menz | } |
156 | f58bf9f4 | Adam Menz | } |