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