Statistics
| Branch: | Revision:

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

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.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.AdapterView.OnItemSelectedListener;
18
import android.widget.ArrayAdapter;
19
import android.widget.Button;
20
import android.widget.EditText;
21
import android.widget.ProgressBar;
22
import android.widget.SeekBar;
23
import android.widget.SeekBar.OnSeekBarChangeListener;
24
import android.widget.Spinner;
25
import android.widget.TextView;
26

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

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

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

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

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

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

    
85
                        }
86

    
87
                        @Override
88
                        public void onStartTrackingTouch(SeekBar seekBar) {
89
                                // TODO Auto-generated method stub
90

    
91
                        }
92

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

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

    
120
        }
121

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

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

    
137
                // Sort so they display better in the spinner
138
                Arrays.sort(images);
139
                Arrays.sort(imageNames);
140

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

    
149
        private void loadFlavorSpinner() {
150
                flavorSpinner = (Spinner) findViewById(R.id.flavor_spinner);
151
                flavorSpinner.setOnItemSelectedListener(this);
152
                String flavorNames[] = new String[Flavor.getFlavors().size()];
153
                flavors = new Flavor[Flavor.getFlavors().size()];
154

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

    
172
        public void onItemSelected(AdapterView<?> parent, View view, int position,
173
                        long id) {
174
                if (parent == imageSpinner) {
175
                        selectedImageId = images[position].getId();
176
                } else if (parent == flavorSpinner) {
177
                        selectedFlavorId = flavors[position].getId();
178
                }
179
        }
180

    
181
        public void onNothingSelected(AdapterView<?> parent) {
182
        }
183

    
184
        public void onClick(View arg0) {
185
                if ("".equals(serverName.getText().toString())) {
186
                        showAlert("Required Fields Missing", "Server name is required.");
187
                } else {
188
                        trackEvent(GoogleAnalytics.CATEGORY_SERVER, GoogleAnalytics.EVENT_CREATE, "", numberBar.getProgress()+1);
189
                        server = new Server();
190
                        server.setName(serverName.getText().toString());
191
                        server.setImageId(selectedImageId);
192
                        server.setFlavorId(selectedFlavorId);
193
                        
194
                }
195
        }
196

    
197
        private void showAlert(String title, String message) {
198
                AlertDialog alert = new AlertDialog.Builder(this).create();
199
                alert.setTitle(title);
200
                alert.setMessage(message);
201
                alert.setButton("OK", new DialogInterface.OnClickListener() {
202
                        public void onClick(DialogInterface dialog, int which) {
203
                                return;
204
                        }
205
                });
206
                alert.show();
207
                hideActivityIndicators();
208
        }
209

    
210
        private void setActivityIndicatorsVisibility(int visibility) {
211
                ProgressBar pb = (ProgressBar) findViewById(R.id.save_server_progress_bar);
212
                TextView tv = (TextView) findViewById(R.id.saving_server_label);
213
                pb.setVisibility(visibility);
214
                tv.setVisibility(visibility);
215
        }
216

    
217
        private void showActivityIndicators() {
218
                setActivityIndicatorsVisibility(View.VISIBLE);
219
        }
220

    
221
        private void hideActivityIndicators() {
222
                setActivityIndicatorsVisibility(View.INVISIBLE);
223
        }
224

    
225
        
226

    
227
}