Statistics
| Branch: | Revision:

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
}