Statistics
| Branch: | Revision:

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
}