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 | } |