Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / EditNodeActivity.java @ 48601850

History | View | Annotate | Download (8.1 kB)

1 4f9d1a69 Adam Menz
package com.rackspacecloud.android;
2 4f9d1a69 Adam Menz
3 4f9d1a69 Adam Menz
import org.apache.http.HttpResponse;
4 4f9d1a69 Adam Menz
5 4f9d1a69 Adam Menz
import android.app.Activity;
6 4f9d1a69 Adam Menz
import android.app.AlertDialog;
7 4f9d1a69 Adam Menz
import android.app.Dialog;
8 4f9d1a69 Adam Menz
import android.content.DialogInterface;
9 4f9d1a69 Adam Menz
import android.content.Intent;
10 4f9d1a69 Adam Menz
import android.os.AsyncTask;
11 4f9d1a69 Adam Menz
import android.os.Bundle;
12 4f9d1a69 Adam Menz
import android.view.View;
13 4f9d1a69 Adam Menz
import android.view.View.OnClickListener;
14 4f9d1a69 Adam Menz
import android.view.Window;
15 4f9d1a69 Adam Menz
import android.widget.AdapterView;
16 4f9d1a69 Adam Menz
import android.widget.AdapterView.OnItemSelectedListener;
17 4f9d1a69 Adam Menz
import android.widget.ArrayAdapter;
18 4f9d1a69 Adam Menz
import android.widget.Button;
19 4f9d1a69 Adam Menz
import android.widget.EditText;
20 4f9d1a69 Adam Menz
import android.widget.Spinner;
21 4f9d1a69 Adam Menz
import android.widget.TextView;
22 4f9d1a69 Adam Menz
23 48601850 Mike Mayo
import com.rackspace.cloud.android.R;
24 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer;
25 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.Node;
26 48601850 Mike Mayo
import com.rackspace.cloud.loadbalancer.api.client.NodeManager;
27 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.CloudServersException;
28 48601850 Mike Mayo
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
29 48601850 Mike Mayo
30 b722cab3 Adam Menz
public class EditNodeActivity extends CloudActivity{
31 4f9d1a69 Adam Menz
32 4f9d1a69 Adam Menz
        private final String[] CONDITIONS = {"Enabled", "Disabled", "Draining"};
33 4f9d1a69 Adam Menz
        private final int NODE_DELETED_CODE = 389;
34 4f9d1a69 Adam Menz
        
35 4f9d1a69 Adam Menz
        private Spinner conditionSpinner;
36 4f9d1a69 Adam Menz
        private EditText weightText;
37 4f9d1a69 Adam Menz
        private String selectedCondition;
38 4f9d1a69 Adam Menz
        private String selectedWeight;
39 4f9d1a69 Adam Menz
        private LoadBalancer loadBalancer;
40 4f9d1a69 Adam Menz
        private Node node;
41 4f9d1a69 Adam Menz
42 4f9d1a69 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
43 4f9d1a69 Adam Menz
                super.onCreate(savedInstanceState);
44 5018a7f8 Adam Menz
                trackPageView(GoogleAnalytics.PAGE_LB_NODE);
45 4f9d1a69 Adam Menz
                requestWindowFeature(Window.FEATURE_NO_TITLE);
46 4f9d1a69 Adam Menz
                setContentView(R.layout.editnode);
47 4f9d1a69 Adam Menz
                node = (Node) this.getIntent().getExtras().get("node");
48 4f9d1a69 Adam Menz
                loadBalancer = (LoadBalancer) this.getIntent().getExtras().get("loadBalancer");
49 b722cab3 Adam Menz
                restoreState(savedInstanceState);
50 b722cab3 Adam Menz
        } 
51 b722cab3 Adam Menz
        
52 b722cab3 Adam Menz
        protected void restoreState(Bundle state){
53 b722cab3 Adam Menz
                super.restoreState(state);
54 4f9d1a69 Adam Menz
                loadData();
55 4f9d1a69 Adam Menz
                setUpButtons();
56 b722cab3 Adam Menz
        }
57 4f9d1a69 Adam Menz
        
58 4f9d1a69 Adam Menz
        private void setUpButtons(){
59 4f9d1a69 Adam Menz
                Button submit = (Button) findViewById(R.id.edit_node_button);
60 4f9d1a69 Adam Menz
                submit.setOnClickListener(new OnClickListener() {
61 4f9d1a69 Adam Menz
                        
62 4f9d1a69 Adam Menz
                        @Override
63 4f9d1a69 Adam Menz
                        public void onClick(View v) {
64 4f9d1a69 Adam Menz
                                selectedWeight = weightText.getText().toString();
65 4f9d1a69 Adam Menz
                                if(weightText.getVisibility() == View.GONE || (weightText.getVisibility() != View.GONE && validWeight(selectedWeight))){
66 5018a7f8 Adam Menz
                                        trackEvent(GoogleAnalytics.CATEGORY_LOAD_BALANCER, GoogleAnalytics.EVENT_UPDATED_NODE, "", -1);
67 4f9d1a69 Adam Menz
                                        new ModifyNodeTask().execute();
68 4f9d1a69 Adam Menz
                                }
69 4f9d1a69 Adam Menz
                                else{
70 4f9d1a69 Adam Menz
                                        showAlert("Error", "Weight must be between 1 and 100.");
71 4f9d1a69 Adam Menz
                                }
72 4f9d1a69 Adam Menz
                        }
73 4f9d1a69 Adam Menz
                });
74 4f9d1a69 Adam Menz
                
75 4f9d1a69 Adam Menz
                Button delete = (Button) findViewById(R.id.delete_node_button);
76 4f9d1a69 Adam Menz
                delete.setOnClickListener(new OnClickListener() {
77 4f9d1a69 Adam Menz
                        
78 4f9d1a69 Adam Menz
                        @Override
79 4f9d1a69 Adam Menz
                        public void onClick(View v) {
80 4f9d1a69 Adam Menz
                                showDialog(R.id.delete_node_button);
81 4f9d1a69 Adam Menz
                        }
82 4f9d1a69 Adam Menz
                });
83 4f9d1a69 Adam Menz
        }
84 4f9d1a69 Adam Menz
        
85 4f9d1a69 Adam Menz
        @Override
86 4f9d1a69 Adam Menz
        protected Dialog onCreateDialog(int id) {
87 4f9d1a69 Adam Menz
                        switch (id) {
88 4f9d1a69 Adam Menz
                        case R.id.delete_node_button:
89 4f9d1a69 Adam Menz
                                return new AlertDialog.Builder(EditNodeActivity.this)
90 4f9d1a69 Adam Menz
                                .setIcon(R.drawable.alert_dialog_icon)
91 4f9d1a69 Adam Menz
                                .setTitle("Remove Node")
92 4f9d1a69 Adam Menz
                                .setMessage("Are you sure you want to remove this node?")
93 4f9d1a69 Adam Menz
                                .setPositiveButton("Remove", new DialogInterface.OnClickListener() {
94 4f9d1a69 Adam Menz
                                        public void onClick(DialogInterface dialog, int whichButton) {
95 4f9d1a69 Adam Menz
                                                // User clicked OK so do some stuff
96 5018a7f8 Adam Menz
                                                trackEvent(GoogleAnalytics.CATEGORY_LOAD_BALANCER, GoogleAnalytics.EVENT_DELETE_NODE, "", -1);
97 4f9d1a69 Adam Menz
                                                new DeleteNodeTask().execute((Void[]) null);
98 4f9d1a69 Adam Menz
                                        }
99 4f9d1a69 Adam Menz
                                })
100 4f9d1a69 Adam Menz
                                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
101 4f9d1a69 Adam Menz
                                        public void onClick(DialogInterface dialog, int whichButton) {
102 4f9d1a69 Adam Menz
                                                // User clicked Cancel so do some stuff
103 4f9d1a69 Adam Menz
                                        }
104 4f9d1a69 Adam Menz
                                })
105 4f9d1a69 Adam Menz
                                .create();
106 4f9d1a69 Adam Menz
                        }
107 4f9d1a69 Adam Menz
                        return null;
108 4f9d1a69 Adam Menz
        }
109 4f9d1a69 Adam Menz
110 4f9d1a69 Adam Menz
        public void onBackPressed(){
111 4f9d1a69 Adam Menz
                setResult(RESULT_CANCELED);
112 4f9d1a69 Adam Menz
                finish();
113 4f9d1a69 Adam Menz
        }
114 4f9d1a69 Adam Menz
        
115 4f9d1a69 Adam Menz
        private void loadData(){
116 4f9d1a69 Adam Menz
                loadConditionSpinner();
117 4f9d1a69 Adam Menz
                
118 4f9d1a69 Adam Menz
                TextView ipText = (TextView) findViewById(R.id.node_ip_text);
119 4f9d1a69 Adam Menz
                ipText.setText(node.getAddress());
120 4f9d1a69 Adam Menz
                
121 4f9d1a69 Adam Menz
                TextView portText = (TextView) findViewById(R.id.node_port_text);
122 4f9d1a69 Adam Menz
                portText.setText(node.getPort());
123 4f9d1a69 Adam Menz
                
124 4f9d1a69 Adam Menz
                weightText = (EditText) findViewById(R.id.node_weight_text);
125 4f9d1a69 Adam Menz
                //if algorithm is not weighted then then node's weight will be null
126 4f9d1a69 Adam Menz
                if(node.getWeight() == null){
127 4f9d1a69 Adam Menz
                        TextView weightLabel = (TextView) findViewById(R.id.node_weight_label);
128 4f9d1a69 Adam Menz
                        weightLabel.setVisibility(View.GONE);
129 4f9d1a69 Adam Menz
                        weightText.setVisibility(View.GONE);
130 4f9d1a69 Adam Menz
                }
131 4f9d1a69 Adam Menz
                else{
132 4f9d1a69 Adam Menz
                        weightText.setText(node.getWeight());
133 4f9d1a69 Adam Menz
                }
134 4f9d1a69 Adam Menz
        }
135 4f9d1a69 Adam Menz
        
136 4f9d1a69 Adam Menz
        
137 4f9d1a69 Adam Menz
        private Boolean validWeight(String weight){
138 4f9d1a69 Adam Menz
                if(weight.equals("")){
139 4f9d1a69 Adam Menz
                        return false;
140 4f9d1a69 Adam Menz
                }
141 4f9d1a69 Adam Menz
                else{
142 1b82ddb3 Adam Menz
                        try{
143 1b82ddb3 Adam Menz
                                int w = Integer.valueOf(weight);
144 1b82ddb3 Adam Menz
                                return w >= 1 && w <= 100 ;
145 1b82ddb3 Adam Menz
                        } catch (NumberFormatException nfe){
146 1b82ddb3 Adam Menz
                                return false;
147 1b82ddb3 Adam Menz
                        }
148 4f9d1a69 Adam Menz
                }
149 4f9d1a69 Adam Menz
        }
150 4f9d1a69 Adam Menz
151 4f9d1a69 Adam Menz
        private void loadConditionSpinner(){
152 4f9d1a69 Adam Menz
                conditionSpinner = (Spinner) findViewById(R.id.node_condition_spinner);
153 4f9d1a69 Adam Menz
154 4f9d1a69 Adam Menz
                ArrayAdapter<String> conditionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, CONDITIONS);
155 4f9d1a69 Adam Menz
                conditionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
156 4f9d1a69 Adam Menz
                conditionSpinner.setAdapter(conditionAdapter);
157 4f9d1a69 Adam Menz
158 4f9d1a69 Adam Menz
                conditionSpinner.setSelection(getSpinnerLocation(node.getCondition()));
159 4f9d1a69 Adam Menz
                
160 4f9d1a69 Adam Menz
                conditionSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
161 4f9d1a69 Adam Menz
162 4f9d1a69 Adam Menz
                        @Override
163 4f9d1a69 Adam Menz
                        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
164 4f9d1a69 Adam Menz
                                selectedCondition = CONDITIONS[pos];        
165 4f9d1a69 Adam Menz
                        }
166 4f9d1a69 Adam Menz
167 4f9d1a69 Adam Menz
                        @Override
168 4f9d1a69 Adam Menz
                        public void onNothingSelected(AdapterView<?> arg0) {
169 4f9d1a69 Adam Menz
170 4f9d1a69 Adam Menz
                        }
171 4f9d1a69 Adam Menz
172 4f9d1a69 Adam Menz
                });
173 4f9d1a69 Adam Menz
        }
174 4f9d1a69 Adam Menz
        
175 4f9d1a69 Adam Menz
        private int getSpinnerLocation(String condition){
176 4f9d1a69 Adam Menz
                for(int i = 0; i < CONDITIONS.length; i++){
177 4f9d1a69 Adam Menz
                        if(CONDITIONS[i].equalsIgnoreCase(condition)){
178 4f9d1a69 Adam Menz
                                return i;
179 4f9d1a69 Adam Menz
                        }
180 4f9d1a69 Adam Menz
                }
181 4f9d1a69 Adam Menz
                return 0;
182 4f9d1a69 Adam Menz
        }
183 4f9d1a69 Adam Menz
        
184 4f9d1a69 Adam Menz
        public class ModifyNodeTask extends AsyncTask<Void, Void, HttpBundle> {
185 4f9d1a69 Adam Menz
186 4f9d1a69 Adam Menz
                private CloudServersException exception;
187 4f9d1a69 Adam Menz
188 4f9d1a69 Adam Menz
                @Override
189 4f9d1a69 Adam Menz
                protected void onPreExecute(){
190 4f9d1a69 Adam Menz
                        showDialog();
191 4f9d1a69 Adam Menz
                }
192 4f9d1a69 Adam Menz
                
193 4f9d1a69 Adam Menz
                @Override
194 4f9d1a69 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
195 4f9d1a69 Adam Menz
                        HttpBundle bundle = null;
196 4f9d1a69 Adam Menz
                        try {
197 b722cab3 Adam Menz
                                bundle = (new NodeManager(getContext())).update(loadBalancer, node, selectedCondition, selectedWeight);
198 4f9d1a69 Adam Menz
                        } catch (CloudServersException e) {
199 4f9d1a69 Adam Menz
                                exception = e;
200 4f9d1a69 Adam Menz
                        }
201 4f9d1a69 Adam Menz
                        return bundle;
202 4f9d1a69 Adam Menz
                }
203 4f9d1a69 Adam Menz
204 4f9d1a69 Adam Menz
                @Override
205 4f9d1a69 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
206 b722cab3 Adam Menz
                        hideDialog();
207 4f9d1a69 Adam Menz
                        HttpResponse response = bundle.getResponse();
208 4f9d1a69 Adam Menz
                        if (response != null) {
209 4f9d1a69 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
210 4f9d1a69 Adam Menz
                                if (statusCode == 202 || statusCode == 200) {
211 4f9d1a69 Adam Menz
                                        setResult(Activity.RESULT_OK);
212 4f9d1a69 Adam Menz
                                        finish();
213 4f9d1a69 Adam Menz
                                } else {
214 4f9d1a69 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
215 4f9d1a69 Adam Menz
                                        if ("".equals(cse.getMessage())) {
216 b722cab3 Adam Menz
                                                showError("There was a problem modifying your load balancer.", bundle);
217 4f9d1a69 Adam Menz
                                        } else {
218 b722cab3 Adam Menz
                                                showError("There was a problem modifying your load balancer: " + cse.getMessage(), bundle);
219 4f9d1a69 Adam Menz
                                        }
220 4f9d1a69 Adam Menz
                                }
221 4f9d1a69 Adam Menz
                        } else if (exception != null) {
222 b722cab3 Adam Menz
                                showError("There was a problem modifying your load balancer: " + exception.getMessage(), bundle);                                
223 4f9d1a69 Adam Menz
                        }                        
224 4f9d1a69 Adam Menz
                }
225 4f9d1a69 Adam Menz
        }
226 4f9d1a69 Adam Menz
        
227 4f9d1a69 Adam Menz
        public class DeleteNodeTask extends AsyncTask<Void, Void, HttpBundle> {
228 4f9d1a69 Adam Menz
229 4f9d1a69 Adam Menz
                private CloudServersException exception;
230 4f9d1a69 Adam Menz
                
231 4f9d1a69 Adam Menz
                @Override
232 4f9d1a69 Adam Menz
                protected void onPreExecute(){
233 4f9d1a69 Adam Menz
                        showDialog();
234 4f9d1a69 Adam Menz
                }
235 4f9d1a69 Adam Menz
                
236 4f9d1a69 Adam Menz
                @Override
237 4f9d1a69 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
238 4f9d1a69 Adam Menz
                        HttpBundle bundle = null;
239 4f9d1a69 Adam Menz
                        try {
240 b722cab3 Adam Menz
                                bundle = (new NodeManager(getContext())).remove(loadBalancer, node);
241 4f9d1a69 Adam Menz
                        } catch (CloudServersException e) {
242 4f9d1a69 Adam Menz
                                exception = e;
243 4f9d1a69 Adam Menz
                        }
244 4f9d1a69 Adam Menz
                        return bundle;
245 4f9d1a69 Adam Menz
                }
246 4f9d1a69 Adam Menz
247 4f9d1a69 Adam Menz
                @Override
248 4f9d1a69 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
249 b722cab3 Adam Menz
                        hideDialog();
250 4f9d1a69 Adam Menz
                        HttpResponse response = bundle.getResponse();
251 4f9d1a69 Adam Menz
                        if (response != null) {
252 4f9d1a69 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
253 4f9d1a69 Adam Menz
                                if (statusCode == 202 || statusCode == 200) {
254 4f9d1a69 Adam Menz
                                        Intent viewIntent = new Intent();
255 4f9d1a69 Adam Menz
                                        viewIntent.putExtra("deletedNode", node);
256 4f9d1a69 Adam Menz
                                        setResult(NODE_DELETED_CODE, viewIntent);
257 4f9d1a69 Adam Menz
                                        finish();
258 4f9d1a69 Adam Menz
                                } else {
259 4f9d1a69 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
260 4f9d1a69 Adam Menz
                                        if ("".equals(cse.getMessage())) {
261 b722cab3 Adam Menz
                                                showError("There was a problem modifying your load balancer.", bundle);
262 4f9d1a69 Adam Menz
                                        } else {
263 b722cab3 Adam Menz
                                                showError("There was a problem modifying your load balancer: " + cse.getMessage(), bundle);
264 4f9d1a69 Adam Menz
                                        }
265 4f9d1a69 Adam Menz
                                }
266 4f9d1a69 Adam Menz
                        } else if (exception != null) {
267 b722cab3 Adam Menz
                                showError("There was a problem modifying your load balancer: " + exception.getMessage(), bundle);                                
268 4f9d1a69 Adam Menz
                        }                        
269 4f9d1a69 Adam Menz
                }
270 4f9d1a69 Adam Menz
        }
271 1b82ddb3 Adam Menz
        
272 1b82ddb3 Adam Menz
        /*
273 1b82ddb3 Adam Menz
         * For testing
274 1b82ddb3 Adam Menz
         */
275 1b82ddb3 Adam Menz
        @SuppressWarnings("unused")
276 1b82ddb3 Adam Menz
        private void setSelectedWeight(String s){
277 1b82ddb3 Adam Menz
                selectedWeight = s;
278 1b82ddb3 Adam Menz
        }
279 4f9d1a69 Adam Menz
}