root / src / com / rackspacecloud / android / EditNodesActivity.java @ ffd154e6
History | View | Annotate | Download (5.7 kB)
1 | 4f9d1a69 | Adam Menz | package com.rackspacecloud.android; |
---|---|---|---|
2 | 4f9d1a69 | Adam Menz | |
3 | 4f9d1a69 | Adam Menz | import java.util.ArrayList; |
4 | 4f9d1a69 | Adam Menz | |
5 | 4f9d1a69 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer; |
6 | 4f9d1a69 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.Node; |
7 | b722cab3 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.NodeManager; |
8 | 232548ba | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.http.LoadBalancersException; |
9 | 4f9d1a69 | Adam Menz | |
10 | 4f9d1a69 | Adam Menz | import android.content.Intent; |
11 | 4f9d1a69 | Adam Menz | import android.os.AsyncTask; |
12 | 4f9d1a69 | Adam Menz | import android.os.Bundle; |
13 | 4f9d1a69 | Adam Menz | import android.view.LayoutInflater; |
14 | 4f9d1a69 | Adam Menz | import android.view.View; |
15 | 4f9d1a69 | Adam Menz | import android.view.View.OnClickListener; |
16 | 4f9d1a69 | Adam Menz | import android.view.ViewGroup; |
17 | 4f9d1a69 | Adam Menz | import android.widget.ArrayAdapter; |
18 | 4f9d1a69 | Adam Menz | import android.widget.Button; |
19 | 4f9d1a69 | Adam Menz | import android.widget.ListView; |
20 | 4f9d1a69 | Adam Menz | import android.widget.TextView; |
21 | 4f9d1a69 | Adam Menz | |
22 | b722cab3 | Adam Menz | public class EditNodesActivity extends CloudListActivity { |
23 | 4f9d1a69 | Adam Menz | |
24 | 4f9d1a69 | Adam Menz | private static final int EDIT_NODE_CODE = 299; |
25 | 4f9d1a69 | Adam Menz | private static final int NODE_DELETED_CODE = 389; |
26 | b722cab3 | Adam Menz | //private static final int ADD_MORE_NODES_CODE = 165;
|
27 | 4f9d1a69 | Adam Menz | |
28 | 4f9d1a69 | Adam Menz | private ArrayList<Node> nodes; |
29 | 4f9d1a69 | Adam Menz | private LoadBalancer loadBalancer;
|
30 | b722cab3 | Adam Menz | private int cellType; |
31 | b722cab3 | Adam Menz | |
32 | 4f9d1a69 | Adam Menz | @SuppressWarnings("unchecked") |
33 | 4f9d1a69 | Adam Menz | @Override
|
34 | 4f9d1a69 | Adam Menz | public void onCreate(Bundle savedInstanceState) { |
35 | 4f9d1a69 | Adam Menz | super.onCreate(savedInstanceState);
|
36 | b5f66d0e | Adam Menz | setContentView(R.layout.editnodes); |
37 | 4f9d1a69 | Adam Menz | nodes = (ArrayList<Node>) this.getIntent().getExtras().get("nodes"); |
38 | 4f9d1a69 | Adam Menz | loadBalancer = (LoadBalancer) this.getIntent().getExtras().get("loadBalancer"); |
39 | 4f9d1a69 | Adam Menz | displayNodes(); |
40 | 4f9d1a69 | Adam Menz | restoreState(savedInstanceState); |
41 | 4f9d1a69 | Adam Menz | } |
42 | 4f9d1a69 | Adam Menz | |
43 | 4f9d1a69 | Adam Menz | @Override
|
44 | 4f9d1a69 | Adam Menz | protected void onSaveInstanceState(Bundle outState) { |
45 | 4f9d1a69 | Adam Menz | super.onSaveInstanceState(outState);
|
46 | 4f9d1a69 | Adam Menz | outState.putSerializable("nodes", nodes);
|
47 | 4f9d1a69 | Adam Menz | } |
48 | 4f9d1a69 | Adam Menz | |
49 | 4f9d1a69 | Adam Menz | @SuppressWarnings("unchecked") |
50 | b722cab3 | Adam Menz | protected void restoreState(Bundle state) { |
51 | b722cab3 | Adam Menz | super.restoreState(state);
|
52 | b722cab3 | Adam Menz | |
53 | 4f9d1a69 | Adam Menz | if (state != null && state.containsKey("nodes")){ |
54 | 4f9d1a69 | Adam Menz | nodes = (ArrayList<Node>) state.getSerializable("nodes"); |
55 | 4f9d1a69 | Adam Menz | displayNodes(); |
56 | 4f9d1a69 | Adam Menz | } |
57 | 4f9d1a69 | Adam Menz | |
58 | 4f9d1a69 | Adam Menz | Button submitNodes = (Button) findViewById(R.id.submit_nodes_button); |
59 | 4f9d1a69 | Adam Menz | submitNodes.setOnClickListener(new OnClickListener() {
|
60 | 4f9d1a69 | Adam Menz | |
61 | 4f9d1a69 | Adam Menz | @Override
|
62 | 4f9d1a69 | Adam Menz | public void onClick(View v) { |
63 | 4f9d1a69 | Adam Menz | Intent viewIntent = new Intent(getApplicationContext(), AddMoreNodesActivity.class);
|
64 | 4f9d1a69 | Adam Menz | viewIntent.putExtra("nodes", nodes);
|
65 | 4f9d1a69 | Adam Menz | viewIntent.putExtra("loadBalancer", loadBalancer);
|
66 | b722cab3 | Adam Menz | startActivityForResult(viewIntent, EDIT_NODE_CODE); |
67 | 4f9d1a69 | Adam Menz | } |
68 | 4f9d1a69 | Adam Menz | }); |
69 | b722cab3 | Adam Menz | |
70 | b722cab3 | Adam Menz | if(loadBalancer.getAlgorithm().contains("WEIGHTED")){ |
71 | b722cab3 | Adam Menz | cellType = R.layout.displayweightednodecell; |
72 | b722cab3 | Adam Menz | } |
73 | b722cab3 | Adam Menz | else{
|
74 | b722cab3 | Adam Menz | cellType = R.layout.displaynodecell; |
75 | b722cab3 | Adam Menz | } |
76 | 4f9d1a69 | Adam Menz | } |
77 | b722cab3 | Adam Menz | |
78 | 4f9d1a69 | Adam Menz | private void displayNodes(){ |
79 | 4f9d1a69 | Adam Menz | if (nodes.size() == 0) { |
80 | 4f9d1a69 | Adam Menz | displayNoNodesCell(); |
81 | 4f9d1a69 | Adam Menz | } else {
|
82 | 4f9d1a69 | Adam Menz | getListView().setDividerHeight(1); // restore divider lines |
83 | 4f9d1a69 | Adam Menz | setListAdapter(new NodeAdapter());
|
84 | 4f9d1a69 | Adam Menz | } |
85 | 4f9d1a69 | Adam Menz | } |
86 | 4f9d1a69 | Adam Menz | |
87 | 4f9d1a69 | Adam Menz | @Override
|
88 | 4f9d1a69 | Adam Menz | public void onBackPressed(){ |
89 | 4f9d1a69 | Adam Menz | setResult(RESULT_CANCELED); |
90 | 4f9d1a69 | Adam Menz | finish(); |
91 | 4f9d1a69 | Adam Menz | } |
92 | 4f9d1a69 | Adam Menz | |
93 | 4f9d1a69 | Adam Menz | private void displayNoNodesCell() { |
94 | 4f9d1a69 | Adam Menz | String a[] = new String[1]; |
95 | 4f9d1a69 | Adam Menz | a[0] = "No Nodes"; |
96 | 4f9d1a69 | Adam Menz | setListAdapter(new ArrayAdapter<String>(this, R.layout.noserverscell, R.id.no_servers_label, a)); |
97 | 4f9d1a69 | Adam Menz | getListView().setTextFilterEnabled(true);
|
98 | 4f9d1a69 | Adam Menz | getListView().setDividerHeight(0); // hide the dividers so it won't look like a list row |
99 | 4f9d1a69 | Adam Menz | getListView().setItemsCanFocus(false);
|
100 | 4f9d1a69 | Adam Menz | } |
101 | 4f9d1a69 | Adam Menz | |
102 | b722cab3 | Adam Menz | protected void onListItemClick(ListView l, View v, int position, long id) { |
103 | b722cab3 | Adam Menz | if (nodes != null && nodes.size() > 0) { |
104 | b722cab3 | Adam Menz | Intent viewIntent = new Intent(this, EditNodeActivity.class); |
105 | b722cab3 | Adam Menz | viewIntent.putExtra("node", nodes.get(position));
|
106 | b722cab3 | Adam Menz | viewIntent.putExtra("loadBalancer", loadBalancer);
|
107 | b722cab3 | Adam Menz | startActivityForResult(viewIntent, EDIT_NODE_CODE); // arbitrary number; never used again
|
108 | b722cab3 | Adam Menz | } |
109 | 4f9d1a69 | Adam Menz | } |
110 | 4f9d1a69 | Adam Menz | |
111 | 4f9d1a69 | Adam Menz | // * Adapter/
|
112 | 4f9d1a69 | Adam Menz | class NodeAdapter extends ArrayAdapter<Node> { |
113 | 4f9d1a69 | Adam Menz | NodeAdapter() { |
114 | b722cab3 | Adam Menz | super(EditNodesActivity.this, cellType, nodes);
|
115 | 4f9d1a69 | Adam Menz | } |
116 | 4f9d1a69 | Adam Menz | |
117 | 4f9d1a69 | Adam Menz | public View getView(int position, View convertView, ViewGroup parent) { |
118 | 4f9d1a69 | Adam Menz | |
119 | 4f9d1a69 | Adam Menz | final Node node = nodes.get(position);
|
120 | 4f9d1a69 | Adam Menz | LayoutInflater inflater = getLayoutInflater(); |
121 | b722cab3 | Adam Menz | View row = inflater.inflate(cellType, parent, false); |
122 | 4f9d1a69 | Adam Menz | |
123 | 4f9d1a69 | Adam Menz | TextView ipLabel = (TextView) row.findViewById(R.id.ip_address_text); |
124 | 4f9d1a69 | Adam Menz | ipLabel.setText(node.getAddress()); |
125 | 4f9d1a69 | Adam Menz | |
126 | 4f9d1a69 | Adam Menz | TextView conditionLabel = (TextView) row.findViewById(R.id.condition_text); |
127 | 4f9d1a69 | Adam Menz | conditionLabel.setText(node.getCondition()); |
128 | b722cab3 | Adam Menz | |
129 | 4f9d1a69 | Adam Menz | TextView portLabel = (TextView) row.findViewById(R.id.port_text); |
130 | 4f9d1a69 | Adam Menz | portLabel.setText(node.getPort()); |
131 | b722cab3 | Adam Menz | |
132 | b722cab3 | Adam Menz | if(cellType == R.layout.displayweightednodecell){
|
133 | b722cab3 | Adam Menz | TextView weightLabel = (TextView) row.findViewById(R.id.weight_text); |
134 | b722cab3 | Adam Menz | weightLabel.setText(node.getWeight()); |
135 | b722cab3 | Adam Menz | } |
136 | b722cab3 | Adam Menz | |
137 | 4f9d1a69 | Adam Menz | return(row);
|
138 | 4f9d1a69 | Adam Menz | } |
139 | 4f9d1a69 | Adam Menz | } |
140 | b722cab3 | Adam Menz | |
141 | b722cab3 | Adam Menz | // tasks
|
142 | b722cab3 | Adam Menz | private class LoadNodesTask extends AsyncTask<Void, Void, ArrayList<Node>> { |
143 | b722cab3 | Adam Menz | |
144 | b722cab3 | Adam Menz | private LoadBalancersException exception;
|
145 | b722cab3 | Adam Menz | |
146 | b722cab3 | Adam Menz | protected void onPreExecute() { |
147 | b722cab3 | Adam Menz | /*
|
148 | b722cab3 | Adam Menz | * set to null, so if config change occurs
|
149 | b722cab3 | Adam Menz | * it will be reloaded in onCreate()
|
150 | b722cab3 | Adam Menz | */
|
151 | b722cab3 | Adam Menz | showDialog(); |
152 | b722cab3 | Adam Menz | } |
153 | b722cab3 | Adam Menz | |
154 | b722cab3 | Adam Menz | @Override
|
155 | b722cab3 | Adam Menz | protected ArrayList<Node> doInBackground(Void... arg0) { |
156 | b722cab3 | Adam Menz | ArrayList<Node> result = null; |
157 | b722cab3 | Adam Menz | try {
|
158 | b722cab3 | Adam Menz | result = (new NodeManager(getContext())).createList(loadBalancer);
|
159 | b722cab3 | Adam Menz | } catch (LoadBalancersException e) {
|
160 | b722cab3 | Adam Menz | exception = e; |
161 | b722cab3 | Adam Menz | } |
162 | b722cab3 | Adam Menz | return result;
|
163 | b722cab3 | Adam Menz | } |
164 | b722cab3 | Adam Menz | |
165 | b722cab3 | Adam Menz | @Override
|
166 | b722cab3 | Adam Menz | protected void onPostExecute(ArrayList<Node> result) { |
167 | b722cab3 | Adam Menz | hideDialog(); |
168 | b722cab3 | Adam Menz | if (exception != null) { |
169 | b722cab3 | Adam Menz | showAlert("Error", exception.getMessage());
|
170 | b722cab3 | Adam Menz | } |
171 | b722cab3 | Adam Menz | nodes = new ArrayList<Node>(); |
172 | b722cab3 | Adam Menz | for(Node n : result){
|
173 | b722cab3 | Adam Menz | nodes.add(n); |
174 | b722cab3 | Adam Menz | } |
175 | b722cab3 | Adam Menz | displayNodes(); |
176 | b722cab3 | Adam Menz | } |
177 | b722cab3 | Adam Menz | } |
178 | b722cab3 | Adam Menz | |
179 | 4f9d1a69 | Adam Menz | /*
|
180 | 4f9d1a69 | Adam Menz | * if the node has the same ip as
|
181 | 4f9d1a69 | Adam Menz | * a node in the list remove it
|
182 | 4f9d1a69 | Adam Menz | */
|
183 | 4f9d1a69 | Adam Menz | private void removeFromList(Node node){ |
184 | 4f9d1a69 | Adam Menz | for(int i = 0; i < nodes.size(); i++){ |
185 | 4f9d1a69 | Adam Menz | if(nodes.get(i).getAddress().equals(node.getAddress())){
|
186 | 4f9d1a69 | Adam Menz | nodes.remove(i); |
187 | 4f9d1a69 | Adam Menz | } |
188 | 4f9d1a69 | Adam Menz | } |
189 | 4f9d1a69 | Adam Menz | displayNodes(); |
190 | 4f9d1a69 | Adam Menz | } |
191 | 4f9d1a69 | Adam Menz | |
192 | 4f9d1a69 | Adam Menz | protected void onActivityResult(int requestCode, int resultCode, Intent data){ |
193 | b722cab3 | Adam Menz | //Node(s) was added so refresh the node list
|
194 | b722cab3 | Adam Menz | if(requestCode == EDIT_NODE_CODE && resultCode == RESULT_OK){
|
195 | b722cab3 | Adam Menz | new LoadNodesTask().execute();
|
196 | b722cab3 | Adam Menz | } |
197 | b722cab3 | Adam Menz | |
198 | b722cab3 | Adam Menz | //Node was removed so take it off the list
|
199 | b722cab3 | Adam Menz | if(requestCode == EDIT_NODE_CODE && resultCode == NODE_DELETED_CODE){
|
200 | 4f9d1a69 | Adam Menz | Node node = (Node)data.getSerializableExtra("deletedNode");
|
201 | 4f9d1a69 | Adam Menz | removeFromList(node); |
202 | b722cab3 | Adam Menz | } |
203 | 4f9d1a69 | Adam Menz | } |
204 | 4f9d1a69 | Adam Menz | |
205 | 4f9d1a69 | Adam Menz | } |