Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddAccessRuleActivity.java @ c25e8fa0

History | View | Annotate | Download (5.2 kB)

1
package com.rackspacecloud.android;
2

    
3
import java.util.ArrayList;
4
import java.util.regex.Matcher;
5
import java.util.regex.Pattern;
6

    
7
import org.apache.http.HttpResponse;
8

    
9
import android.app.Activity;
10
import android.os.AsyncTask;
11
import android.os.Bundle;
12
import android.text.Editable;
13
import android.text.TextWatcher;
14
import android.view.View;
15
import android.view.View.OnClickListener;
16
import android.widget.AdapterView;
17
import android.widget.ArrayAdapter;
18
import android.widget.Button;
19
import android.widget.EditText;
20
import android.widget.Spinner;
21
import android.widget.AdapterView.OnItemSelectedListener;
22

    
23
import com.rackspace.cloud.loadbalancer.api.client.LoadBalancer;
24
import com.rackspace.cloud.loadbalancer.api.client.NetworkItem;
25
import com.rackspace.cloud.loadbalancer.api.client.NetworkItemManager;
26
import com.rackspace.cloud.servers.api.client.CloudServersException;
27
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
28

    
29
public class AddAccessRuleActivity extends CloudActivity{
30

    
31
        private final String[] ACTIONS = {"Deny", "Allow"};
32
        
33
        private LoadBalancer loadBalancer;
34
        private String selectedAction;
35
        private String selectedAddresses;
36
        private NetworkItem networkItem;
37
        
38
        @Override
39
        public void onCreate(Bundle savedInstanceState) {
40
                super.onCreate(savedInstanceState);
41
                loadBalancer = (LoadBalancer) this.getIntent().getExtras().get("loadBalancer");
42
                setContentView(R.layout.addaccessrule);
43
                restoreState(savedInstanceState);
44
        }
45

    
46
        @Override
47
        protected void onSaveInstanceState(Bundle outState) {
48
                super.onSaveInstanceState(outState);
49
        }
50

    
51
        protected void restoreState(Bundle state) {
52
                super.restoreState(state);
53
                setupInputs();
54
        }
55
        
56
        private void setupInputs(){
57
                Spinner actionSpinner = (Spinner)findViewById(R.id.rule_action_spinner);
58
                
59
                ArrayAdapter<String> actionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ACTIONS);
60
                actionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
61
                actionSpinner.setAdapter(actionAdapter);
62

    
63
                actionSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
64

    
65
                        @Override
66
                        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
67
                                selectedAction = ACTIONS[pos];        
68
                        }
69

    
70
                        @Override
71
                        public void onNothingSelected(AdapterView<?> arg0) {
72

    
73
                        }
74

    
75
                });
76
                
77
                EditText address = (EditText)findViewById(R.id.rule_address);
78
                address.addTextChangedListener(new TextWatcher() {
79
                        
80
                        @Override
81
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
82
                                selectedAddresses = s.toString();
83
                        }
84
                        
85
                        @Override
86
                        public void beforeTextChanged(CharSequence s, int start, int count,
87
                                        int after) {
88
                                //do nothing
89
                        }
90
                        
91
                        @Override
92
                        public void afterTextChanged(Editable s) {
93
                                //do nothing
94
                        }
95
                });
96
                
97
                Button addRule = (Button)findViewById(R.id.add_rule_button);
98
                addRule.setOnClickListener(new OnClickListener() {
99
                        
100
                        @Override
101
                        public void onClick(View v) {
102
                                if(!validAddress(selectedAddresses)){
103
                                        showAlert("Error", "Please enter a valid IP address.");
104
                                } else if(!validAction(selectedAction)) {
105
                                        showAlert("Error", "Please select an action type.");
106
                                } else{
107
                                        ArrayList<NetworkItem> networkItems = new ArrayList<NetworkItem>();
108
                                        String[] networkAddresses = selectedAddresses.split(",");
109
                                        for(int i = 0; i < networkAddresses.length; i++){
110
                                                NetworkItem networkItem = new NetworkItem();
111
                                                networkItem.setAddress(networkAddresses[i].trim());
112
                                                networkItem.setType(selectedAction);
113
                                                networkItems.add(networkItem);
114
                                        }
115
                                        new AddNetworkItemTask().execute(networkItems);
116
                                }
117
                        }
118
                });
119
        }
120
        
121
        //basic ip validation just checks that the string
122
        //is only composed of letters, numbers, ., :
123
        private static boolean validAddress(String address){
124
                //Enter regex
125
                if(address != null){
126
                        Pattern pattern = Pattern.compile("[a-zA-Z0-9.:/, ]+");
127
                        Matcher match = pattern.matcher(address);
128
                        return match.matches();
129
                } else {
130
                        return false;
131
                }
132
        }
133
        
134
        private Boolean validAction(String action){
135
                return action != null;
136
        }
137
        
138
        private class AddNetworkItemTask extends AsyncTask<ArrayList<NetworkItem>, Void, HttpBundle> {
139

    
140
                private CloudServersException exception;
141

    
142
                @Override
143
                protected void onPreExecute(){
144
                        showDialog();
145
                }
146
                @Override
147
                protected HttpBundle doInBackground(ArrayList<NetworkItem>... networkItems) {
148
                        HttpBundle bundle = null;
149
                        try {
150
                                bundle = new NetworkItemManager(getContext()).create(loadBalancer, networkItems[0]);
151
                        } catch (CloudServersException e) {
152
                                exception = e;
153
                        }
154
                        return bundle;
155
                }
156

    
157
                @Override
158
                protected void onPostExecute(HttpBundle bundle) {
159
                        hideDialog();
160
                        HttpResponse response = bundle.getResponse();
161
                        if (response != null) {
162
                                int statusCode = response.getStatusLine().getStatusCode();
163
                                if (statusCode == 202 || statusCode == 200) {
164
                                        setResult(Activity.RESULT_OK);
165
                                        finish();
166
                                } else {
167
                                        CloudServersException cse = parseCloudServersException(response);
168
                                        if ("".equals(cse.getMessage())) {
169
                                                showError("There was a problem creating your rule.", bundle);
170
                                        } else {
171
                                                showError("There was a problem creating your rule: " + cse.getMessage(), bundle);
172
                                        }
173
                                }
174
                        } else if (exception != null) {
175
                                showError("There was a problem creating your rule: " + exception.getMessage(), bundle);                                
176
                        }                        
177
                }
178
        }
179
}