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