Statistics
| Branch: | Revision:

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
}