Revision 01340459 src/com/rackspacecloud/android/AddNodesActivity.java
b/src/com/rackspacecloud/android/AddNodesActivity.java | ||
---|---|---|
10 | 10 |
import android.content.Intent; |
11 | 11 |
import android.os.AsyncTask; |
12 | 12 |
import android.os.Bundle; |
13 |
import android.util.Log; |
|
13 | 14 |
import android.view.LayoutInflater; |
14 | 15 |
import android.view.View; |
15 | 16 |
import android.view.View.OnClickListener; |
... | ... | |
28 | 29 |
private static final int ADD_NODE_CODE = 178; |
29 | 30 |
private static final int ADD_EXTERNAL_NODE_CODE = 188; |
30 | 31 |
|
32 |
//servers are what are displayed in the ListView |
|
31 | 33 |
private ArrayList<Server> servers; |
32 |
private int lastCheckedPos;
|
|
34 |
//nodes are the nodes the user has selected
|
|
33 | 35 |
private ArrayList<Node> nodes; |
36 |
private int lastCheckedPos; |
|
34 | 37 |
|
35 | 38 |
@SuppressWarnings("unchecked") |
36 | 39 |
@Override |
... | ... | |
89 | 92 |
@Override |
90 | 93 |
public void onClick(View v) { |
91 | 94 |
Intent viewIntent = new Intent(getContext(), AddExternalNodeActivity.class); |
95 |
//when first creating a load balancer |
|
96 |
//weighting nodes in not an option |
|
92 | 97 |
viewIntent.putExtra("weighted", false); |
93 | 98 |
startActivityForResult(viewIntent, ADD_EXTERNAL_NODE_CODE); |
94 | 99 |
} |
... | ... | |
101 | 106 |
finish(); |
102 | 107 |
} |
103 | 108 |
|
109 |
protected void onListItemClick(ListView l, View v, int position, long id) { |
|
110 |
if (servers != null && servers.size() > 0) { |
|
111 |
LinearLayout linear = (LinearLayout) findViewById(R.id.nodes_linear_layout); |
|
112 |
ListView serversList = (ListView) linear.findViewById(android.R.id.list); |
|
113 |
View row = serversList.getChildAt(position); |
|
114 |
CheckBox checkBox = (CheckBox)row.findViewById(R.id.add_node_checkbox); |
|
115 |
if(!checkBox.isChecked()){ |
|
116 |
//if the checkbox was not previously checked, treat the listItemClick |
|
117 |
//the same as checking the checkbox |
|
118 |
checkBox.setChecked(!checkBox.isChecked()); |
|
119 |
} else { |
|
120 |
//if the checkbox was already checked when the listItemClick occurred, |
|
121 |
//then treat it like an edit |
|
122 |
|
|
123 |
Server server = servers.get(position); |
|
124 |
|
|
125 |
//Need to put all the ip's of the server into one |
|
126 |
//list so they can all be displayed in one spinner |
|
127 |
String[] ipAddresses = getAllIpsOfServer(server); |
|
128 |
|
|
129 |
Node node = getNodeFromServer(server); |
|
130 |
|
|
131 |
lastCheckedPos = position; |
|
132 |
Intent viewIntent = new Intent(getContext(), AddNodeActivity.class); |
|
133 |
viewIntent.putExtra("ipAddresses", ipAddresses); |
|
134 |
viewIntent.putExtra("name", server.getName()); |
|
135 |
if(node != null){ |
|
136 |
viewIntent.putExtra("node", node); |
|
137 |
} |
|
138 |
//weighted is false, because on initial node add |
|
139 |
//weight is not option |
|
140 |
viewIntent.putExtra("weighted", false); |
|
141 |
startActivityForResult(viewIntent, ADD_NODE_CODE); |
|
142 |
} |
|
143 |
|
|
144 |
} |
|
145 |
} |
|
146 |
|
|
104 | 147 |
private void displayNoServersCell() { |
105 | 148 |
String a[] = new String[1]; |
106 | 149 |
a[0] = "No Nodes"; |
... | ... | |
137 | 180 |
new LoadServersTask().execute((Void[]) null); |
138 | 181 |
} |
139 | 182 |
|
140 |
private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> { |
|
141 |
private CloudServersException exception; |
|
142 |
|
|
143 |
@Override |
|
144 |
protected void onPreExecute(){ |
|
145 |
showDialog(); |
|
146 |
} |
|
147 |
|
|
148 |
@Override |
|
149 |
protected ArrayList<Server> doInBackground(Void... arg0) { |
|
150 |
ArrayList<Server> servers = null; |
|
151 |
try { |
|
152 |
servers = (new ServerManager()).createList(true, getContext()); |
|
153 |
} catch (CloudServersException e) { |
|
154 |
exception = e; |
|
155 |
} |
|
156 |
return servers; |
|
157 |
} |
|
158 |
|
|
159 |
@Override |
|
160 |
protected void onPostExecute(ArrayList<Server> result) { |
|
161 |
hideDialog(); |
|
162 |
if (exception != null) { |
|
163 |
showAlert("Error", exception.getMessage()); |
|
164 |
} |
|
165 |
|
|
166 |
//Add the external nodes |
|
167 |
for(int i = 0; i < nodes.size(); i++){ |
|
168 |
if(nodes.get(i).getName().equals("External Node")){ |
|
169 |
Server server = new Server(); |
|
170 |
server.setName("External Node"); |
|
171 |
String[] ip = {nodes.get(i).getAddress()}; |
|
172 |
server.setPrivateIpAddresses(ip); |
|
173 |
result.add(server); |
|
174 |
} |
|
175 |
} |
|
176 |
setServerList(result); |
|
177 |
} |
|
178 |
} |
|
179 |
|
|
180 | 183 |
// * Adapter/ |
181 | 184 |
class ServerAdapter extends ArrayAdapter<Server> { |
182 | 185 |
ServerAdapter() { |
... | ... | |
199 | 202 |
sublabel.setText(server.getFlavor().getName() + " - " + server.getImage().getName()); |
200 | 203 |
} |
201 | 204 |
|
202 |
String[] publicIp = server.getPublicIpAddresses(); |
|
203 |
String[] privateIp = server.getPrivateIpAddresses(); |
|
204 | 205 |
|
205 |
if(publicIp == null){ |
|
206 |
publicIp = new String[0]; |
|
207 |
} |
|
208 |
|
|
209 |
if(privateIp == null){ |
|
210 |
privateIp = new String[0]; |
|
211 |
} |
|
212 |
|
|
213 |
final String[] ipAddresses = new String[privateIp.length + publicIp.length]; |
|
214 |
for(int i = 0; i < privateIp.length; i++){ |
|
215 |
ipAddresses[i] = privateIp[i]; |
|
216 |
} |
|
217 |
for(int i = 0; i < publicIp.length; i++){ |
|
218 |
ipAddresses[i+privateIp.length] = publicIp[i]; |
|
219 |
} |
|
206 |
//Need to put all the ip's of the server into one |
|
207 |
//list so they can all be displayed in one spinner |
|
208 |
final String[] ipAddresses = getAllIpsOfServer(server); |
|
220 | 209 |
|
221 | 210 |
final int pos = position; |
222 | 211 |
CheckBox add = (CheckBox) row.findViewById(R.id.add_node_checkbox); |
... | ... | |
252 | 241 |
return(row); |
253 | 242 |
} |
254 | 243 |
|
244 |
//returns true if an ip from server |
|
245 |
//is the address of one of the nodes |
|
255 | 246 |
private boolean inNodeList(Server server){ |
256 | 247 |
for(Node node : nodes){ |
257 | 248 |
String nodeIp = node.getAddress(); |
... | ... | |
286 | 277 |
return ""; |
287 | 278 |
} |
288 | 279 |
|
280 |
//returns true if address is an address of |
|
281 |
//one of the users cloud servers |
|
289 | 282 |
private boolean isCloudServerIp(String address){ |
290 | 283 |
for(Server s : servers){ |
291 | 284 |
if(serverHasIp(s, address)){ |
... | ... | |
295 | 288 |
return false; |
296 | 289 |
} |
297 | 290 |
|
291 |
//returns true if address is one of server's addresses |
|
298 | 292 |
private boolean serverHasIp(Server server, String address){ |
299 | 293 |
String[] addresses = server.getPrivateIpAddresses(); |
300 | 294 |
if(addresses != null){ |
... | ... | |
315 | 309 |
return false; |
316 | 310 |
} |
317 | 311 |
|
312 |
//returns the node that is using an ip from server |
|
313 |
private Node getNodeFromServer(Server server){ |
|
314 |
for(Node node : nodes){ |
|
315 |
if(serverHasIp(server, node.getAddress())){ |
|
316 |
return node; |
|
317 |
} |
|
318 |
} |
|
319 |
return null; |
|
320 |
} |
|
321 |
|
|
322 |
//returns an array of all the ip's of server |
|
323 |
private String[] getAllIpsOfServer(Server server){ |
|
324 |
String[] publicIp = server.getPublicIpAddresses(); |
|
325 |
String[] privateIp = server.getPrivateIpAddresses(); |
|
326 |
if(publicIp == null){ |
|
327 |
publicIp = new String[0]; |
|
328 |
} |
|
329 |
if(privateIp == null){ |
|
330 |
privateIp = new String[0]; |
|
331 |
} |
|
332 |
String[] ipAddresses = new String[privateIp.length + publicIp.length]; |
|
333 |
for(int i = 0; i < privateIp.length; i++){ |
|
334 |
ipAddresses[i] = privateIp[i]; |
|
335 |
} |
|
336 |
for(int i = 0; i < publicIp.length; i++){ |
|
337 |
ipAddresses[i+privateIp.length] = publicIp[i]; |
|
338 |
} |
|
339 |
|
|
340 |
return ipAddresses; |
|
341 |
} |
|
342 |
|
|
343 |
private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> { |
|
344 |
private CloudServersException exception; |
|
345 |
|
|
346 |
@Override |
|
347 |
protected void onPreExecute(){ |
|
348 |
showDialog(); |
|
349 |
} |
|
350 |
|
|
351 |
@Override |
|
352 |
protected ArrayList<Server> doInBackground(Void... arg0) { |
|
353 |
ArrayList<Server> servers = null; |
|
354 |
try { |
|
355 |
servers = (new ServerManager()).createList(true, getContext()); |
|
356 |
} catch (CloudServersException e) { |
|
357 |
exception = e; |
|
358 |
} |
|
359 |
return servers; |
|
360 |
} |
|
361 |
|
|
362 |
@Override |
|
363 |
protected void onPostExecute(ArrayList<Server> result) { |
|
364 |
hideDialog(); |
|
365 |
if (exception != null) { |
|
366 |
showAlert("Error", exception.getMessage()); |
|
367 |
} |
|
368 |
|
|
369 |
//Add the external nodes |
|
370 |
for(int i = 0; i < nodes.size(); i++){ |
|
371 |
if(nodes.get(i).getName().equals("External Node")){ |
|
372 |
Server server = new Server(); |
|
373 |
server.setName("External Node"); |
|
374 |
String[] ip = {nodes.get(i).getAddress()}; |
|
375 |
server.setPrivateIpAddresses(ip); |
|
376 |
result.add(server); |
|
377 |
} |
|
378 |
} |
|
379 |
setServerList(result); |
|
380 |
} |
|
381 |
} |
|
382 |
|
|
318 | 383 |
protected void onActivityResult(int requestCode, int resultCode, Intent data){ |
319 | 384 |
int pos = lastCheckedPos; |
320 | 385 |
if(requestCode == ADD_NODE_CODE && resultCode == RESULT_OK){ |
321 |
Node node = new Node(); |
|
322 |
node.setAddress(data.getStringExtra("nodeIp")); |
|
323 |
node.setCondition(data.getStringExtra("nodeCondition")); |
|
324 |
node.setName(servers.get(pos).getName()); |
|
325 |
node.setPort(data.getStringExtra("nodePort")); |
|
326 |
node.setWeight(data.getStringExtra("nodeWeight")); |
|
327 |
nodes.add(node); |
|
386 |
//data will be null is user back out on edit |
|
387 |
//we dont need to do anything then |
|
388 |
//if new node added data won't be null |
|
389 |
//so create the new node and add it to the list |
|
390 |
if(data != null){ |
|
391 |
Node node = new Node(); |
|
392 |
node.setAddress(data.getStringExtra("nodeIp")); |
|
393 |
node.setCondition(data.getStringExtra("nodeCondition")); |
|
394 |
node.setName(servers.get(pos).getName()); |
|
395 |
node.setPort(data.getStringExtra("nodePort")); |
|
396 |
node.setWeight(data.getStringExtra("nodeWeight")); |
|
397 |
nodes.add(node); |
|
398 |
} |
|
328 | 399 |
} |
329 | 400 |
else if(requestCode == ADD_NODE_CODE && resultCode == RESULT_CANCELED){ |
330 | 401 |
//uncheck the node at lastCheckedPos |
... | ... | |
361 | 432 |
+ "\", please select it from the list."); |
362 | 433 |
} |
363 | 434 |
} |
435 |
Log.d("info", "number of nodes is " + nodes.size()); |
|
364 | 436 |
} |
365 | 437 |
|
366 | 438 |
|
Also available in: Unified diff