root / src / com / rackspacecloud / android / AddExternalNodeActivity.java @ fee0d4aa
History | View | Annotate | Download (5 kB)
1 | b5f66d0e | Adam Menz | package com.rackspacecloud.android; |
---|---|---|---|
2 | b5f66d0e | Adam Menz | |
3 | 01340459 | Adam Menz | import java.util.regex.Matcher; |
4 | 01340459 | Adam Menz | import java.util.regex.Pattern; |
5 | 01340459 | Adam Menz | |
6 | c4a37180 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.Node; |
7 | c4a37180 | Adam Menz | |
8 | b5f66d0e | Adam Menz | import android.content.Intent; |
9 | b5f66d0e | Adam Menz | import android.os.Bundle; |
10 | b5f66d0e | Adam Menz | import android.view.View; |
11 | b5f66d0e | Adam Menz | import android.view.Window; |
12 | b5f66d0e | Adam Menz | import android.view.View.OnClickListener; |
13 | b5f66d0e | Adam Menz | import android.widget.AdapterView; |
14 | b5f66d0e | Adam Menz | import android.widget.ArrayAdapter; |
15 | b5f66d0e | Adam Menz | import android.widget.Button; |
16 | b5f66d0e | Adam Menz | import android.widget.EditText; |
17 | b5f66d0e | Adam Menz | import android.widget.Spinner; |
18 | b5f66d0e | Adam Menz | import android.widget.TextView; |
19 | b5f66d0e | Adam Menz | import android.widget.AdapterView.OnItemSelectedListener; |
20 | b5f66d0e | Adam Menz | |
21 | b5f66d0e | Adam Menz | public class AddExternalNodeActivity extends CloudActivity { |
22 | b5f66d0e | Adam Menz | |
23 | b5f66d0e | Adam Menz | private final String[] CONDITIONS = {"Enabled", "Disabled", "Draining"}; |
24 | b5f66d0e | Adam Menz | private String selectedPort; |
25 | b5f66d0e | Adam Menz | private String selectedIp; |
26 | b5f66d0e | Adam Menz | private String selectedWeight; |
27 | b5f66d0e | Adam Menz | private boolean weighted; |
28 | b5f66d0e | Adam Menz | private String selectedCondition; |
29 | b5f66d0e | Adam Menz | private Spinner conditionSpinner;
|
30 | b5f66d0e | Adam Menz | private EditText ipAddress;
|
31 | b5f66d0e | Adam Menz | private EditText weightText;
|
32 | c4a37180 | Adam Menz | private Node node;
|
33 | c4a37180 | Adam Menz | |
34 | b5f66d0e | Adam Menz | public void onCreate(Bundle savedInstanceState) { |
35 | b5f66d0e | Adam Menz | super.onCreate(savedInstanceState);
|
36 | b5f66d0e | Adam Menz | requestWindowFeature(Window.FEATURE_NO_TITLE);
|
37 | b5f66d0e | Adam Menz | setContentView(R.layout.addexternalnode); |
38 | b5f66d0e | Adam Menz | weighted = (Boolean) this.getIntent().getExtras().get("weighted"); |
39 | c4a37180 | Adam Menz | node = (Node) this.getIntent().getExtras().get("node"); |
40 | b5f66d0e | Adam Menz | restoreState(savedInstanceState); |
41 | b5f66d0e | Adam Menz | } |
42 | b5f66d0e | Adam Menz | |
43 | b5f66d0e | Adam Menz | protected void restoreState(Bundle state) { |
44 | b5f66d0e | Adam Menz | super.restoreState(state);
|
45 | b5f66d0e | Adam Menz | setupInputs(); |
46 | b5f66d0e | Adam Menz | } |
47 | b5f66d0e | Adam Menz | |
48 | b5f66d0e | Adam Menz | private void setupInputs(){ |
49 | c4a37180 | Adam Menz | |
50 | b5f66d0e | Adam Menz | ipAddress = (EditText) findViewById(R.id.ip_address); |
51 | b5f66d0e | Adam Menz | |
52 | b5f66d0e | Adam Menz | weightText = (EditText) findViewById(R.id.node_weight_text); |
53 | b5f66d0e | Adam Menz | |
54 | b5f66d0e | Adam Menz | //if algorithm is not weighted then then node's weight will be null
|
55 | b5f66d0e | Adam Menz | if(!weighted){
|
56 | b5f66d0e | Adam Menz | TextView weightLabel = (TextView) findViewById(R.id.node_weight_label); |
57 | b5f66d0e | Adam Menz | weightLabel.setVisibility(View.GONE);
|
58 | b5f66d0e | Adam Menz | weightText.setVisibility(View.GONE);
|
59 | b5f66d0e | Adam Menz | } |
60 | b5f66d0e | Adam Menz | |
61 | b5f66d0e | Adam Menz | loadConditionSpinner(); |
62 | b5f66d0e | Adam Menz | setUpButton(); |
63 | b5f66d0e | Adam Menz | |
64 | c4a37180 | Adam Menz | if(node != null){ |
65 | c4a37180 | Adam Menz | ipAddress.setText(node.getAddress()); |
66 | c4a37180 | Adam Menz | weightText.setText(node.getWeight()); |
67 | c4a37180 | Adam Menz | ((EditText)findViewById(R.id.node_port_text)).setText(node.getPort()); |
68 | c4a37180 | Adam Menz | conditionSpinner.setSelection(getLocation(CONDITIONS, node.getCondition())); |
69 | c4a37180 | Adam Menz | } |
70 | c4a37180 | Adam Menz | } |
71 | c4a37180 | Adam Menz | |
72 | c4a37180 | Adam Menz | private int getLocation(Object[] objects, Object object){ |
73 | c4a37180 | Adam Menz | for(int i = 0; i < objects.length; i++){ |
74 | c4a37180 | Adam Menz | if(object.equals(objects[i])){
|
75 | c4a37180 | Adam Menz | return i;
|
76 | c4a37180 | Adam Menz | } |
77 | c4a37180 | Adam Menz | } |
78 | c4a37180 | Adam Menz | return 0; |
79 | b5f66d0e | Adam Menz | } |
80 | b5f66d0e | Adam Menz | |
81 | b5f66d0e | Adam Menz | private void setUpButton(){ |
82 | b5f66d0e | Adam Menz | Button submit = (Button) findViewById(R.id.add_node_button); |
83 | b5f66d0e | Adam Menz | submit.setOnClickListener(new OnClickListener() {
|
84 | b5f66d0e | Adam Menz | |
85 | b5f66d0e | Adam Menz | @Override
|
86 | b5f66d0e | Adam Menz | public void onClick(View v) { |
87 | b5f66d0e | Adam Menz | selectedIp = ipAddress.getText().toString(); |
88 | b5f66d0e | Adam Menz | selectedPort = ((EditText)findViewById(R.id.node_port_text)).getText().toString(); |
89 | b5f66d0e | Adam Menz | selectedWeight = weightText.getText().toString(); |
90 | 01340459 | Adam Menz | if(!validPort(selectedPort)){
|
91 | b5f66d0e | Adam Menz | showAlert("Error", "Must have a protocol port number that is between 1 and 65535."); |
92 | b5f66d0e | Adam Menz | } else if(!(weightText.getVisibility() == View.GONE || (weightText.getVisibility() != View.GONE && validWeight(selectedWeight)))){ |
93 | b5f66d0e | Adam Menz | showAlert("Error", "Weight must be between 1 and 100."); |
94 | b5f66d0e | Adam Menz | } else if(ipAddress.getText().toString().equals("")){ |
95 | b5f66d0e | Adam Menz | //TODO use regex to validate the ip for IPV4 and IPV6
|
96 | b5f66d0e | Adam Menz | showAlert("Error", "Enter an IP Address"); |
97 | c4a37180 | Adam Menz | } else if(!validIp(ipAddress.getText().toString())) { |
98 | 01340459 | Adam Menz | showAlert("Error", "Enter a valid IP Address"); |
99 | 01340459 | Adam Menz | } else {
|
100 | b5f66d0e | Adam Menz | Intent data = new Intent();
|
101 | b5f66d0e | Adam Menz | data.putExtra("nodeIp", selectedIp);
|
102 | b5f66d0e | Adam Menz | data.putExtra("nodePort", selectedPort);
|
103 | b5f66d0e | Adam Menz | data.putExtra("nodeCondition", selectedCondition);
|
104 | b5f66d0e | Adam Menz | data.putExtra("nodeWeight", selectedWeight);
|
105 | b5f66d0e | Adam Menz | setResult(RESULT_OK, data); |
106 | b5f66d0e | Adam Menz | finish(); |
107 | b5f66d0e | Adam Menz | } |
108 | b5f66d0e | Adam Menz | |
109 | b5f66d0e | Adam Menz | } |
110 | b5f66d0e | Adam Menz | }); |
111 | b5f66d0e | Adam Menz | } |
112 | b5f66d0e | Adam Menz | |
113 | b5f66d0e | Adam Menz | private void loadConditionSpinner(){ |
114 | b5f66d0e | Adam Menz | conditionSpinner = (Spinner) findViewById(R.id.node_condition_spinner); |
115 | b5f66d0e | Adam Menz | |
116 | b5f66d0e | Adam Menz | ArrayAdapter<String> conditionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, CONDITIONS); |
117 | b5f66d0e | Adam Menz | conditionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
118 | b5f66d0e | Adam Menz | conditionSpinner.setAdapter(conditionAdapter); |
119 | b5f66d0e | Adam Menz | |
120 | b5f66d0e | Adam Menz | conditionSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
|
121 | b5f66d0e | Adam Menz | |
122 | b5f66d0e | Adam Menz | @Override
|
123 | b5f66d0e | Adam Menz | public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { |
124 | b5f66d0e | Adam Menz | selectedCondition = CONDITIONS[pos]; |
125 | b5f66d0e | Adam Menz | } |
126 | b5f66d0e | Adam Menz | |
127 | b5f66d0e | Adam Menz | @Override
|
128 | b5f66d0e | Adam Menz | public void onNothingSelected(AdapterView<?> arg0) { |
129 | b5f66d0e | Adam Menz | |
130 | b5f66d0e | Adam Menz | } |
131 | b5f66d0e | Adam Menz | |
132 | b5f66d0e | Adam Menz | }); |
133 | b5f66d0e | Adam Menz | } |
134 | 01340459 | Adam Menz | |
135 | 01340459 | Adam Menz | //basic ip validation just checks that the string
|
136 | 01340459 | Adam Menz | //is only composed of letters, numbers, ., :
|
137 | 01340459 | Adam Menz | private static boolean validIp(String ip){ |
138 | 01340459 | Adam Menz | //Enter regex
|
139 | 01340459 | Adam Menz | Pattern pattern = Pattern.compile("[a-zA-Z0-9.:]+"); |
140 | 01340459 | Adam Menz | Matcher match = pattern.matcher(ip);
|
141 | 01340459 | Adam Menz | return match.matches();
|
142 | 01340459 | Adam Menz | } |
143 | b5f66d0e | Adam Menz | |
144 | 01340459 | Adam Menz | private boolean validPort(String port){ |
145 | c4a37180 | Adam Menz | boolean result;
|
146 | c4a37180 | Adam Menz | try{
|
147 | c4a37180 | Adam Menz | result = !port.equals("") && Integer.valueOf(port) > 0 && Integer.valueOf(port) < 65536; |
148 | c4a37180 | Adam Menz | } catch (NumberFormatException e) { |
149 | c4a37180 | Adam Menz | result = false;
|
150 | c4a37180 | Adam Menz | } |
151 | c4a37180 | Adam Menz | return result;
|
152 | b5f66d0e | Adam Menz | } |
153 | b5f66d0e | Adam Menz | |
154 | b5f66d0e | Adam Menz | private Boolean validWeight(String weight){ |
155 | b5f66d0e | Adam Menz | if(weight.equals("")){ |
156 | b5f66d0e | Adam Menz | return false; |
157 | b5f66d0e | Adam Menz | } |
158 | b5f66d0e | Adam Menz | else{
|
159 | c4a37180 | Adam Menz | int w;
|
160 | c4a37180 | Adam Menz | try{
|
161 | c4a37180 | Adam Menz | w = Integer.valueOf(weight);
|
162 | c4a37180 | Adam Menz | } catch (NumberFormatException e){ |
163 | c4a37180 | Adam Menz | return false; |
164 | c4a37180 | Adam Menz | } |
165 | b5f66d0e | Adam Menz | return w >= 1 && w <= 100 ; |
166 | b5f66d0e | Adam Menz | } |
167 | b5f66d0e | Adam Menz | } |
168 | b5f66d0e | Adam Menz | |
169 | c4a37180 | Adam Menz | public void onBackPressed(){ |
170 | c4a37180 | Adam Menz | setResult(RESULT_CANCELED); |
171 | c4a37180 | Adam Menz | finish(); |
172 | c4a37180 | Adam Menz | } |
173 | c4a37180 | Adam Menz | |
174 | b5f66d0e | Adam Menz | } |