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