Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / EditLoadBalancerActivity.java @ 48601850

History | View | Annotate | Download (8.4 kB)

1 4f9d1a69 Adam Menz
package com.rackspacecloud.android;
2 4f9d1a69 Adam Menz
3 4f9d1a69 Adam Menz
import org.apache.http.HttpResponse;
4 4f9d1a69 Adam Menz
5 4f9d1a69 Adam Menz
import android.os.AsyncTask;
6 4f9d1a69 Adam Menz
import android.os.Bundle;
7 b722cab3 Adam Menz
import android.util.Log;
8 4f9d1a69 Adam Menz
import android.view.View;
9 4f9d1a69 Adam Menz
import android.view.View.OnClickListener;
10 4f9d1a69 Adam Menz
import android.widget.AdapterView;
11 48601850 Mike Mayo
import android.widget.AdapterView.OnItemSelectedListener;
12 4f9d1a69 Adam Menz
import android.widget.ArrayAdapter;
13 4f9d1a69 Adam Menz
import android.widget.Button;
14 4f9d1a69 Adam Menz
import android.widget.EditText;
15 4f9d1a69 Adam Menz
import android.widget.Spinner;
16 48601850 Mike Mayo
17 48601850 Mike Mayo
import com.rackspace.cloud.android.R;
18 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.Algorithm;
19 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer;
20 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancerManager;
21 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.Protocol;
22 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.CloudServersException;
23 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
24 4f9d1a69 Adam Menz
25 b722cab3 Adam Menz
public class EditLoadBalancerActivity extends CloudActivity implements OnItemSelectedListener {
26 4f9d1a69 Adam Menz
27 4f9d1a69 Adam Menz
        private LoadBalancer loadBalancer;
28 4f9d1a69 Adam Menz
        private Protocol[] protocols;
29 4f9d1a69 Adam Menz
        private Algorithm[] algorithms;
30 4f9d1a69 Adam Menz
        private Spinner protocolSpinner;
31 4f9d1a69 Adam Menz
        private Spinner algorithmSpinner;
32 b722cab3 Adam Menz
        private String selectedProtocol;
33 b722cab3 Adam Menz
        private String selectedAlgorithm;
34 b722cab3 Adam Menz
        private String selectedPort;
35 b722cab3 Adam Menz
        private String selectedName;
36 4f9d1a69 Adam Menz
        private EditText name;
37 b722cab3 Adam Menz
        private EditText portText;
38 4f9d1a69 Adam Menz
39 4f9d1a69 Adam Menz
        @Override
40 4f9d1a69 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
41 4f9d1a69 Adam Menz
                super.onCreate(savedInstanceState);
42 4f9d1a69 Adam Menz
                loadBalancer = (LoadBalancer) this.getIntent().getExtras().get("loadBalancer");
43 4f9d1a69 Adam Menz
                setContentView(R.layout.updateloadbalancer);
44 4f9d1a69 Adam Menz
                restoreState(savedInstanceState);
45 4f9d1a69 Adam Menz
        }
46 b722cab3 Adam Menz
47 4f9d1a69 Adam Menz
        @Override
48 4f9d1a69 Adam Menz
        protected void onSaveInstanceState(Bundle outState) {
49 4f9d1a69 Adam Menz
                super.onSaveInstanceState(outState);
50 4f9d1a69 Adam Menz
                outState.putSerializable("loadBalancer", loadBalancer);
51 b722cab3 Adam Menz
                outState.putString("selectedProtocol", selectedProtocol);
52 b722cab3 Adam Menz
                outState.putString("selectedAlgorithm", selectedAlgorithm);
53 b722cab3 Adam Menz
                outState.putString("selectedPort", selectedPort);
54 b722cab3 Adam Menz
                outState.putString("selectedName", selectedName);
55 4f9d1a69 Adam Menz
        }
56 4f9d1a69 Adam Menz
57 b722cab3 Adam Menz
        protected void restoreState(Bundle state) {
58 b722cab3 Adam Menz
                super.restoreState(state);
59 b722cab3 Adam Menz
60 4f9d1a69 Adam Menz
                if (state != null && state.containsKey("loadBalancer")) {
61 4f9d1a69 Adam Menz
                        loadBalancer = (LoadBalancer) state.getSerializable("loadBalancer");
62 4f9d1a69 Adam Menz
                }
63 b722cab3 Adam Menz
                
64 b722cab3 Adam Menz
                if (state != null && state.containsKey("selectedProtocol")) {
65 b722cab3 Adam Menz
                        selectedProtocol = state.getString("selectedProtocol");
66 b722cab3 Adam Menz
                } else {
67 b722cab3 Adam Menz
                        selectedProtocol = loadBalancer.getProtocol();
68 b722cab3 Adam Menz
                }
69 b722cab3 Adam Menz
70 b722cab3 Adam Menz
                if (state != null && state.containsKey("selectedAlgorithm")) {
71 b722cab3 Adam Menz
                        selectedAlgorithm = state.getString("selectedAlgorithm");
72 b722cab3 Adam Menz
                } else {
73 b722cab3 Adam Menz
                        selectedAlgorithm = loadBalancer.getAlgorithm();
74 b722cab3 Adam Menz
                }
75 b722cab3 Adam Menz
                
76 b722cab3 Adam Menz
                if (state != null && state.containsKey("selectedPort")) {
77 b722cab3 Adam Menz
                        selectedPort = state.getString("selectedPort");
78 b722cab3 Adam Menz
                } else {
79 b722cab3 Adam Menz
                        selectedPort = loadBalancer.getPort();
80 b722cab3 Adam Menz
                }
81 b722cab3 Adam Menz
                
82 b722cab3 Adam Menz
                if (state != null && state.containsKey("selectedName")) {
83 b722cab3 Adam Menz
                        selectedName = state.getString("selectedName");
84 b722cab3 Adam Menz
                } else {
85 b722cab3 Adam Menz
                        selectedName = loadBalancer.getName();
86 b722cab3 Adam Menz
                }
87 b722cab3 Adam Menz
                
88 4f9d1a69 Adam Menz
                setupInputs();
89 4f9d1a69 Adam Menz
        }
90 b722cab3 Adam Menz
91 4f9d1a69 Adam Menz
        private void setupInputs(){
92 4f9d1a69 Adam Menz
                loadProtocolSpinner();
93 4f9d1a69 Adam Menz
                loadAlgorithmSpinner();
94 b722cab3 Adam Menz
95 b722cab3 Adam Menz
                name = (EditText) findViewById(R.id.edit_lb_name_text);
96 b722cab3 Adam Menz
                name.setText(selectedName);
97 b722cab3 Adam Menz
98 b722cab3 Adam Menz
                portText = (EditText) findViewById(R.id.edit_port_text);
99 b722cab3 Adam Menz
                portText.setText(selectedPort);
100 b722cab3 Adam Menz
101 4f9d1a69 Adam Menz
                Button submit = (Button)findViewById(R.id.update_lb_button);
102 4f9d1a69 Adam Menz
                submit.setOnClickListener(new OnClickListener() {
103 b722cab3 Adam Menz
104 4f9d1a69 Adam Menz
                        @Override
105 4f9d1a69 Adam Menz
                        public void onClick(View v) {
106 b722cab3 Adam Menz
                                
107 b722cab3 Adam Menz
                                selectedPort = portText.getText().toString();
108 b722cab3 Adam Menz
                                
109 b722cab3 Adam Menz
                                if(validPort()) {
110 5018a7f8 Adam Menz
                                        trackEvent(GoogleAnalytics.CATEGORY_LOAD_BALANCER, GoogleAnalytics.EVENT_UPDATED, "", -1);
111 b722cab3 Adam Menz
                                        new UpdateLoadBalancerTask().execute();
112 b722cab3 Adam Menz
                                } else {
113 b722cab3 Adam Menz
                                        showAlert("Error", "Must have a protocol port number that is between 1 and 65535.");
114 b722cab3 Adam Menz
                                }
115 4f9d1a69 Adam Menz
                        }
116 4f9d1a69 Adam Menz
                });
117 1b82ddb3 Adam Menz
                
118 4f9d1a69 Adam Menz
        }
119 b722cab3 Adam Menz
120 b722cab3 Adam Menz
        private boolean validPort(){
121 1b82ddb3 Adam Menz
                Log.d("info", "selectedPort is " + selectedPort);
122 1b82ddb3 Adam Menz
                try{
123 1b82ddb3 Adam Menz
                        return (!selectedPort.equals("")) && Integer.valueOf(selectedPort) > 0 && Integer.valueOf(selectedPort) < 65536;
124 1b82ddb3 Adam Menz
                } catch (NumberFormatException nfe){        
125 1b82ddb3 Adam Menz
                        return false;
126 1b82ddb3 Adam Menz
                }
127 b722cab3 Adam Menz
        }
128 4f9d1a69 Adam Menz
        
129 4f9d1a69 Adam Menz
        private void loadProtocolSpinner() {
130 4f9d1a69 Adam Menz
                protocolSpinner = (Spinner) findViewById(R.id.edit_protocol_spinner);
131 4f9d1a69 Adam Menz
                protocolSpinner.setOnItemSelectedListener(this);
132 4f9d1a69 Adam Menz
                String protocolNames[] = new String[Protocol.getProtocols().size()]; 
133 4f9d1a69 Adam Menz
                protocols = new Protocol[Protocol.getProtocols().size()];
134 4f9d1a69 Adam Menz
135 4f9d1a69 Adam Menz
                /*
136 4f9d1a69 Adam Menz
                 * set the spinner to the current value
137 4f9d1a69 Adam Menz
                 * so user doesnt have to remember
138 4f9d1a69 Adam Menz
                 */
139 4f9d1a69 Adam Menz
                int defaultPosition = 0;
140 b722cab3 Adam Menz
141 4f9d1a69 Adam Menz
                for(int i = 0; i < Protocol.getProtocols().size(); i++){
142 4f9d1a69 Adam Menz
                        protocols[i] = Protocol.getProtocols().get(i);
143 4f9d1a69 Adam Menz
                        protocolNames[i] = Protocol.getProtocols().get(i).getName();
144 b722cab3 Adam Menz
                        if(protocolNames[i].equals(selectedProtocol)){
145 4f9d1a69 Adam Menz
                                defaultPosition = i;
146 4f9d1a69 Adam Menz
                        }
147 4f9d1a69 Adam Menz
                }
148 4f9d1a69 Adam Menz
149 4f9d1a69 Adam Menz
                ArrayAdapter<String> protocolAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, protocolNames);
150 4f9d1a69 Adam Menz
                protocolAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
151 4f9d1a69 Adam Menz
                protocolSpinner.setAdapter(protocolAdapter);
152 4f9d1a69 Adam Menz
                protocolSpinner.setSelection(defaultPosition);
153 4f9d1a69 Adam Menz
        }
154 4f9d1a69 Adam Menz
155 4f9d1a69 Adam Menz
        private void loadAlgorithmSpinner() {
156 4f9d1a69 Adam Menz
                algorithmSpinner = (Spinner) findViewById(R.id.edit_algorithm_spinner);
157 4f9d1a69 Adam Menz
                algorithmSpinner.setOnItemSelectedListener(this);
158 4f9d1a69 Adam Menz
                String algorithmNames[] = new String[Algorithm.getAlgorithms().size()]; 
159 4f9d1a69 Adam Menz
                algorithms = new Algorithm[Algorithm.getAlgorithms().size()];
160 4f9d1a69 Adam Menz
161 4f9d1a69 Adam Menz
                /*
162 4f9d1a69 Adam Menz
                 * set the spinner to the current value
163 4f9d1a69 Adam Menz
                 * so user doesnt have to remember
164 4f9d1a69 Adam Menz
                 */
165 4f9d1a69 Adam Menz
                int defaultPosition = 0;
166 b722cab3 Adam Menz
167 4f9d1a69 Adam Menz
                for(int i = 0; i < Algorithm.getAlgorithms().size(); i++){
168 4f9d1a69 Adam Menz
                        algorithms[i] = Algorithm.getAlgorithms().get(i);
169 c4a37180 Adam Menz
                        algorithmNames[i] = getPrettyAlgoName(Algorithm.getAlgorithms().get(i).getName());
170 c4a37180 Adam Menz
                        if(algorithmNames[i].equals(getPrettyAlgoName(selectedAlgorithm))){
171 4f9d1a69 Adam Menz
                                defaultPosition = i;
172 4f9d1a69 Adam Menz
                        }
173 4f9d1a69 Adam Menz
                }
174 4f9d1a69 Adam Menz
175 4f9d1a69 Adam Menz
                ArrayAdapter<String> algorithmAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, algorithmNames);
176 4f9d1a69 Adam Menz
                algorithmAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
177 4f9d1a69 Adam Menz
                algorithmSpinner.setAdapter(algorithmAdapter);
178 4f9d1a69 Adam Menz
                algorithmSpinner.setSelection(defaultPosition);
179 4f9d1a69 Adam Menz
        }
180 c4a37180 Adam Menz
        
181 c4a37180 Adam Menz
        private String getPrettyAlgoName(String name){
182 c4a37180 Adam Menz
                if(name == null || name.length() == 0){
183 c4a37180 Adam Menz
                        return "";
184 c4a37180 Adam Menz
                } else {
185 c4a37180 Adam Menz
                        String result = name.charAt(0) + "";
186 c4a37180 Adam Menz
                        boolean previousWasSpace = false;;
187 c4a37180 Adam Menz
                        for(int i = 1; i < name.length(); i++){
188 c4a37180 Adam Menz
                                char curLetter = name.charAt(i);
189 c4a37180 Adam Menz
                                if(curLetter == '_'){
190 c4a37180 Adam Menz
                                        result += " ";
191 c4a37180 Adam Menz
                                        previousWasSpace = true;
192 c4a37180 Adam Menz
                                } else {
193 c4a37180 Adam Menz
                                        if(previousWasSpace){
194 c4a37180 Adam Menz
                                                result += Character.toUpperCase(curLetter);
195 c4a37180 Adam Menz
                                        } else {
196 c4a37180 Adam Menz
                                                result += Character.toLowerCase(curLetter);
197 c4a37180 Adam Menz
                                        }
198 c4a37180 Adam Menz
                                        previousWasSpace = false;
199 c4a37180 Adam Menz
                                }
200 c4a37180 Adam Menz
                        }
201 c4a37180 Adam Menz
                        return result;
202 c4a37180 Adam Menz
                }
203 c4a37180 Adam Menz
        }
204 b722cab3 Adam Menz
205 4f9d1a69 Adam Menz
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
206 4f9d1a69 Adam Menz
                if (parent == protocolSpinner) {
207 71e52c4a Adam Menz
                        selectedProtocol = Protocol.getProtocols().get(position).getName();
208 b722cab3 Adam Menz
                }
209 b722cab3 Adam Menz
                
210 4f9d1a69 Adam Menz
                else if (parent == algorithmSpinner){
211 b722cab3 Adam Menz
                        selectedAlgorithm = algorithms[position].getName();
212 4f9d1a69 Adam Menz
                }
213 4f9d1a69 Adam Menz
        }
214 4f9d1a69 Adam Menz
215 4f9d1a69 Adam Menz
        public void onNothingSelected(AdapterView<?> parent) {
216 4f9d1a69 Adam Menz
217 4f9d1a69 Adam Menz
        }
218 4f9d1a69 Adam Menz
219 4f9d1a69 Adam Menz
        private class UpdateLoadBalancerTask extends AsyncTask<Void, Void, HttpBundle> {
220 4f9d1a69 Adam Menz
221 4f9d1a69 Adam Menz
                private CloudServersException exception;
222 4f9d1a69 Adam Menz
223 4f9d1a69 Adam Menz
                @Override
224 4f9d1a69 Adam Menz
                protected void onPreExecute(){
225 4f9d1a69 Adam Menz
                        showDialog();
226 4f9d1a69 Adam Menz
                }
227 4f9d1a69 Adam Menz
228 4f9d1a69 Adam Menz
                @Override
229 4f9d1a69 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
230 4f9d1a69 Adam Menz
                        HttpBundle bundle = null;        
231 4f9d1a69 Adam Menz
                        try {
232 b722cab3 Adam Menz
                                bundle = (new LoadBalancerManager(getContext())).update(loadBalancer, name.getText().toString(), selectedAlgorithm, 
233 b722cab3 Adam Menz
                                                selectedProtocol, portText.getText().toString());
234 4f9d1a69 Adam Menz
                        } catch (CloudServersException e) {
235 4f9d1a69 Adam Menz
                                exception = e;
236 4f9d1a69 Adam Menz
                        }
237 4f9d1a69 Adam Menz
                        return bundle;
238 4f9d1a69 Adam Menz
                }
239 4f9d1a69 Adam Menz
240 4f9d1a69 Adam Menz
                @Override
241 4f9d1a69 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
242 b722cab3 Adam Menz
                        hideDialog();
243 4f9d1a69 Adam Menz
                        HttpResponse response = bundle.getResponse();
244 4f9d1a69 Adam Menz
                        if (response != null) {
245 4f9d1a69 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();                        
246 4f9d1a69 Adam Menz
                                if(statusCode == 202){
247 4f9d1a69 Adam Menz
                                        setResult(RESULT_OK);
248 4f9d1a69 Adam Menz
                                        finish();
249 4f9d1a69 Adam Menz
                                }
250 4f9d1a69 Adam Menz
                                else{
251 4f9d1a69 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
252 4f9d1a69 Adam Menz
                                        if ("".equals(cse.getMessage())) {
253 b722cab3 Adam Menz
                                                showError("There was a problem updating your load balancer.", bundle);
254 4f9d1a69 Adam Menz
                                        } else {
255 b722cab3 Adam Menz
                                                showError("There was a problem updating your load balancer: " + cse.getMessage(), bundle);
256 4f9d1a69 Adam Menz
                                        }                                        
257 4f9d1a69 Adam Menz
                                }
258 4f9d1a69 Adam Menz
                        } else if (exception != null) {
259 b722cab3 Adam Menz
                                showError("There was a problem updating your load balancer: " + exception.getMessage(), bundle);
260 4f9d1a69 Adam Menz
261 4f9d1a69 Adam Menz
                        }
262 4f9d1a69 Adam Menz
263 4f9d1a69 Adam Menz
                }
264 4f9d1a69 Adam Menz
        }
265 1b82ddb3 Adam Menz
        
266 1b82ddb3 Adam Menz
        
267 1b82ddb3 Adam Menz
        /*
268 1b82ddb3 Adam Menz
         * for testing purposes
269 1b82ddb3 Adam Menz
         */
270 1b82ddb3 Adam Menz
        @SuppressWarnings("unused")
271 1b82ddb3 Adam Menz
        private void setSelectedPort(String s){
272 1b82ddb3 Adam Menz
                selectedPort = s;
273 1b82ddb3 Adam Menz
        }
274 1b82ddb3 Adam Menz
        
275 1b82ddb3 Adam Menz
        @SuppressWarnings("unused")
276 1b82ddb3 Adam Menz
        private String getSelectedProtocol(){
277 1b82ddb3 Adam Menz
                return selectedProtocol;
278 1b82ddb3 Adam Menz
        }
279 1b82ddb3 Adam Menz
        
280 1b82ddb3 Adam Menz
        @SuppressWarnings("unused")
281 1b82ddb3 Adam Menz
        private String getSelectedAlgorithm(){
282 1b82ddb3 Adam Menz
                return selectedAlgorithm;
283 1b82ddb3 Adam Menz
        }
284 1b82ddb3 Adam Menz
        
285 4f9d1a69 Adam Menz
}