Revision 96a8e632 src/com/rackspacecloud/android/AddNodesActivity.java
b/src/com/rackspacecloud/android/AddNodesActivity.java | ||
---|---|---|
1 | 1 |
package com.rackspacecloud.android; |
2 | 2 |
|
3 | 3 |
import java.util.ArrayList; |
4 |
import java.util.Arrays; |
|
4 | 5 |
|
6 |
import com.rackspace.cloud.loadbalancer.api.client.Node; |
|
7 |
import com.rackspace.cloud.servers.api.client.Account; |
|
5 | 8 |
import com.rackspace.cloud.servers.api.client.CloudServersException; |
6 | 9 |
import com.rackspace.cloud.servers.api.client.Server; |
7 | 10 |
import com.rackspace.cloud.servers.api.client.ServerManager; |
... | ... | |
11 | 14 |
import android.app.ProgressDialog; |
12 | 15 |
import android.content.Context; |
13 | 16 |
import android.content.DialogInterface; |
17 |
import android.content.Intent; |
|
14 | 18 |
import android.os.AsyncTask; |
15 | 19 |
import android.os.Bundle; |
20 |
import android.util.Log; |
|
16 | 21 |
import android.view.LayoutInflater; |
17 | 22 |
import android.view.View; |
18 | 23 |
import android.view.ViewGroup; |
19 | 24 |
import android.view.WindowManager; |
20 | 25 |
import android.view.ViewGroup.LayoutParams; |
21 | 26 |
import android.widget.ArrayAdapter; |
27 |
import android.widget.CheckBox; |
|
28 |
import android.widget.CompoundButton; |
|
29 |
import android.widget.ListView; |
|
30 |
import android.widget.CompoundButton.OnCheckedChangeListener; |
|
22 | 31 |
import android.widget.ImageView; |
23 | 32 |
import android.widget.ProgressBar; |
24 | 33 |
import android.widget.TextView; |
25 | 34 |
|
26 | 35 |
public class AddNodesActivity extends ListActivity { |
27 |
|
|
36 |
|
|
37 |
private static final int ADD_NODE_CODE = 178; |
|
28 | 38 |
private Server[] servers; |
29 | 39 |
private Context context; |
40 |
private int lastCheckedPos; |
|
41 |
private ArrayList<Node> nodes; |
|
30 | 42 |
ProgressDialog pDialog; |
31 |
|
|
43 |
|
|
32 | 44 |
@Override |
33 | 45 |
public void onCreate(Bundle savedInstanceState) { |
34 | 46 |
super.onCreate(savedInstanceState); |
... | ... | |
36 | 48 |
restoreState(savedInstanceState); |
37 | 49 |
} |
38 | 50 |
|
51 |
@Override |
|
52 |
protected void onSaveInstanceState(Bundle outState) { |
|
53 |
super.onSaveInstanceState(outState); |
|
54 |
outState.putSerializable("nodes", nodes); |
|
55 |
} |
|
56 |
|
|
39 | 57 |
private void restoreState(Bundle state) { |
40 | 58 |
context = getApplicationContext(); |
59 |
|
|
60 |
if (state != null && state.containsKey("node")){ |
|
61 |
nodes = (ArrayList<Node>) state.getSerializable("nodes"); |
|
62 |
if(nodes == null){ |
|
63 |
nodes = new ArrayList<Node>(); |
|
64 |
} |
|
65 |
} |
|
66 |
else{ |
|
67 |
nodes = new ArrayList<Node>(); |
|
68 |
} |
|
69 |
|
|
41 | 70 |
if (state != null && state.containsKey("server")) { |
42 | 71 |
servers = (Server[]) state.getSerializable("servers"); |
43 | 72 |
if (servers.length == 0) { |
... | ... | |
50 | 79 |
loadServers(); |
51 | 80 |
} |
52 | 81 |
} |
53 |
|
|
54 |
private void displayNoServersCell() {
|
|
55 |
String a[] = new String[1];
|
|
56 |
a[0] = "No Servers";
|
|
57 |
setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a));
|
|
58 |
getListView().setTextFilterEnabled(true);
|
|
59 |
getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
|
|
60 |
getListView().setItemsCanFocus(false);
|
|
61 |
}
|
|
62 |
|
|
82 |
|
|
83 |
private void displayNoServersCell() { |
|
84 |
String a[] = new String[1]; |
|
85 |
a[0] = "No Servers"; |
|
86 |
setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a));
|
|
87 |
getListView().setTextFilterEnabled(true);
|
|
88 |
getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
|
|
89 |
getListView().setItemsCanFocus(false);
|
|
90 |
} |
|
91 |
|
|
63 | 92 |
private void setServerList(ArrayList<Server> servers) { |
64 |
if (servers == null) {
|
|
65 |
servers = new ArrayList<Server>();
|
|
66 |
}
|
|
67 |
String[] serverNames = new String[servers.size()];
|
|
68 |
this.servers = new Server[servers.size()];
|
|
69 |
|
|
93 |
if (servers == null) {
|
|
94 |
servers = new ArrayList<Server>();
|
|
95 |
}
|
|
96 |
String[] serverNames = new String[servers.size()];
|
|
97 |
this.servers = new Server[servers.size()];
|
|
98 |
|
|
70 | 99 |
if (servers != null) { |
71 | 100 |
for (int i = 0; i < servers.size(); i++) { |
72 | 101 |
Server server = servers.get(i); |
... | ... | |
74 | 103 |
serverNames[i] = server.getName(); |
75 | 104 |
} |
76 | 105 |
} |
77 |
|
|
106 |
|
|
78 | 107 |
if (serverNames.length == 0) { |
79 | 108 |
displayNoServersCell(); |
80 | 109 |
} else { |
81 | 110 |
getListView().setDividerHeight(1); // restore divider lines |
82 | 111 |
setListAdapter(new ServerAdapter()); |
83 | 112 |
} |
84 |
}
|
|
85 |
|
|
113 |
}
|
|
114 |
|
|
86 | 115 |
private void loadServers() { |
87 | 116 |
new LoadServersTask().execute((Void[]) null); |
88 | 117 |
} |
89 |
|
|
118 |
|
|
90 | 119 |
protected void showDialog() { |
91 | 120 |
pDialog = new ProgressDialog(this, R.style.NewDialog); |
92 | 121 |
// // Set blur to background |
... | ... | |
108 | 137 |
} }); |
109 | 138 |
alert.show(); |
110 | 139 |
} |
111 |
|
|
140 |
|
|
112 | 141 |
private class LoadServersTask extends AsyncTask<Void, Void, ArrayList<Server>> { |
113 |
private CloudServersException exception;
|
|
114 |
|
|
115 |
@Override
|
|
142 |
private CloudServersException exception;
|
|
143 |
|
|
144 |
@Override
|
|
116 | 145 |
protected void onPreExecute(){ |
117 | 146 |
showDialog(); |
118 | 147 |
} |
119 |
|
|
148 |
|
|
120 | 149 |
@Override |
121 | 150 |
protected ArrayList<Server> doInBackground(Void... arg0) { |
122 | 151 |
ArrayList<Server> servers = null; |
... | ... | |
128 | 157 |
pDialog.dismiss(); |
129 | 158 |
return servers; |
130 | 159 |
} |
131 |
|
|
160 |
|
|
132 | 161 |
@Override |
133 | 162 |
protected void onPostExecute(ArrayList<Server> result) { |
134 | 163 |
if (exception != null) { |
... | ... | |
136 | 165 |
} |
137 | 166 |
setServerList(result); |
138 | 167 |
} |
139 |
}
|
|
140 |
|
|
168 |
}
|
|
169 |
|
|
141 | 170 |
// * Adapter/ |
142 | 171 |
class ServerAdapter extends ArrayAdapter<Server> { |
143 | 172 |
ServerAdapter() { |
144 | 173 |
super(AddNodesActivity.this, R.layout.listservernodecell, servers); |
145 | 174 |
} |
146 |
|
|
175 |
|
|
147 | 176 |
public View getView(int position, View convertView, ViewGroup parent) { |
148 |
|
|
177 |
|
|
149 | 178 |
Server server = servers[position]; |
150 | 179 |
LayoutInflater inflater = getLayoutInflater(); |
151 |
View row = inflater.inflate(R.layout.listservercell, parent, false); |
|
180 |
View row = inflater.inflate(R.layout.listservernodecell, parent, false);
|
|
152 | 181 |
|
153 | 182 |
TextView label = (TextView) row.findViewById(R.id.label); |
154 | 183 |
label.setText(server.getName()); |
155 |
|
|
184 |
|
|
156 | 185 |
TextView sublabel = (TextView) row.findViewById(R.id.sublabel); |
157 | 186 |
sublabel.setText(server.getFlavor().getName() + " - " + server.getImage().getName()); |
158 |
|
|
187 |
|
|
159 | 188 |
ImageView icon = (ImageView) row.findViewById(R.id.icon); |
160 | 189 |
icon.setImageResource(server.getImage().iconResourceId()); |
161 | 190 |
|
191 |
String[] publicIp = server.getPublicIpAddresses(); |
|
192 |
String[] privateIp = server.getPrivateIpAddresses(); |
|
193 |
|
|
194 |
/* |
|
195 |
final String[] ipAddresses = new String[privateIp.length + publicIp.length]; |
|
196 |
for(int i = 0; i < privateIp.length; i++){ |
|
197 |
ipAddresses[i] = privateIp[i]; |
|
198 |
} |
|
199 |
for(int i = 0; i < publicIp.length; i++){ |
|
200 |
ipAddresses[i+privateIp.length] = publicIp[i]; |
|
201 |
} |
|
202 |
|
|
203 |
Log.d("info", "The lenght 1 is " + ipAddresses.length); |
|
204 |
|
|
205 |
final int pos = position; |
|
206 |
CheckBox add = (CheckBox) row.findViewById(R.id.add_node_checkbox); |
|
207 |
add.setOnCheckedChangeListener(new OnCheckedChangeListener() { |
|
208 |
|
|
209 |
@Override |
|
210 |
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
|
211 |
if(isChecked){ |
|
212 |
lastCheckedPos = pos; |
|
213 |
Intent viewIntent = new Intent(context, AddNodeActivity.class); |
|
214 |
viewIntent.putExtra("ipAddresses", ipAddresses); |
|
215 |
startActivityForResult(viewIntent, ADD_NODE_CODE); |
|
216 |
} |
|
217 |
else{ |
|
218 |
removeNodeFromList(server[pos]); |
|
219 |
} |
|
220 |
|
|
221 |
} |
|
222 |
}); |
|
223 |
*/ |
|
162 | 224 |
return(row); |
163 | 225 |
} |
164 | 226 |
} |
165 | 227 |
|
228 |
@Override |
|
229 |
protected void onListItemClick(ListView l, View v, int position, long id) { |
|
230 |
|
|
231 |
Log.d("info", "captin clicked"); |
|
232 |
|
|
233 |
Server server = servers[position]; |
|
234 |
LayoutInflater inflater = getLayoutInflater(); |
|
235 |
View row = inflater.inflate(R.layout.listservernodecell, l, false); |
|
236 |
|
|
237 |
String[] publicIp = server.getPublicIpAddresses(); |
|
238 |
String[] privateIp = server.getPrivateIpAddresses(); |
|
239 |
|
|
240 |
|
|
241 |
final String[] ipAddresses = new String[privateIp.length + publicIp.length]; |
|
242 |
for(int i = 0; i < privateIp.length; i++){ |
|
243 |
ipAddresses[i] = privateIp[i]; |
|
244 |
} |
|
245 |
for(int i = 0; i < publicIp.length; i++){ |
|
246 |
ipAddresses[i+privateIp.length] = publicIp[i]; |
|
247 |
} |
|
248 |
|
|
249 |
|
|
250 |
CheckBox add = (CheckBox) row.findViewById(R.id.add_node_checkbox); |
|
251 |
|
|
252 |
Log.d("info", "captin the checkbox is checked: " + add.isChecked()); |
|
253 |
add.setChecked(!add.isChecked()); |
|
254 |
Log.d("info", "captin the checkbox is checked: " + add.isChecked()); |
|
255 |
|
|
256 |
if(add.isChecked()){ |
|
257 |
lastCheckedPos = position; |
|
258 |
Intent viewIntent = new Intent(context, AddNodeActivity.class); |
|
259 |
viewIntent.putExtra("ipAddresses", ipAddresses); |
|
260 |
startActivityForResult(viewIntent, ADD_NODE_CODE); |
|
261 |
} |
|
262 |
else{ |
|
263 |
removeNodeFromList(server); |
|
264 |
} |
|
265 |
} |
|
266 |
|
|
267 |
|
|
268 |
/* |
|
269 |
* need to remove by id because that is |
|
270 |
* what is unique |
|
271 |
*/ |
|
272 |
private void removeNodeFromList(Server server){ |
|
273 |
for(int i = 0; i < nodes.size(); i++){ |
|
274 |
Node node = nodes.get(i); |
|
275 |
if(serverHasIp(server, node.getAddress())){ |
|
276 |
nodes.remove(i); |
|
277 |
break; |
|
278 |
} |
|
279 |
} |
|
280 |
} |
|
166 | 281 |
|
282 |
private boolean serverHasIp(Server server, String address){ |
|
283 |
String[] addresses = server.getPrivateIpAddresses(); |
|
284 |
for(int i = 0; i < addresses.length; i++){ |
|
285 |
if(addresses[i].equals(address)){ |
|
286 |
return true; |
|
287 |
} |
|
288 |
} |
|
289 |
addresses = server.getPublicIpAddresses(); |
|
290 |
for(int i = 0; i < addresses.length; i++){ |
|
291 |
if(addresses[i].equals(address)){ |
|
292 |
return true; |
|
293 |
} |
|
294 |
} |
|
295 |
return false; |
|
296 |
} |
|
297 |
|
|
298 |
protected void onActivityResult(int requestCode, int resultCode, Intent data){ |
|
299 |
if(requestCode == ADD_NODE_CODE && resultCode == 111){ |
|
300 |
int pos = lastCheckedPos; |
|
301 |
Node node = new Node(); |
|
302 |
node.setAddress(data.getStringExtra("nodeIp")); |
|
303 |
node.setCondition(data.getStringExtra("nodeCondition")); |
|
304 |
node.setName(servers[pos].getName()); |
|
305 |
node.setPort(data.getStringExtra("nodePort")); |
|
306 |
nodes.add(node); |
|
307 |
} |
|
308 |
else if(requestCode == ADD_NODE_CODE && resultCode == 112){ |
|
309 |
//Node not added so do thing |
|
310 |
} |
|
311 |
} |
|
312 |
|
|
167 | 313 |
|
168 | 314 |
} |
Also available in: Unified diff