Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / SharedVipActivity.java @ 403bb53b

History | View | Annotate | Download (5.8 kB)

1
package com.rackspacecloud.android;
2

    
3
import java.util.ArrayList;
4

    
5
import android.content.Context;
6
import android.content.Intent;
7
import android.os.AsyncTask;
8
import android.os.Bundle;
9
import android.util.Log;
10
import android.view.LayoutInflater;
11
import android.view.View;
12
import android.view.ViewGroup;
13
import android.widget.ArrayAdapter;
14
import android.widget.ListView;
15
import android.widget.TextView;
16

    
17
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer;
18
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancerManager;
19
import com.rackspace.cloud.loadbalancer.api.client.VirtualIp;
20
import com.rackspace.cloud.loadbalancer.api.client.http.LoadBalancersException;
21

    
22
public class SharedVipActivity extends CloudListActivity {
23

    
24
        private Context context;
25
        private LoadBalancer[] loadBalancers;
26
        private VirtualIp[] vips;
27
        private String loadBalancerPort;
28
        private String loadBalancerRegion;
29
        
30
        @Override
31
        public void onCreate(Bundle savedInstanceState) {
32
                super.onCreate(savedInstanceState);
33
                setContentView(R.layout.list_vips);
34
                context = getApplicationContext();
35
                loadBalancerPort = (String) this.getIntent().getExtras().get("loadBalancerPort");
36
                loadBalancerRegion = (String) this.getIntent().getExtras().get("loadBalancerRegion");
37
                restoreState(savedInstanceState);
38
        }
39
        
40
        @Override
41
        protected void onSaveInstanceState(Bundle outState) {
42
                super.onSaveInstanceState(outState);
43
                outState.putSerializable("loadBalancers", loadBalancers);
44
        }
45

    
46
        protected void restoreState(Bundle state) {
47
                super.restoreState(state);
48
                
49
                if (state != null && state.containsKey("loadBalancers") && state.getSerializable("loadBalancers") != null) {
50
                        loadBalancers = (LoadBalancer[]) state.getSerializable("loadBalancers");
51
                        if (loadBalancers.length == 0) {
52
                                displayNoLoadBalancerCell();
53
                        } else {
54
                                getListView().setDividerHeight(1); // restore divider lines
55
                                setListAdapter(new VirtualIpAdapter());
56
                        }
57
                } else {
58
                        loadLoadBalancers();
59
                }
60
        }
61

    
62
        private void displayNoLoadBalancerCell() {
63
                String a[] = new String[1];
64
                a[0] = "No Load Balancers";
65
                setListAdapter(new ArrayAdapter<String>(this, R.layout.noloadbalancerscell, R.id.no_loadbalancers_label, a));
66
                getListView().setTextFilterEnabled(true);
67
                getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row
68
                getListView().setItemsCanFocus(false);
69
        }
70
        
71
        private void setLoadBalancersList(ArrayList<VirtualIp> vips) {
72
                if (vips == null) {
73
                        vips = new ArrayList<VirtualIp>();
74
                }
75
                
76
                this.vips = new VirtualIp[vips.size()];
77

    
78
                if (vips != null) {
79
                        for (int i = 0; i < vips.size(); i++) {
80
                                VirtualIp virtualIp = vips.get(i);
81
                                this.vips[i] = virtualIp;
82
                        }
83
                }
84

    
85
                if (this.vips.length == 0) {
86
                        displayNoLoadBalancerCell();
87
                } else {
88
                        getListView().setDividerHeight(1); // restore divider lines
89
                        setListAdapter(new VirtualIpAdapter());
90
                }
91
        }
92
        
93
        protected void onListItemClick(ListView l, View v, int position, long id) {
94
                
95
                /*
96
                 * only allow clicks on vips that do not have the same port
97
                 * as the lb and are in same region
98
                 */
99
                if (vips != null && vips.length > 0) {
100
                        Log.d("info", "vip loc: " + vips[position].getLoadBalancer().getRegion() + " lb region: " + loadBalancerRegion);
101
                        if(vips[position].getLoadBalancer().getPort().equals(loadBalancerPort)){
102
                                showToast("Cannot use this Virtual IP. The same port cannot be used on multiple load balancers for a Shared Virtual IP.");
103
                        } else if(!vips[position].getLoadBalancer().getRegion().equals(loadBalancerRegion)){
104
                                showToast("Cannot use this Virtual IP. The Shared Virtual IP must come the same region as the new load balancer.");
105
                        } else {
106
                                Intent viewIntent = new Intent();
107
                                viewIntent.putExtra("selectedVip", vips[position]);
108
                                setResult(RESULT_OK, viewIntent);
109
                                finish();
110
                        }
111
                }
112
        }
113
        
114
        // * Adapter/
115
        class VirtualIpAdapter extends ArrayAdapter<VirtualIp> {
116

    
117
                VirtualIpAdapter() {
118
                        super(SharedVipActivity.this,
119
                                        R.layout.sharedvipcell, vips);
120
                }
121

    
122
                public View getView(int position, View convertView, ViewGroup parent) {
123
                        VirtualIp virtualIp = vips[position];
124
                        LayoutInflater inflater = getLayoutInflater();
125
                        View row = inflater.inflate(R.layout.sharedvipcell,
126
                                        parent, false);
127

    
128
                        TextView vipAddress = (TextView) row.findViewById(R.id.vip_address);
129
                        vipAddress.setText(virtualIp.getAddress());
130

    
131
                        TextView type = (TextView) row.findViewById(R.id.vip_type);
132
                        type.setText(virtualIp.getType());
133
                        
134
                        TextView name = (TextView) row.findViewById(R.id.load_balancer_name);
135
                        name.setText(virtualIp.getLoadBalancer().getName());
136
                        
137
                        TextView protocol = (TextView) row.findViewById(R.id.vip_protocol);
138
                        protocol.setText(virtualIp.getLoadBalancer().getProtocol() 
139
                                        + "(" + virtualIp.getLoadBalancer().getPort() + ")");
140
                        
141
                        return (row);
142
                }
143
        }
144
        
145
        private void loadLoadBalancers() {
146
                new LoadLoadBalancersTask().execute((Void[]) null);
147
        }
148
        
149
        private class LoadLoadBalancersTask extends AsyncTask<Void, Void, ArrayList<LoadBalancer>> {
150
                private LoadBalancersException exception;
151
        
152
                @Override
153
                protected void onPreExecute(){
154
                        showDialog();
155
                }
156
                
157
                @Override
158
                protected ArrayList<LoadBalancer> doInBackground(Void... arg0) {
159
                        ArrayList<LoadBalancer> loadBalancers = null;
160
                        try {
161
                                loadBalancers = (new LoadBalancerManager(context)).createList();
162
                        } catch (LoadBalancersException e) {
163
                                exception = e;
164
                        }
165
                        return loadBalancers;
166
                }
167
        
168
                @Override
169
                protected void onPostExecute(ArrayList<LoadBalancer> result) {
170
                        hideDialog();
171
                        if (exception != null) {
172
                                showAlert("Error", exception.getMessage());
173
                        }
174
                        ArrayList<VirtualIp> vipList = getVipList(result);
175
                        setLoadBalancersList(vipList);
176
                }
177
        }
178
        
179
        private ArrayList<VirtualIp> getVipList(ArrayList<LoadBalancer> result){
180
                ArrayList<VirtualIp> vips = new ArrayList<VirtualIp>();
181
                for(LoadBalancer lb : result){
182
                        for(VirtualIp ip : lb.getVirtualIps()){
183
                                ip.setLoadBalancer(lb);
184
                                vips.add(ip);
185
                        }
186
                }
187
                return vips;
188
        }
189
        
190
}