Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddServerActivity.java @ 48601850

History | View | Annotate | Download (6.5 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.os.AsyncTask;
11
import android.os.Bundle;
12
import android.view.View;
13
import android.view.View.OnClickListener;
14
import android.widget.AdapterView;
15
import android.widget.AdapterView.OnItemSelectedListener;
16
import android.widget.ArrayAdapter;
17
import android.widget.Button;
18
import android.widget.EditText;
19
import android.widget.SeekBar;
20
import android.widget.SeekBar.OnSeekBarChangeListener;
21
import android.widget.Spinner;
22
import android.widget.TextView;
23

    
24
import com.rackspace.cloud.android.R;
25
import com.rackspace.cloud.servers.api.client.CloudServersException;
26
import com.rackspace.cloud.servers.api.client.Flavor;
27
import com.rackspace.cloud.servers.api.client.Image;
28
import com.rackspace.cloud.servers.api.client.Server;
29
import com.rackspace.cloud.servers.api.client.ServerManager;
30

    
31
/**
32
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
33
 *
34
 */
35
public class AddServerActivity extends CloudActivity implements OnItemSelectedListener, OnClickListener {
36

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

    
49
        /** Called when the activity is first created. */
50
        @Override
51
        public void onCreate(Bundle savedInstanceState) {
52
                super.onCreate(savedInstanceState);
53
                trackPageView(GoogleAnalytics.PAGE_ADD_SERVER);        
54
                setContentView(R.layout.createserver);
55
                restoreState(savedInstanceState);
56
        }
57

    
58
        protected void restoreState(Bundle state){
59
                super.restoreState(state);
60
                serverName = (EditText) findViewById(R.id.server_name);
61
                ((Button) findViewById(R.id.save_button)).setOnClickListener(this);
62
                ((TextView)findViewById(R.id.names_number)).setText("        ");
63
                setUpNameText();
64
                loadImageSpinner();
65
                loadFlavorSpinner();
66
                loadServerCount();
67
        }
68
        
69
        private void setUpNameText(){
70
                serverName = (EditText) findViewById(R.id.server_name);
71
        }
72

    
73
        private void loadServerCount(){
74
                numberDisplay = (TextView)findViewById(R.id.server_count_text);
75
                numberBar = (SeekBar)findViewById(R.id.number_of_servers);
76
                numberBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
77
                        @Override
78
                        public void onStopTrackingTouch(SeekBar seekBar) {
79
                                // TODO Auto-generated method stub
80

    
81
                        }
82

    
83
                        @Override
84
                        public void onStartTrackingTouch(SeekBar seekBar) {
85
                                // TODO Auto-generated method stub
86

    
87
                        }
88

    
89
                        @Override
90
                        public void onProgressChanged(SeekBar seekBar, int progress,
91
                                        boolean fromUser) {
92
                                // TODO Auto-generated method stub
93
                                numberDisplay.setText(getCountText(progress));
94
                                if(progress == 0){
95
                                        extension = "        ";
96
                                }
97
                                else if(progress == 9){
98
                                        extension = "[1.." + (progress + 1) + "]";
99
                                }
100
                                else{
101
                                        extension = "[1.." + (progress + 1) + "] ";
102
                                }
103
                                ((TextView)findViewById(R.id.names_number)).setText(extension);
104
                        }
105

    
106
                        private String getCountText(int i){
107
                                if(i == 0){
108
                                        return "1 Server";
109
                                }
110
                                else{
111
                                        //count starts at 0
112
                                        return i+1 + " Servers";
113
                                }
114
                        }
115
                });
116

    
117
        }
118

    
119
        private void loadImageSpinner() {
120
                imageSpinner = (Spinner) findViewById(R.id.image_spinner);
121
                imageSpinner.setOnItemSelectedListener(this);
122
                String imageNames[] = new String[Image.getImages().size()]; 
123
                images = new Image[Image.getImages().size()];
124

    
125
                Iterator<Image> iter = Image.getImages().values().iterator();
126
                int i = 0;
127
                while (iter.hasNext()) {
128
                        Image image = iter.next();
129
                        images[i] = image;
130
                        imageNames[i] = image.getName();
131
                        i++;
132
                }
133

    
134
                //Sort so they display better in the spinner
135
                Arrays.sort(images);
136
                Arrays.sort(imageNames);
137

    
138
                selectedImageId = images[0].getId();
139
                ArrayAdapter<String> imageAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, imageNames);
140
                imageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
141
                imageSpinner.setAdapter(imageAdapter);
142
        }
143

    
144
        private void loadFlavorSpinner() {
145
                flavorSpinner = (Spinner) findViewById(R.id.flavor_spinner);
146
                flavorSpinner.setOnItemSelectedListener(this);
147
                String flavorNames[] = new String[Flavor.getFlavors().size()]; 
148
                flavors = new Flavor[Flavor.getFlavors().size()];
149

    
150
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
151
                int i = 0;
152
                while (iter.hasNext()) {
153
                        Flavor flavor = iter.next();
154
                        flavors[i] = flavor;
155
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk() + " GB disk";
156
                        i++;
157
                }
158
                selectedFlavorId = flavors[0].getId();
159
                ArrayAdapter<String> flavorAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, flavorNames);
160
                flavorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
161
                flavorSpinner.setAdapter(flavorAdapter);
162
        }
163

    
164
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
165
                if (parent == imageSpinner) {
166
                        selectedImageId = images[position].getId();
167
                } else if (parent == flavorSpinner) {
168
                        selectedFlavorId = flavors[position].getId();
169
                }
170
        }
171

    
172
        public void onNothingSelected(AdapterView<?> parent) {
173
        }
174

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

    
188
        private class SaveServerTask extends AsyncTask<Void, Void, Server> {
189

    
190
                private CloudServersException exception;
191

    
192
                @Override
193
                protected void onPreExecute(){
194
                        showDialog();
195
                }
196
                
197
                @Override
198
                protected Server doInBackground(Void... arg0) {
199
                        try {
200
                                if(numberBar.getProgress() == 0){
201
                                        (new ServerManager()).create(server, getContext());
202
                                }
203
                                else{
204
                                        for(int i = 0; i < numberBar.getProgress() + 1; i++){
205
                                                server.setName(serverName.getText().toString() + Integer.toString(i+1));
206
                                                (new ServerManager()).create(server, getContext());
207
                                        }
208
                                }
209
                        } catch (CloudServersException e) {
210
                                exception = e;
211
                        }
212
                        return server;
213
                }
214

    
215
                @Override
216
                protected void onPostExecute(Server result) {
217
                        hideDialog();
218
                        if (exception != null) {
219
                                showAlert("Error", "There was a problem creating your server: " + exception.getMessage());
220
                        } else {
221
                                setResult(Activity.RESULT_OK);
222
                                finish();
223
                        }
224
                }
225
        }
226

    
227
}