Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddServerActivity.java @ 038ac9a4

History | View | Annotate | Download (7 kB)

1
/**
2
 * 
3
 */
4
package com.rackspacecloud.android;
5

    
6
import java.util.Arrays;
7
import java.util.Iterator;
8

    
9
import android.app.Activity;
10
import android.app.AlertDialog;
11
import android.content.DialogInterface;
12
import android.os.AsyncTask;
13
import android.os.Bundle;
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.ProgressBar;
21
import android.widget.SeekBar;
22
import android.widget.SeekBar.OnSeekBarChangeListener;
23
import android.widget.Spinner;
24
import android.widget.TextView;
25
import android.widget.AdapterView.OnItemSelectedListener;
26

    
27
import com.rackspace.cloud.servers.api.client.CloudServersException;
28
import com.rackspace.cloud.servers.api.client.Flavor;
29
import com.rackspace.cloud.servers.api.client.Image;
30
import com.rackspace.cloud.servers.api.client.Server;
31
import com.rackspace.cloud.servers.api.client.ServerManager;
32

    
33
/**
34
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
35
 * 
36
 */
37
public class AddServerActivity extends GaActivity implements
38
                OnItemSelectedListener, OnClickListener {
39

    
40
        private Image[] images;
41
        private Flavor[] flavors;
42
        private String selectedImageId;
43
        private String selectedFlavorId;
44
        private EditText serverName;
45
        private Spinner imageSpinner;
46
        private Spinner flavorSpinner;
47
        private Server server;
48
        private SeekBar numberBar;
49
        private TextView numberDisplay;
50

    
51
        /** Called when the activity is first created. */
52
        @Override
53
        public void onCreate(Bundle savedInstanceState) {
54
                super.onCreate(savedInstanceState);
55
                trackPageView(PAGE_ADD_SERVER);
56
                setContentView(R.layout.createserver);
57
                serverName = (EditText) findViewById(R.id.server_name);
58
                ((Button) findViewById(R.id.save_button)).setOnClickListener(this);
59
                loadImageSpinner();
60
                loadFlavorSpinner();
61
                loadServerCount();
62
        }
63

    
64
        private void loadServerCount() {
65
                numberDisplay = (TextView) findViewById(R.id.server_count_text);
66
                numberBar = (SeekBar) findViewById(R.id.number_of_servers);
67
                numberBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
68

    
69
                        @Override
70
                        public void onStopTrackingTouch(SeekBar seekBar) {
71
                                // TODO Auto-generated method stub
72

    
73
                        }
74

    
75
                        @Override
76
                        public void onStartTrackingTouch(SeekBar seekBar) {
77
                                // TODO Auto-generated method stub
78

    
79
                        }
80

    
81
                        @Override
82
                        public void onProgressChanged(SeekBar seekBar, int progress,
83
                                        boolean fromUser) {
84
                                // TODO Auto-generated method stub
85
                                numberDisplay.setText(getCountText(progress));
86
                                TextView number = (TextView) findViewById(R.id.server_name_number);
87
                                if (progress == 0) {
88
                                        number.setText("");
89
                                } else {
90
                                        number.setText("[1.." + (progress + 1) + "]");
91
                                }
92
                        }
93

    
94
                        private String getCountText(int i) {
95
                                if (i == 0) {
96
                                        return "1 Server";
97
                                } else {
98
                                        // count starts at 0
99
                                        return i + 1 + " Servers";
100
                                }
101
                        }
102
                });
103

    
104
        }
105

    
106
        private void loadImageSpinner() {
107
                imageSpinner = (Spinner) findViewById(R.id.image_spinner);
108
                imageSpinner.setOnItemSelectedListener(this);
109
                String imageNames[] = new String[Image.getImages().size()];
110
                images = new Image[Image.getImages().size()];
111

    
112
                Iterator<Image> iter = Image.getImages().values().iterator();
113
                int i = 0;
114
                while (iter.hasNext()) {
115
                        Image image = iter.next();
116
                        images[i] = image;
117
                        imageNames[i] = image.getName();
118
                        i++;
119
                }
120

    
121
                // Sort so they display better in the spinner
122
                Arrays.sort(images);
123
                Arrays.sort(imageNames);
124

    
125
                selectedImageId = images[0].getId();
126
                ArrayAdapter<String> imageAdapter = new ArrayAdapter<String>(this,
127
                                android.R.layout.simple_spinner_item, imageNames);
128
                imageAdapter
129
                                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
130
                imageSpinner.setAdapter(imageAdapter);
131
        }
132

    
133
        private void loadFlavorSpinner() {
134
                flavorSpinner = (Spinner) findViewById(R.id.flavor_spinner);
135
                flavorSpinner.setOnItemSelectedListener(this);
136
                String flavorNames[] = new String[Flavor.getFlavors().size()];
137
                flavors = new Flavor[Flavor.getFlavors().size()];
138

    
139
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
140
                int i = 0;
141
                while (iter.hasNext()) {
142
                        Flavor flavor = iter.next();
143
                        flavors[i] = flavor;
144
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk()
145
                                        + " GB disk";
146
                        i++;
147
                }
148
                selectedFlavorId = flavors[0].getId();
149
                ArrayAdapter<String> flavorAdapter = new ArrayAdapter<String>(this,
150
                                android.R.layout.simple_spinner_item, flavorNames);
151
                flavorAdapter
152
                                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
153
                flavorSpinner.setAdapter(flavorAdapter);
154
        }
155

    
156
        public void onItemSelected(AdapterView<?> parent, View view, int position,
157
                        long id) {
158
                if (parent == imageSpinner) {
159
                        selectedImageId = images[position].getId();
160
                } else if (parent == flavorSpinner) {
161
                        selectedFlavorId = flavors[position].getId();
162
                }
163
        }
164

    
165
        public void onNothingSelected(AdapterView<?> parent) {
166
        }
167

    
168
        public void onClick(View arg0) {
169
                if ("".equals(serverName.getText().toString())) {
170
                        showAlert("Required Fields Missing", "Server name is required.");
171
                } else {
172
                        trackEvent(CATEGORY_SERVER, EVENT_CREATE, "",
173
                                        numberBar.getProgress() + 1);
174
                        showActivityIndicators();
175
                        server = new Server();
176
                        server.setName(serverName.getText().toString());
177
                        server.setImageId(selectedImageId);
178
                        server.setFlavorId(selectedFlavorId);
179
                        new SaveServerTask().execute((Void[]) null);
180
                }
181
        }
182

    
183
        private void showAlert(String title, String message) {
184
                AlertDialog alert = new AlertDialog.Builder(this).create();
185
                alert.setTitle(title);
186
                alert.setMessage(message);
187
                alert.setButton("OK", new DialogInterface.OnClickListener() {
188
                        public void onClick(DialogInterface dialog, int which) {
189
                                return;
190
                        }
191
                });
192
                alert.show();
193
                hideActivityIndicators();
194
        }
195

    
196
        private void setActivityIndicatorsVisibility(int visibility) {
197
                ProgressBar pb = (ProgressBar) findViewById(R.id.save_server_progress_bar);
198
                TextView tv = (TextView) findViewById(R.id.saving_server_label);
199
                pb.setVisibility(visibility);
200
                tv.setVisibility(visibility);
201
        }
202

    
203
        private void showActivityIndicators() {
204
                setActivityIndicatorsVisibility(View.VISIBLE);
205
        }
206

    
207
        private void hideActivityIndicators() {
208
                setActivityIndicatorsVisibility(View.INVISIBLE);
209
        }
210

    
211
        private class SaveServerTask extends AsyncTask<Void, Void, Server> {
212

    
213
                private CloudServersException exception;
214

    
215
                @Override
216
                protected Server doInBackground(Void... arg0) {
217
                        try {
218
                                if (numberBar.getProgress() == 0) {
219
                                        (new ServerManager()).create(server,
220
                                                        getApplicationContext());
221
                                } else {
222
                                        for (int i = 0; i < numberBar.getProgress() + 1; i++) {
223
                                                server.setName(serverName.getText().toString()
224
                                                                + Integer.toString(i + 1));
225
                                                (new ServerManager()).create(server,
226
                                                                getApplicationContext());
227
                                        }
228
                                }
229
                        } catch (CloudServersException e) {
230
                                exception = e;
231
                        }
232
                        return server;
233
                }
234

    
235
                @Override
236
                protected void onPostExecute(Server result) {
237
                        if (exception != null) {
238
                                showAlert("Error", "There was a problem creating your server: "
239
                                                + exception.getMessage());
240
                        } else {
241
                                hideActivityIndicators();
242
                                setResult(Activity.RESULT_OK);
243
                                finish();
244
                        }
245
                }
246
        }
247

    
248
}