Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ViewLoadBalancerActivity.java @ c4a37180

History | View | Annotate | Download (20 kB)

1 23bc5e75 Phillip Toohill
/**
2 23bc5e75 Phillip Toohill
 * 
3 23bc5e75 Phillip Toohill
 */
4 23bc5e75 Phillip Toohill
package com.rackspacecloud.android;
5 23bc5e75 Phillip Toohill
6 b722cab3 Adam Menz
import java.util.ArrayList;
7 b722cab3 Adam Menz
import java.util.Collections;
8 4f9d1a69 Adam Menz
9 4f9d1a69 Adam Menz
import org.apache.http.HttpResponse;
10 4f9d1a69 Adam Menz
11 23bc5e75 Phillip Toohill
import android.app.Activity;
12 23bc5e75 Phillip Toohill
import android.app.AlertDialog;
13 4f9d1a69 Adam Menz
import android.app.Dialog;
14 23bc5e75 Phillip Toohill
import android.content.DialogInterface;
15 4f9d1a69 Adam Menz
import android.content.Intent;
16 b722cab3 Adam Menz
import android.graphics.Color;
17 23bc5e75 Phillip Toohill
import android.os.AsyncTask;
18 23bc5e75 Phillip Toohill
import android.os.Bundle;
19 23bc5e75 Phillip Toohill
import android.util.Log;
20 b722cab3 Adam Menz
import android.util.TypedValue;
21 4f9d1a69 Adam Menz
import android.view.Menu;
22 4f9d1a69 Adam Menz
import android.view.MenuInflater;
23 4f9d1a69 Adam Menz
import android.view.MenuItem;
24 aeff0a62 Adam Menz
import android.view.View;
25 aeff0a62 Adam Menz
import android.view.View.OnClickListener;
26 aeff0a62 Adam Menz
import android.widget.Button;
27 b722cab3 Adam Menz
import android.widget.LinearLayout;
28 23bc5e75 Phillip Toohill
import android.widget.TextView;
29 23bc5e75 Phillip Toohill
30 23bc5e75 Phillip Toohill
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer;
31 23bc5e75 Phillip Toohill
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancerManager;
32 b722cab3 Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.Node;
33 b722cab3 Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.VirtualIp;
34 232548ba Adam Menz
import com.rackspace.cloud.loadbalancer.api.client.http.LoadBalancersException;
35 4f9d1a69 Adam Menz
import com.rackspace.cloud.servers.api.client.CloudServersException;
36 4f9d1a69 Adam Menz
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
37 23bc5e75 Phillip Toohill
38 b722cab3 Adam Menz
public class ViewLoadBalancerActivity extends CloudActivity {
39 4f9d1a69 Adam Menz
40 4f9d1a69 Adam Menz
        private static final int EDIT_LOAD_BALANCER_CODE = 184;
41 4f9d1a69 Adam Menz
        private static final int EDIT_NODES_CODE = 185;
42 b722cab3 Adam Menz
43 23bc5e75 Phillip Toohill
        private LoadBalancer loadBalancer;
44 b722cab3 Adam Menz
        private PollLoadBalancerTask pollLoadBalancerTask;
45 4f9d1a69 Adam Menz
46 4f9d1a69 Adam Menz
        @Override
47 4f9d1a69 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
48 4f9d1a69 Adam Menz
                super.onCreate(savedInstanceState);
49 4f9d1a69 Adam Menz
                loadBalancer = (LoadBalancer) this.getIntent().getExtras().get("loadBalancer");
50 4f9d1a69 Adam Menz
                setContentView(R.layout.view_loadbalancer);
51 4f9d1a69 Adam Menz
                restoreState(savedInstanceState);
52 4f9d1a69 Adam Menz
        }
53 4f9d1a69 Adam Menz
54 23bc5e75 Phillip Toohill
        @Override
55 23bc5e75 Phillip Toohill
        protected void onSaveInstanceState(Bundle outState) {
56 23bc5e75 Phillip Toohill
                super.onSaveInstanceState(outState);
57 23bc5e75 Phillip Toohill
                outState.putSerializable("loadBalancer", loadBalancer);
58 23bc5e75 Phillip Toohill
        }
59 23bc5e75 Phillip Toohill
60 b722cab3 Adam Menz
        protected void restoreState(Bundle state) {
61 b722cab3 Adam Menz
                super.restoreState(state);
62 b722cab3 Adam Menz
63 b722cab3 Adam Menz
                if (state != null && state.containsKey("loadBalancer") && state.getSerializable("loadBalancer") != null) {
64 4f9d1a69 Adam Menz
                        loadBalancer = (LoadBalancer) state.getSerializable("loadBalancer");
65 b722cab3 Adam Menz
                        loadLoadBalancerData();
66 01340459 Adam Menz
                        setUpButtons();
67 b722cab3 Adam Menz
                }
68 b722cab3 Adam Menz
                else{
69 b722cab3 Adam Menz
                        new LoadLoadBalancerTask().execute((Void[]) null);
70 4f9d1a69 Adam Menz
                }
71 4f9d1a69 Adam Menz
        }
72 4f9d1a69 Adam Menz
73 01340459 Adam Menz
        @Override
74 01340459 Adam Menz
        protected void onDestroy(){
75 01340459 Adam Menz
                super.onDestroy();
76 6ae5d8db Adam Menz
77 01340459 Adam Menz
                //need to cancel pollLoadBalancerTask so it 
78 01340459 Adam Menz
                //does not keep polling in a new activity
79 01340459 Adam Menz
                if(pollLoadBalancerTask != null){
80 01340459 Adam Menz
                        pollLoadBalancerTask.cancel(true);
81 01340459 Adam Menz
                }
82 01340459 Adam Menz
        }
83 6ae5d8db Adam Menz
84 01340459 Adam Menz
        private void setupButton(int resourceId, OnClickListener onClickListener) {
85 01340459 Adam Menz
                Button button = (Button) findViewById(resourceId);
86 01340459 Adam Menz
                button.setOnClickListener(onClickListener);
87 b722cab3 Adam Menz
        }
88 01340459 Adam Menz
89 01340459 Adam Menz
        //change the text on the button depending
90 01340459 Adam Menz
        //on the state of Connection Logging
91 6ae5d8db Adam Menz
        private void setLogButtonText(){
92 6ae5d8db Adam Menz
                Button logs = (Button)findViewById(R.id.connection_log_button);
93 01340459 Adam Menz
                String loggingEnabled = loadBalancer.getIsConnectionLoggingEnabled();
94 01340459 Adam Menz
                if(loggingEnabled != null && loggingEnabled.equals("true")){
95 6ae5d8db Adam Menz
                        logs.setText("Disable Logs");
96 6ae5d8db Adam Menz
                } else {
97 6ae5d8db Adam Menz
                        logs.setText("Enable Logs");
98 6ae5d8db Adam Menz
                }
99 6ae5d8db Adam Menz
        }
100 01340459 Adam Menz
101 01340459 Adam Menz
        //change the text on the button depending
102 01340459 Adam Menz
        //on the state of Session Persistence
103 6ae5d8db Adam Menz
        private void setSessionButtonText(){
104 6ae5d8db Adam Menz
                Button sessionPersistence = (Button)findViewById(R.id.session_persistence_button);
105 01340459 Adam Menz
                //session persistence is null if it is off
106 6ae5d8db Adam Menz
                if(loadBalancer.getSessionPersistence() != null){
107 6ae5d8db Adam Menz
                        sessionPersistence.setText("Disable Session Persistence");
108 6ae5d8db Adam Menz
                } else {
109 6ae5d8db Adam Menz
                        sessionPersistence.setText("Enable Session Persistence");
110 6ae5d8db Adam Menz
                }
111 6ae5d8db Adam Menz
        }
112 6ae5d8db Adam Menz
113 01340459 Adam Menz
        //if the load balancer state contains DELETE
114 01340459 Adam Menz
        //then parts of it may be null, so use a different
115 01340459 Adam Menz
        //onClick in that condition
116 01340459 Adam Menz
        private void setUpButtons(){
117 01340459 Adam Menz
                setupButton(R.id.edit_loadbalancer_button, new OnClickListener() {
118 b722cab3 Adam Menz
                        @Override
119 b722cab3 Adam Menz
                        public void onClick(View v) {
120 01340459 Adam Menz
                                if(!loadBalancer.getStatus().contains("DELETE")){
121 01340459 Adam Menz
                                        Intent editLoadBalancerIntent = new Intent(getContext(), EditLoadBalancerActivity.class);
122 01340459 Adam Menz
                                        editLoadBalancerIntent.putExtra("loadBalancer", loadBalancer);
123 01340459 Adam Menz
                                        startActivityForResult(editLoadBalancerIntent, EDIT_LOAD_BALANCER_CODE);
124 01340459 Adam Menz
                                } else {
125 01340459 Adam Menz
                                        showAlert(loadBalancer.getStatus(), "The load balancer cannot be updated");
126 01340459 Adam Menz
                                }
127 b722cab3 Adam Menz
                        }
128 b722cab3 Adam Menz
                });
129 b722cab3 Adam Menz
130 b722cab3 Adam Menz
131 01340459 Adam Menz
                setupButton(R.id.delete_loadbalancer_button, new OnClickListener() {
132 b722cab3 Adam Menz
                        @Override
133 b722cab3 Adam Menz
                        public void onClick(View v) {
134 01340459 Adam Menz
                                if(!loadBalancer.getStatus().contains("DELETE")){
135 01340459 Adam Menz
                                        showDialog(R.id.view_server_delete_button);
136 01340459 Adam Menz
                                } else {
137 01340459 Adam Menz
                                        showAlert(loadBalancer.getStatus(), "The load balancer cannot be deleted");
138 01340459 Adam Menz
                                }
139 b722cab3 Adam Menz
                        }
140 b722cab3 Adam Menz
141 b722cab3 Adam Menz
                });
142 b722cab3 Adam Menz
143 01340459 Adam Menz
                setupButton(R.id.edit_nodes_button, new OnClickListener() {
144 b722cab3 Adam Menz
                        @Override
145 b722cab3 Adam Menz
                        public void onClick(View v) {
146 01340459 Adam Menz
                                if(!loadBalancer.getStatus().contains("DELETE")){
147 01340459 Adam Menz
                                        Intent editLoadBalancerIntent = new Intent(getContext(), EditNodesActivity.class);
148 01340459 Adam Menz
                                        editLoadBalancerIntent.putExtra("nodes", loadBalancer.getNodes());
149 01340459 Adam Menz
                                        editLoadBalancerIntent.putExtra("loadBalancer", loadBalancer);
150 01340459 Adam Menz
                                        startActivityForResult(editLoadBalancerIntent, EDIT_NODES_CODE);
151 01340459 Adam Menz
                                } else {
152 01340459 Adam Menz
                                        showAlert(loadBalancer.getStatus(), "The nodes cannot be edited");
153 01340459 Adam Menz
                                }
154 b722cab3 Adam Menz
                        }
155 b722cab3 Adam Menz
                });
156 4f9d1a69 Adam Menz
157 01340459 Adam Menz
                setupButton(R.id.connection_log_button, new OnClickListener() {
158 6ae5d8db Adam Menz
                        @Override
159 6ae5d8db Adam Menz
                        public void onClick(View v) {
160 01340459 Adam Menz
                                if(!loadBalancer.getStatus().contains("DELETE")){
161 01340459 Adam Menz
                                        showDialog(R.id.connection_log_button);        
162 01340459 Adam Menz
                                } else {
163 01340459 Adam Menz
                                        showAlert(loadBalancer.getStatus(), "Log settings cannot be edited.");        
164 01340459 Adam Menz
                                }
165 6ae5d8db Adam Menz
                        }
166 6ae5d8db Adam Menz
                });
167 01340459 Adam Menz
                setLogButtonText();
168 6ae5d8db Adam Menz
169 01340459 Adam Menz
                setupButton(R.id.session_persistence_button, new OnClickListener() {
170 6ae5d8db Adam Menz
                        @Override
171 6ae5d8db Adam Menz
                        public void onClick(View v) {
172 01340459 Adam Menz
                                if(!loadBalancer.getStatus().contains("DELETE")){
173 01340459 Adam Menz
                                        if(!loadBalancer.getProtocol().equals("HTTP")){
174 01340459 Adam Menz
                                                showAlert("Error", "Session Persistence cannot be enabled for protocols other than HTTP.");
175 01340459 Adam Menz
                                        } else {
176 01340459 Adam Menz
                                                showDialog(R.id.session_persistence_button);
177 01340459 Adam Menz
                                        }
178 01340459 Adam Menz
                                } else {
179 01340459 Adam Menz
                                        showAlert(loadBalancer.getStatus(), "Session Persistence cannot be edited.");        
180 01340459 Adam Menz
                                }
181 6ae5d8db Adam Menz
                        }
182 6ae5d8db Adam Menz
                });
183 01340459 Adam Menz
                setSessionButtonText();
184 4f9d1a69 Adam Menz
        }
185 4f9d1a69 Adam Menz
186 4f9d1a69 Adam Menz
        @Override
187 4f9d1a69 Adam Menz
        protected Dialog onCreateDialog(int id) {
188 4f9d1a69 Adam Menz
                switch (id) {
189 4f9d1a69 Adam Menz
                case R.id.view_server_delete_button:
190 4f9d1a69 Adam Menz
                        return new AlertDialog.Builder(ViewLoadBalancerActivity.this)
191 4f9d1a69 Adam Menz
                        .setIcon(R.drawable.alert_dialog_icon)
192 4f9d1a69 Adam Menz
                        .setTitle("Delete Load Balancer")
193 4f9d1a69 Adam Menz
                        .setMessage("Are you sure you want to delete the load balancer?")
194 4f9d1a69 Adam Menz
                        .setPositiveButton("Delete", new DialogInterface.OnClickListener() {
195 4f9d1a69 Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
196 4f9d1a69 Adam Menz
                                        new DeleteLoadBalancerTask().execute((Void[]) null);
197 4f9d1a69 Adam Menz
                                }
198 4f9d1a69 Adam Menz
                        })
199 4f9d1a69 Adam Menz
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
200 4f9d1a69 Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
201 01340459 Adam Menz
                                        // do nothing
202 4f9d1a69 Adam Menz
                                }
203 4f9d1a69 Adam Menz
                        })
204 4f9d1a69 Adam Menz
                        .create();
205 6ae5d8db Adam Menz
                case R.id.connection_log_button:
206 6ae5d8db Adam Menz
                        return new AlertDialog.Builder(ViewLoadBalancerActivity.this)
207 6ae5d8db Adam Menz
                        .setIcon(R.drawable.alert_dialog_icon)
208 6ae5d8db Adam Menz
                        .setTitle("Disable Logs")
209 6ae5d8db Adam Menz
                        .setMessage("Are you sure you want to disable logs for this Load Balancer?")
210 6ae5d8db Adam Menz
                        .setPositiveButton("Enable", new DialogInterface.OnClickListener() {
211 6ae5d8db Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
212 6ae5d8db Adam Menz
                                        new SetLoggingTask().execute();        
213 6ae5d8db Adam Menz
                                }
214 6ae5d8db Adam Menz
                        })
215 6ae5d8db Adam Menz
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
216 6ae5d8db Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
217 01340459 Adam Menz
                                        // do nothing
218 6ae5d8db Adam Menz
                                }
219 6ae5d8db Adam Menz
                        })
220 6ae5d8db Adam Menz
                        .create();
221 6ae5d8db Adam Menz
                case R.id.session_persistence_button:
222 6ae5d8db Adam Menz
                        return new AlertDialog.Builder(ViewLoadBalancerActivity.this)
223 6ae5d8db Adam Menz
                        .setIcon(R.drawable.alert_dialog_icon)
224 6ae5d8db Adam Menz
                        .setTitle("Session Persistence")
225 6ae5d8db Adam Menz
                        .setMessage("Are you sure you want to disable session persistence for this Load Balancer?")
226 6ae5d8db Adam Menz
                        .setPositiveButton("Enable", new DialogInterface.OnClickListener() {
227 6ae5d8db Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
228 6ae5d8db Adam Menz
                                        new SessionPersistenceTask().execute();
229 6ae5d8db Adam Menz
                                }
230 6ae5d8db Adam Menz
                        })
231 6ae5d8db Adam Menz
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
232 6ae5d8db Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
233 01340459 Adam Menz
                                        // do nothing
234 6ae5d8db Adam Menz
                                }
235 6ae5d8db Adam Menz
                        })
236 6ae5d8db Adam Menz
                        .create();
237 4f9d1a69 Adam Menz
                }
238 4f9d1a69 Adam Menz
                return null;
239 4f9d1a69 Adam Menz
        }
240 4f9d1a69 Adam Menz
241 6ae5d8db Adam Menz
        @Override
242 01340459 Adam Menz
        //Need to show different message depending on the state
243 01340459 Adam Menz
        //of connection_logs/session_persistence
244 6ae5d8db Adam Menz
        protected void onPrepareDialog(int id, Dialog dialog){
245 6ae5d8db Adam Menz
                switch (id) {
246 6ae5d8db Adam Menz
                case R.id.connection_log_button:
247 6ae5d8db Adam Menz
                        String logTitle;
248 6ae5d8db Adam Menz
                        String logMessage;
249 6ae5d8db Adam Menz
                        String logButton;
250 6ae5d8db Adam Menz
                        if(loadBalancer.getIsConnectionLoggingEnabled().equals("true")){
251 6ae5d8db Adam Menz
                                logTitle = "Disable Logs";
252 6ae5d8db Adam Menz
                                logMessage = "Are you sure you want to disable logs for this Load Balancer?";
253 6ae5d8db Adam Menz
                                logButton = "Disable";
254 6ae5d8db Adam Menz
                        } else {
255 6ae5d8db Adam Menz
                                logTitle = "Enable Logs";
256 6ae5d8db Adam Menz
                                logMessage = "Log files will be processed every hour and stored in your Cloud Files account. " +
257 01340459 Adam Menz
                                "Standard Cloud Files storage and transfer fees will be accessed for the use of this feature." +
258 01340459 Adam Menz
                                "\n\nAre you sure you want to enable logs for this Load Balancer?";
259 6ae5d8db Adam Menz
                                logButton = "Enable";
260 6ae5d8db Adam Menz
                        }
261 6ae5d8db Adam Menz
                        ((AlertDialog)dialog).setTitle(logTitle);
262 6ae5d8db Adam Menz
                        ((AlertDialog)dialog).setMessage(logMessage);
263 6ae5d8db Adam Menz
                        Button sessionLogButton = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON1);
264 6ae5d8db Adam Menz
                        sessionLogButton.setText(logButton);
265 6ae5d8db Adam Menz
                        sessionLogButton.invalidate();
266 6ae5d8db Adam Menz
                        break;
267 6ae5d8db Adam Menz
                case R.id.session_persistence_button:
268 6ae5d8db Adam Menz
                        String sessionMessage;
269 6ae5d8db Adam Menz
                        String sessionButton;
270 6ae5d8db Adam Menz
                        if(loadBalancer.getSessionPersistence() != null){
271 6ae5d8db Adam Menz
                                Log.d("info", "in sessionpersistence != null");
272 6ae5d8db Adam Menz
                                sessionMessage = "Are you sure you want to disable session persistence for this Load Balancer?";
273 6ae5d8db Adam Menz
                                sessionButton = "Disable";
274 6ae5d8db Adam Menz
                        } else {
275 6ae5d8db Adam Menz
                                Log.d("info", "in sessionpersistence == null");
276 6ae5d8db Adam Menz
                                sessionMessage = "Are you sure you want to enable session persistence for this Load Balancer?";
277 6ae5d8db Adam Menz
                                sessionButton = "Enable";
278 6ae5d8db Adam Menz
                        }
279 6ae5d8db Adam Menz
                        ((AlertDialog)dialog).setMessage(sessionMessage);
280 6ae5d8db Adam Menz
                        Button sessionPersistButton = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON1);
281 6ae5d8db Adam Menz
                        sessionPersistButton.setText(sessionButton);
282 6ae5d8db Adam Menz
                        sessionPersistButton.invalidate();
283 6ae5d8db Adam Menz
                        break;
284 6ae5d8db Adam Menz
                }
285 6ae5d8db Adam Menz
        }
286 6ae5d8db Adam Menz
287 01340459 Adam Menz
        //Displays all the load balancer data
288 4f9d1a69 Adam Menz
        private void loadLoadBalancerData() {
289 b722cab3 Adam Menz
                if(loadBalancer != null){
290 6ae5d8db Adam Menz
                        /*
291 6ae5d8db Adam Menz
                         * need to update the text on button if 
292 6ae5d8db Adam Menz
                         * it has changed
293 6ae5d8db Adam Menz
                         */
294 6ae5d8db Adam Menz
                        setLogButtonText();
295 6ae5d8db Adam Menz
                        setSessionButtonText();
296 01340459 Adam Menz
297 6ae5d8db Adam Menz
298 b722cab3 Adam Menz
                        TextView name = (TextView) findViewById(R.id.view_name);
299 b722cab3 Adam Menz
                        name.setText(loadBalancer.getName());
300 b722cab3 Adam Menz
301 b722cab3 Adam Menz
                        TextView id = (TextView) findViewById(R.id.view_lb_id);
302 b722cab3 Adam Menz
                        id.setText(loadBalancer.getId());
303 4f9d1a69 Adam Menz
304 b722cab3 Adam Menz
                        TextView protocol = (TextView) findViewById(R.id.view_protocol);
305 b722cab3 Adam Menz
                        protocol.setText(loadBalancer.getProtocol());
306 4f9d1a69 Adam Menz
307 b722cab3 Adam Menz
                        TextView port = (TextView) findViewById(R.id.view_port);
308 b722cab3 Adam Menz
                        port.setText(loadBalancer.getPort());
309 4f9d1a69 Adam Menz
310 b722cab3 Adam Menz
                        TextView algorithm = (TextView) findViewById(R.id.view_algorithm);
311 c4a37180 Adam Menz
                        algorithm.setText(getPrettyAlgoName(loadBalancer.getAlgorithm()));
312 b722cab3 Adam Menz
313 b722cab3 Adam Menz
                        TextView status = (TextView) findViewById(R.id.view_status);
314 b722cab3 Adam Menz
                        if (!"ACTIVE".equals(loadBalancer.getStatus())) {
315 b722cab3 Adam Menz
                                status.setText(loadBalancer.getStatus());
316 b722cab3 Adam Menz
                                pollLoadBalancerTask = new PollLoadBalancerTask();
317 b722cab3 Adam Menz
                                pollLoadBalancerTask.execute((Void[]) null);
318 b722cab3 Adam Menz
                        } else {
319 b722cab3 Adam Menz
                                status.setText(loadBalancer.getStatus());
320 b722cab3 Adam Menz
                        }
321 4f9d1a69 Adam Menz
322 b722cab3 Adam Menz
                        status.setText(loadBalancer.getStatus());
323 4f9d1a69 Adam Menz
324 b722cab3 Adam Menz
                        TextView connectionLogging = (TextView) findViewById(R.id.view_islogging);
325 01340459 Adam Menz
                        String isConnectionLogging = loadBalancer.getIsConnectionLoggingEnabled();
326 01340459 Adam Menz
                        if(isConnectionLogging != null && isConnectionLogging.equals("true")){
327 6ae5d8db Adam Menz
                                connectionLogging.setText("Enabled");
328 6ae5d8db Adam Menz
                        } else {
329 6ae5d8db Adam Menz
                                connectionLogging.setText("Disabled");
330 6ae5d8db Adam Menz
                        }
331 4f9d1a69 Adam Menz
332 b722cab3 Adam Menz
                        loadVirutalIpData();
333 b722cab3 Adam Menz
                }
334 4f9d1a69 Adam Menz
        }
335 c4a37180 Adam Menz
        
336 c4a37180 Adam Menz
        private String getPrettyAlgoName(String name){
337 c4a37180 Adam Menz
                if(name == null || name.length() == 0){
338 c4a37180 Adam Menz
                        return "";
339 c4a37180 Adam Menz
                } else {
340 c4a37180 Adam Menz
                        String result = name.charAt(0) + "";
341 c4a37180 Adam Menz
                        boolean previousWasSpace = false;;
342 c4a37180 Adam Menz
                        for(int i = 1; i < name.length(); i++){
343 c4a37180 Adam Menz
                                char curLetter = name.charAt(i);
344 c4a37180 Adam Menz
                                if(curLetter == '_'){
345 c4a37180 Adam Menz
                                        result += " ";
346 c4a37180 Adam Menz
                                        previousWasSpace = true;
347 c4a37180 Adam Menz
                                } else {
348 c4a37180 Adam Menz
                                        if(previousWasSpace){
349 c4a37180 Adam Menz
                                                result += Character.toUpperCase(curLetter);
350 c4a37180 Adam Menz
                                        } else {
351 c4a37180 Adam Menz
                                                result += Character.toLowerCase(curLetter);
352 c4a37180 Adam Menz
                                        }
353 c4a37180 Adam Menz
                                        previousWasSpace = false;
354 c4a37180 Adam Menz
                                }
355 c4a37180 Adam Menz
                        }
356 c4a37180 Adam Menz
                        return result;
357 c4a37180 Adam Menz
                }
358 c4a37180 Adam Menz
        }
359 4f9d1a69 Adam Menz
360 4f9d1a69 Adam Menz
        private void loadVirutalIpData() {
361 b722cab3 Adam Menz
                int layoutIndex = 0;
362 b722cab3 Adam Menz
                LinearLayout layout = (LinearLayout) this.findViewById(R.id.vip_addresses);    
363 b722cab3 Adam Menz
                layout.removeAllViews();
364 b722cab3 Adam Menz
                ArrayList<VirtualIp> virtualIps = loadBalancer.getVirtualIps();
365 b722cab3 Adam Menz
                //maybe null if the lb has been deleted
366 b722cab3 Adam Menz
                if(virtualIps != null){
367 b722cab3 Adam Menz
                        for (int i = 0; i < virtualIps.size(); i++) {
368 b722cab3 Adam Menz
                                TextView tv = new TextView(this.getBaseContext());
369 b722cab3 Adam Menz
                                tv.setLayoutParams(((TextView)findViewById(R.id.view_port)).getLayoutParams()); // easy quick styling! :)
370 b722cab3 Adam Menz
                                tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
371 b722cab3 Adam Menz
                                tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
372 b722cab3 Adam Menz
                                tv.setTextColor(Color.WHITE);
373 b722cab3 Adam Menz
                                tv.setText(virtualIps.get(i).getAddress());
374 b722cab3 Adam Menz
                                layout.addView(tv, layoutIndex++);
375 b722cab3 Adam Menz
                        }
376 b722cab3 Adam Menz
                }
377 b722cab3 Adam Menz
378 4f9d1a69 Adam Menz
                loadNodeData();
379 4f9d1a69 Adam Menz
        }
380 4f9d1a69 Adam Menz
381 4f9d1a69 Adam Menz
        private void loadNodeData() {
382 b722cab3 Adam Menz
                int layoutIndex = 0; // public IPs start here
383 b722cab3 Adam Menz
                LinearLayout layout = (LinearLayout) this.findViewById(R.id.node_addresses);   
384 b722cab3 Adam Menz
                layout.removeAllViews();
385 b722cab3 Adam Menz
                ArrayList<Node> nodeIps = loadBalancer.getNodes();
386 b5f66d0e Adam Menz
                if(nodeIps == null){
387 b5f66d0e Adam Menz
                        nodeIps = new ArrayList<Node>();
388 b5f66d0e Adam Menz
                }
389 6ae5d8db Adam Menz
390 b722cab3 Adam Menz
                /*
391 b722cab3 Adam Menz
                 * need to sort the addresses because during polling
392 b722cab3 Adam Menz
                 * their order can change and the display becomes
393 b722cab3 Adam Menz
                 * jumpy
394 b722cab3 Adam Menz
                 */
395 b722cab3 Adam Menz
                ArrayList<String> addresses = new ArrayList<String>();
396 b722cab3 Adam Menz
                for(Node n : nodeIps){
397 b722cab3 Adam Menz
                        addresses.add(n.getAddress());
398 b722cab3 Adam Menz
                }
399 6ae5d8db Adam Menz
400 b722cab3 Adam Menz
                Collections.sort(addresses);
401 6ae5d8db Adam Menz
402 b722cab3 Adam Menz
                //may be null if lb has been deleted
403 b722cab3 Adam Menz
                if(nodeIps != null){
404 b722cab3 Adam Menz
                        for (int i = 0; i < nodeIps.size(); i++) {
405 b722cab3 Adam Menz
                                TextView tv = new TextView(this.getBaseContext());
406 b722cab3 Adam Menz
                                tv.setLayoutParams(((TextView)findViewById(R.id.view_port)).getLayoutParams()); // easy quick styling! :)
407 b722cab3 Adam Menz
                                tv.setTypeface(tv.getTypeface(), 1); // 1 == bold
408 b722cab3 Adam Menz
                                tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
409 b722cab3 Adam Menz
                                tv.setTextColor(Color.WHITE);
410 b722cab3 Adam Menz
                                tv.setText(addresses.get(i));
411 b722cab3 Adam Menz
                                layout.addView(tv, layoutIndex++);
412 b722cab3 Adam Menz
                        }
413 b722cab3 Adam Menz
                }
414 4f9d1a69 Adam Menz
        }
415 b722cab3 Adam Menz
416 4f9d1a69 Adam Menz
        //setup menu for when menu button is pressed
417 4f9d1a69 Adam Menz
        public boolean onCreateOptionsMenu(Menu menu) {
418 4f9d1a69 Adam Menz
                super.onCreateOptionsMenu(menu);
419 4f9d1a69 Adam Menz
                MenuInflater inflater = getMenuInflater();
420 4f9d1a69 Adam Menz
                inflater.inflate(R.menu.view_loadbalancer_menu, menu);
421 4f9d1a69 Adam Menz
                return true;
422 4f9d1a69 Adam Menz
        } 
423 b722cab3 Adam Menz
424 b722cab3 Adam Menz
        @Override 
425 b722cab3 Adam Menz
        public boolean onOptionsItemSelected(MenuItem item) {
426 b722cab3 Adam Menz
                switch (item.getItemId()) {
427 b722cab3 Adam Menz
                case R.id.refresh_loadbalancer:
428 b722cab3 Adam Menz
                        new LoadLoadBalancerTask().execute((Void[]) null);   
429 b722cab3 Adam Menz
                        return true;
430 b722cab3 Adam Menz
                }        
431 b722cab3 Adam Menz
                return false;
432 b722cab3 Adam Menz
        } 
433 b722cab3 Adam Menz
434 b722cab3 Adam Menz
        @Override
435 01340459 Adam Menz
        //have been kicked back from another activity,
436 01340459 Adam Menz
        //so refresh the load balancer data
437 4f9d1a69 Adam Menz
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
438 4f9d1a69 Adam Menz
                super.onActivityResult(requestCode, resultCode, data);
439 4f9d1a69 Adam Menz
                if (resultCode == RESULT_OK) {
440 b722cab3 Adam Menz
                        new LoadLoadBalancerTask().execute((Void[]) null);   
441 4f9d1a69 Adam Menz
                }
442 4f9d1a69 Adam Menz
        }
443 4f9d1a69 Adam Menz
444 4f9d1a69 Adam Menz
        // HTTP request tasks
445 b722cab3 Adam Menz
        private class PollLoadBalancerTask extends AsyncTask<Void, Void, LoadBalancer> {
446 4f9d1a69 Adam Menz
447 23bc5e75 Phillip Toohill
                @Override
448 23bc5e75 Phillip Toohill
                protected LoadBalancer doInBackground(Void... arg0) {
449 01340459 Adam Menz
                        if(pollLoadBalancerTask.isCancelled()){
450 01340459 Adam Menz
                                return null;
451 01340459 Adam Menz
                        }
452 23bc5e75 Phillip Toohill
                        try {
453 b722cab3 Adam Menz
                                loadBalancer = (new LoadBalancerManager(getContext())).getLoadBalancerById(Integer.parseInt(loadBalancer.getId()));
454 23bc5e75 Phillip Toohill
                        } catch (NumberFormatException e) {
455 23bc5e75 Phillip Toohill
                                // we're polling, so need to show exceptions
456 23bc5e75 Phillip Toohill
                        } catch (LoadBalancersException e) {
457 23bc5e75 Phillip Toohill
                                // we're polling, so need to show exceptions
458 23bc5e75 Phillip Toohill
                        }
459 b722cab3 Adam Menz
                        return loadBalancer;
460 23bc5e75 Phillip Toohill
                }
461 4f9d1a69 Adam Menz
462 23bc5e75 Phillip Toohill
                @Override
463 23bc5e75 Phillip Toohill
                protected void onPostExecute(LoadBalancer result) {
464 b722cab3 Adam Menz
                        loadBalancer = result;
465 23bc5e75 Phillip Toohill
                        loadLoadBalancerData();
466 23bc5e75 Phillip Toohill
                }
467 4f9d1a69 Adam Menz
        }
468 4f9d1a69 Adam Menz
469 23bc5e75 Phillip Toohill
        private class LoadLoadBalancerTask extends AsyncTask<Void, Void, LoadBalancer> {
470 b722cab3 Adam Menz
471 23bc5e75 Phillip Toohill
                private LoadBalancersException exception;
472 b722cab3 Adam Menz
                private String loadBalancerId;
473 23bc5e75 Phillip Toohill
474 23bc5e75 Phillip Toohill
                protected void onPreExecute() {
475 b722cab3 Adam Menz
                        loadBalancerId = loadBalancer.getId();
476 b722cab3 Adam Menz
                        /*
477 b722cab3 Adam Menz
                         * set to null, so if config change occurs
478 b722cab3 Adam Menz
                         * it will be reloaded in onCreate()
479 b722cab3 Adam Menz
                         */
480 b722cab3 Adam Menz
                        loadBalancer = null;
481 4f9d1a69 Adam Menz
                        showDialog();
482 4f9d1a69 Adam Menz
                }
483 4f9d1a69 Adam Menz
484 23bc5e75 Phillip Toohill
                @Override
485 23bc5e75 Phillip Toohill
                protected LoadBalancer doInBackground(Void... arg0) {
486 4f9d1a69 Adam Menz
                        LoadBalancer result = null;
487 23bc5e75 Phillip Toohill
                        try {
488 b722cab3 Adam Menz
                                result = (new LoadBalancerManager(getContext())).getLoadBalancerById(Integer.parseInt(loadBalancerId));
489 23bc5e75 Phillip Toohill
                        } catch (LoadBalancersException e) {
490 23bc5e75 Phillip Toohill
                                exception = e;
491 23bc5e75 Phillip Toohill
                        }
492 4f9d1a69 Adam Menz
                        return result;
493 23bc5e75 Phillip Toohill
                }
494 23bc5e75 Phillip Toohill
495 23bc5e75 Phillip Toohill
                @Override
496 23bc5e75 Phillip Toohill
                protected void onPostExecute(LoadBalancer result) {
497 b722cab3 Adam Menz
                        hideDialog();
498 23bc5e75 Phillip Toohill
                        if (exception != null) {
499 23bc5e75 Phillip Toohill
                                showAlert("Error", exception.getMessage());
500 23bc5e75 Phillip Toohill
                        }
501 b722cab3 Adam Menz
                        loadBalancer = result;
502 b722cab3 Adam Menz
503 01340459 Adam Menz
                        setUpButtons();
504 23bc5e75 Phillip Toohill
                        loadLoadBalancerData();
505 23bc5e75 Phillip Toohill
                }
506 4f9d1a69 Adam Menz
        } 
507 4f9d1a69 Adam Menz
508 4f9d1a69 Adam Menz
        public class DeleteLoadBalancerTask extends AsyncTask<Void, Void, HttpBundle> {
509 4f9d1a69 Adam Menz
510 4f9d1a69 Adam Menz
                private CloudServersException exception;
511 4f9d1a69 Adam Menz
512 4f9d1a69 Adam Menz
                @Override
513 4f9d1a69 Adam Menz
                protected void onPreExecute(){
514 4f9d1a69 Adam Menz
                        showDialog();
515 4f9d1a69 Adam Menz
                }
516 b722cab3 Adam Menz
517 4f9d1a69 Adam Menz
                @Override
518 4f9d1a69 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
519 4f9d1a69 Adam Menz
                        HttpBundle bundle = null;
520 4f9d1a69 Adam Menz
                        try {
521 b722cab3 Adam Menz
                                bundle = (new LoadBalancerManager(getContext())).delete(loadBalancer);
522 4f9d1a69 Adam Menz
                        } catch (CloudServersException e) {
523 4f9d1a69 Adam Menz
                                exception = e;
524 4f9d1a69 Adam Menz
                        }
525 4f9d1a69 Adam Menz
                        return bundle;
526 4f9d1a69 Adam Menz
                }
527 4f9d1a69 Adam Menz
528 4f9d1a69 Adam Menz
                @Override
529 4f9d1a69 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
530 b722cab3 Adam Menz
                        hideDialog();
531 4f9d1a69 Adam Menz
                        HttpResponse response = bundle.getResponse();
532 4f9d1a69 Adam Menz
                        if (response != null) {
533 4f9d1a69 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
534 4f9d1a69 Adam Menz
                                if (statusCode == 202) {
535 4f9d1a69 Adam Menz
                                        setResult(Activity.RESULT_OK);
536 4f9d1a69 Adam Menz
                                        finish();
537 4f9d1a69 Adam Menz
                                } else {
538 4f9d1a69 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
539 4f9d1a69 Adam Menz
                                        if ("".equals(cse.getMessage())) {
540 b722cab3 Adam Menz
                                                showError("There was a problem deleting your load balancer.", bundle);
541 4f9d1a69 Adam Menz
                                        } else {
542 b722cab3 Adam Menz
                                                showError("There was a problem deleting your load balancer: " + cse.getMessage(), bundle);
543 4f9d1a69 Adam Menz
                                        }
544 4f9d1a69 Adam Menz
                                }
545 4f9d1a69 Adam Menz
                        } else if (exception != null) {
546 b722cab3 Adam Menz
                                showError("There was a problem deleting your load balancer: " + exception.getMessage(), bundle);                                
547 4f9d1a69 Adam Menz
                        }                        
548 4f9d1a69 Adam Menz
                }
549 23bc5e75 Phillip Toohill
        }
550 4f9d1a69 Adam Menz
551 4f9d1a69 Adam Menz
552 6ae5d8db Adam Menz
        private class SetLoggingTask extends AsyncTask<Void, Void, HttpBundle> {
553 6ae5d8db Adam Menz
554 6ae5d8db Adam Menz
                private CloudServersException exception;
555 6ae5d8db Adam Menz
556 6ae5d8db Adam Menz
                @Override
557 6ae5d8db Adam Menz
                protected void onPreExecute(){
558 6ae5d8db Adam Menz
                        showDialog();
559 6ae5d8db Adam Menz
                }
560 6ae5d8db Adam Menz
561 6ae5d8db Adam Menz
                @Override
562 6ae5d8db Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
563 6ae5d8db Adam Menz
                        HttpBundle bundle = null;        
564 6ae5d8db Adam Menz
                        try {
565 6ae5d8db Adam Menz
                                bundle = (new LoadBalancerManager(context)).setLogging(loadBalancer, !Boolean.valueOf(loadBalancer.getIsConnectionLoggingEnabled()));
566 6ae5d8db Adam Menz
                        } catch (CloudServersException e) {
567 6ae5d8db Adam Menz
                                exception = e;
568 6ae5d8db Adam Menz
                        }
569 6ae5d8db Adam Menz
                        return bundle;
570 6ae5d8db Adam Menz
                }
571 6ae5d8db Adam Menz
572 6ae5d8db Adam Menz
                @Override
573 6ae5d8db Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
574 6ae5d8db Adam Menz
                        hideDialog();
575 6ae5d8db Adam Menz
                        HttpResponse response = bundle.getResponse();
576 6ae5d8db Adam Menz
                        if (response != null) {
577 6ae5d8db Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();                        
578 6ae5d8db Adam Menz
                                if (statusCode == 202 || statusCode == 204) {
579 6ae5d8db Adam Menz
                                        pollLoadBalancerTask = new PollLoadBalancerTask();
580 6ae5d8db Adam Menz
                                        pollLoadBalancerTask.execute((Void[]) null);
581 6ae5d8db Adam Menz
                                } else {                                        
582 6ae5d8db Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
583 6ae5d8db Adam Menz
                                        if ("".equals(cse.getMessage())) {
584 6ae5d8db Adam Menz
                                                showError("There was a problem changing your log settings.", bundle);
585 6ae5d8db Adam Menz
                                        } else {
586 6ae5d8db Adam Menz
                                                showError("There was a problem changing your log settings: " + cse.getMessage(), bundle);
587 6ae5d8db Adam Menz
                                        }                                        
588 6ae5d8db Adam Menz
                                }
589 6ae5d8db Adam Menz
                        } else if (exception != null) {
590 6ae5d8db Adam Menz
                                showError("There was a problem changing your log settings: " + exception.getMessage(), bundle);
591 6ae5d8db Adam Menz
592 6ae5d8db Adam Menz
                        }
593 6ae5d8db Adam Menz
594 6ae5d8db Adam Menz
                }
595 6ae5d8db Adam Menz
        }
596 01340459 Adam Menz
597 6ae5d8db Adam Menz
        private class SessionPersistenceTask extends AsyncTask<Void, Void, HttpBundle> {
598 6ae5d8db Adam Menz
599 6ae5d8db Adam Menz
                private CloudServersException exception;
600 6ae5d8db Adam Menz
601 6ae5d8db Adam Menz
                @Override
602 6ae5d8db Adam Menz
                protected void onPreExecute(){
603 6ae5d8db Adam Menz
                        showDialog();
604 6ae5d8db Adam Menz
                }
605 6ae5d8db Adam Menz
606 6ae5d8db Adam Menz
                @Override
607 6ae5d8db Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
608 6ae5d8db Adam Menz
                        HttpBundle bundle = null;        
609 6ae5d8db Adam Menz
                        try {
610 6ae5d8db Adam Menz
                                String currentSetting = loadBalancer.getSessionPersistence();
611 6ae5d8db Adam Menz
                                if(currentSetting == null){
612 6ae5d8db Adam Menz
                                        bundle = (new LoadBalancerManager(context)).setSessionPersistence(loadBalancer, "HTTP_COOKIE");
613 6ae5d8db Adam Menz
                                } else {
614 6ae5d8db Adam Menz
                                        bundle = (new LoadBalancerManager(context)).disableSessionPersistence(loadBalancer);
615 6ae5d8db Adam Menz
                                }
616 6ae5d8db Adam Menz
                        } catch (CloudServersException e) {
617 6ae5d8db Adam Menz
                                exception = e;
618 6ae5d8db Adam Menz
                        }
619 6ae5d8db Adam Menz
                        return bundle;
620 6ae5d8db Adam Menz
                }
621 6ae5d8db Adam Menz
622 6ae5d8db Adam Menz
                @Override
623 6ae5d8db Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
624 6ae5d8db Adam Menz
                        hideDialog();
625 6ae5d8db Adam Menz
                        HttpResponse response = bundle.getResponse();
626 6ae5d8db Adam Menz
                        if (response != null) {
627 6ae5d8db Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();                        
628 6ae5d8db Adam Menz
                                if (statusCode == 202 || statusCode == 200) {
629 6ae5d8db Adam Menz
                                        pollLoadBalancerTask = new PollLoadBalancerTask();
630 6ae5d8db Adam Menz
                                        pollLoadBalancerTask.execute((Void[]) null);
631 6ae5d8db Adam Menz
                                } else {                                        
632 6ae5d8db Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
633 6ae5d8db Adam Menz
                                        if ("".equals(cse.getMessage())) {
634 6ae5d8db Adam Menz
                                                showError("There was a problem changing your session persistence settings.", bundle);
635 6ae5d8db Adam Menz
                                        } else {
636 6ae5d8db Adam Menz
                                                showError("There was a problem changing your session persistence settings: " + cse.getMessage(), bundle);
637 6ae5d8db Adam Menz
                                        }                                        
638 6ae5d8db Adam Menz
                                }
639 6ae5d8db Adam Menz
                        } else if (exception != null) {
640 6ae5d8db Adam Menz
                                showError("There was a problem changing your session persistence settings: " + exception.getMessage(), bundle);
641 6ae5d8db Adam Menz
642 6ae5d8db Adam Menz
                        }
643 6ae5d8db Adam Menz
644 6ae5d8db Adam Menz
                }
645 6ae5d8db Adam Menz
        }
646 6ae5d8db Adam Menz
647 6ae5d8db Adam Menz
648 23bc5e75 Phillip Toohill
}