Revision 01340459 src/com/rackspacecloud/android/AddLoadBalancerActivity.java

b/src/com/rackspacecloud/android/AddLoadBalancerActivity.java
20 20
import android.os.Bundle;
21 21
import android.text.Editable;
22 22
import android.text.TextWatcher;
23
import android.util.Log;
24 23
import android.view.View;
25 24
import android.view.View.OnClickListener;
26 25
import android.widget.AdapterView;
......
33 32

  
34 33
public class AddLoadBalancerActivity extends CloudActivity implements OnItemSelectedListener {
35 34

  
36
	//TODO Shared Virtual IP (not in API though?)
37 35
	private static final String[] VIP_TYPES = {"Public", "ServiceNet", "Shared"};
38 36

  
39 37
	private static final int ADD_NODES_ACTIVITY_CODE = 165;
40 38
	private static final int SHARED_VIP_ACTIVITY_CODE = 235;
41 39

  
40
	private ArrayList<Node> nodes;
41
	private LoadBalancer loadBalancer;
42 42
	private Protocol[] protocols;
43 43
	private Protocol selectedProtocol;
44 44
	private Algorithm[] algorithms;
45 45
	private Algorithm selectedAlgorithm;
46 46
	private VirtualIp selectedVip;
47
	private EditText portEditText;
47 48
	private Spinner protocolSpinner;
49
	private Spinner protocolSubSpinner;
48 50
	private Spinner algorithmSpinner;
49 51
	private Spinner vipSpinner;
50 52
	private Spinner regionSpinner;
51 53
	private Button selectVipButton;
52 54
	private Button selectNodesButton;
53
	private EditText portEditText;
54 55
	private String selectedVipType;
55 56
	private String selectedRegion;
56 57
	private String selectedName;
57 58
	private String selectedPort;
58
	private ArrayList<Node> nodes;
59
	private LoadBalancer loadBalancer;
60 59

  
61 60
	@Override
62 61
	public void onCreate(Bundle savedInstanceState) {
......
75 74
		else{
76 75
			nodes = new ArrayList<Node>();
77 76
		}
78
		setUpButtons();
77

  
79 78
		setupText();
80 79
		loadProtocolSpinner();
80
		loadProtocolSubSpinner();
81 81
		loadAlgorithmSpinner();
82 82
		loadVipSpinner();
83 83
		loadRegionSpinner();
84
		setUpButtons();
84 85
	}
85 86

  
86 87
	@Override
......
91 92

  
92 93
	public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
93 94
		if (parent == protocolSpinner) {
94
			selectedProtocol = protocols[position];
95
			//portText.setText(protocols[position].getDefaultPort());
96
		} 
97
		else if (parent == algorithmSpinner){
95
			TableRow customProtocol = (TableRow)findViewById(R.id.custom_protocol_row);
96
			if(position < protocols.length){
97
				selectedProtocol = protocols[position];
98
				selectedPort = protocols[position].getDefaultPort();
99
				customProtocol.setVisibility(View.GONE);
100
			} else {
101
				customProtocol.setVisibility(View.VISIBLE);
102
			}
103
			updateVipIndicatorLight();
104
		} else if (parent == algorithmSpinner){
98 105
			selectedAlgorithm = algorithms[position];
99
		}
100
		else if (parent == vipSpinner){
106
		} else if (parent == vipSpinner){
101 107
			selectedVipType = VIP_TYPES[position];
102 108
			if(VIP_TYPES[position].equals("Shared")){
103 109
				((TableRow) findViewById(R.id.select_vip_layout)).setVisibility(View.VISIBLE);
104 110
			} else {
105 111
				((TableRow) findViewById(R.id.select_vip_layout)).setVisibility(View.GONE);
106 112
			}
107
		}
108
		else if (parent == regionSpinner){
113
			updateVipIndicatorLight();
114
		} else if (parent == regionSpinner){
109 115
			selectedRegion = Account.getAccount().getLoadBalancerRegions()[position];
110 116
			updateVipIndicatorLight();
117
		} else if (parent == protocolSubSpinner){
118
			selectedProtocol = protocols[position];
119
			updateVipIndicatorLight();
111 120
		}
112 121
	}
113 122

  
114 123
	public void onNothingSelected(AdapterView<?> parent) {
115 124

  
116 125
	}
117
 
126

  
118 127
	private void setUpButtons(){
119 128
		selectVipButton = (Button) findViewById(R.id.selected_shared_vip);
120 129
		updateVipIndicatorLight();
......
122 131
			@Override
123 132
			public void onClick(View v) {
124 133
				Intent viewIntent = new Intent(getApplicationContext(), SharedVipActivity.class);
125
				viewIntent.putExtra("loadBalancerPort", ((EditText)findViewById(R.id.edit_port_text)).getText().toString());
134
				viewIntent.putExtra("loadBalancerPort", selectedPort);
126 135
				viewIntent.putExtra("loadBalancerRegion", selectedRegion);
136
				viewIntent.putExtra("selectedVip", selectedVip);
127 137
				startActivityForResult(viewIntent, SHARED_VIP_ACTIVITY_CODE);				
128 138
			}
129 139
		});
130 140
		((TableRow) findViewById(R.id.select_vip_layout)).setVisibility(View.GONE);
131
		
141

  
132 142
		selectNodesButton = (Button) findViewById(R.id.add_nodes_button);
133 143
		updateNodesIndicatorLight();
134 144
		selectNodesButton.setOnClickListener(new OnClickListener() {
......
162 172
					loadBalancer.setPort(selectedPort);
163 173
					loadBalancer.setVirtualIpType(selectedVipType);
164 174
					loadBalancer.setAlgorithm(selectedAlgorithm.getName());
175
					loadBalancer.setRegion(selectedRegion);
165 176
					loadBalancer.setNodes(nodes);
166 177
					if(selectedVip != null){
167 178
						ArrayList<VirtualIp> vips = new ArrayList<VirtualIp>();
......
173 184
			}
174 185
		});
175 186
	}
176
	
187

  
177 188
	private boolean validName(){
178 189
		return !selectedName.equals("");
179 190
	}
......
181 192
	private boolean validPort(){
182 193
		return !selectedPort.equals("") && Integer.valueOf(selectedPort) > 0 && Integer.valueOf(selectedPort) < 65536;
183 194
	}
184
	
195

  
185 196
	private boolean validNodes(){
186 197
		return nodes != null && nodes.size() > 0;
187 198
	}
188
	
199

  
189 200
	private void updateNodesIndicatorLight(){
190 201
		if(validNodes()){
191 202
			selectNodesButton.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);
......
193 204
			selectNodesButton.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.ic_notification_overlay,0);
194 205
		}
195 206
	}
196
	 
207

  
197 208
	private boolean validVip(){
198
		return selectedVip != null && !selectedVip.getLoadBalancer().getPort().equals(selectedPort) 
199
			&& selectedVip.getLoadBalancer().getRegion().equals(selectedRegion);
209
		/*
210
		 * assign selectedVipType to the
211
		 * first value in the list, the default
212
		 * if its null
213
		 */
214
		if(selectedVipType == null){
215
			selectedVipType = VIP_TYPES[0];
216
		}
217
		return !selectedVipType.equalsIgnoreCase("Shared") 
218
		||(selectedVip != null && !selectedVip.getLoadBalancer().getPort().equals(selectedPort) 
219
				&& selectedVip.getLoadBalancer().getRegion().equals(selectedRegion));
200 220
	}
201
	
221

  
202 222
	private void updateVipIndicatorLight(){
203 223
		if(validVip()){
204 224
			selectVipButton.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);
......
206 226
			selectVipButton.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.ic_notification_overlay,0);
207 227
		}
208 228
	}
209
	
229

  
210 230
	private void setupText(){
211 231
		portEditText = (EditText)findViewById(R.id.edit_port_text);
212 232
		portEditText.addTextChangedListener(new TextWatcher() {
213
			
233

  
214 234
			@Override
215 235
			public void onTextChanged(CharSequence s, int start, int before, int count) {
216 236
				selectedPort = s.toString();
......
250 270
	private void loadProtocolSpinner() {
251 271
		protocolSpinner = (Spinner) findViewById(R.id.edit_protocol_spinner);
252 272
		protocolSpinner.setOnItemSelectedListener(this);
253
		String protocolNames[] = new String[Protocol.getProtocols().size()]; 
273
		String protocolNames[] = new String[Protocol.getProtocols().size() + 1]; 
254 274
		protocols = new Protocol[Protocol.getProtocols().size()];
255 275

  
256 276
		for(int i = 0; i < Protocol.getProtocols().size(); i++){
257 277
			protocols[i] = Protocol.getProtocols().get(i);
258
			protocolNames[i] = Protocol.getProtocols().get(i).getName();
278
			protocolNames[i] = Protocol.getProtocols().get(i).getName() + " (" + Protocol.getProtocols().get(i).getDefaultPort() + ")";
259 279
		}
280
		protocolNames[protocolNames.length - 1] = "Custom";
260 281

  
261 282
		ArrayAdapter<String> protocolAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, protocolNames);
262 283
		protocolAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
263 284
		protocolSpinner.setAdapter(protocolAdapter);
264 285
	}
265 286

  
287
	/*
288
	 * this is the spinner for protocol selection that 
289
	 * appears if custom is chosen from protocolSpinner
290
	 */
291
	private void loadProtocolSubSpinner() {
292
		protocolSubSpinner = (Spinner) findViewById(R.id.edit_protocol_sub_spinner);
293
		protocolSubSpinner.setOnItemSelectedListener(this);
294
		String protocolNames[] = new String[Protocol.getProtocols().size()]; 
295

  
296
		for(int i = 0; i < Protocol.getProtocols().size(); i++){
297
			protocolNames[i] = Protocol.getProtocols().get(i).getName();
298
		}
299

  
300
		ArrayAdapter<String> protocolAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, protocolNames);
301
		protocolAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
302
		protocolSubSpinner.setAdapter(protocolAdapter);
303
	}
304

  
266 305
	private void loadAlgorithmSpinner() {
267 306
		algorithmSpinner = (Spinner) findViewById(R.id.edit_algorithm_spinner);
268 307
		algorithmSpinner.setOnItemSelectedListener(this);
......
333 372
		else if(requestCode == ADD_NODES_ACTIVITY_CODE && resultCode == RESULT_CANCELED){
334 373
			//don't change list
335 374
		}
336
		else if(requestCode == SHARED_VIP_ACTIVITY_CODE && resultCode == RESULT_OK){
337
			selectedVip = (VirtualIp)data.getSerializableExtra("selectedVip");
375
		else if(requestCode == SHARED_VIP_ACTIVITY_CODE){
376
			if(data != null){
377
				selectedVip = (VirtualIp)data.getSerializableExtra("selectedVip");
378
			}
338 379
			updateVipIndicatorLight();
339 380
		}
340 381
	}

Also available in: Unified diff