Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddServerActivity.java @ 8aee6f93

History | View | Annotate | Download (7.4 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.text.InputFilter;
15
import android.text.Spanned;
16
import android.util.Log;
17
import android.view.View;
18
import android.view.View.OnClickListener;
19
import android.widget.AdapterView;
20
import android.widget.ArrayAdapter;
21
import android.widget.Button;
22
import android.widget.EditText;
23
import android.widget.ProgressBar;
24
import android.widget.SeekBar;
25
import android.widget.SeekBar.OnSeekBarChangeListener;
26
import android.widget.Spinner;
27
import android.widget.TextView;
28
import android.widget.AdapterView.OnItemSelectedListener;
29

    
30
import com.rackspace.cloud.servers.api.client.CloudServersException;
31
import com.rackspace.cloud.servers.api.client.Flavor;
32
import com.rackspace.cloud.servers.api.client.Image;
33
import com.rackspace.cloud.servers.api.client.Server;
34
import com.rackspace.cloud.servers.api.client.ServerManager;
35

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

    
42
        private Image[] images;
43
        private Flavor[] flavors;
44
        private String selectedImageId;
45
        private String selectedFlavorId;
46
        private EditText serverName;
47
        private Spinner imageSpinner;
48
        private Spinner flavorSpinner;
49
        private Server server;
50
        private SeekBar numberBar;
51
        private TextView numberDisplay;
52
        private String extension;
53
        
54
    /** Called when the activity is first created. */
55
    @Override
56
    public void onCreate(Bundle savedInstanceState) {
57
        super.onCreate(savedInstanceState);
58
        setContentView(R.layout.createserver);
59
        ((Button) findViewById(R.id.save_button)).setOnClickListener(this);
60
        ((TextView)findViewById(R.id.names_number)).setText("        ");
61
        setUpNameText();
62
        loadImageSpinner();
63
        loadFlavorSpinner();
64
        loadServerCount();
65
     }
66
    
67
    private void setUpNameText(){
68
        serverName = (EditText) findViewById(R.id.server_name);
69
    }
70
    
71
    private void loadServerCount(){
72
            numberDisplay = (TextView)findViewById(R.id.server_count_text);
73
            numberBar = (SeekBar)findViewById(R.id.number_of_servers);
74
            numberBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
75
                        
76
                        @Override
77
                        public void onStopTrackingTouch(SeekBar seekBar) {
78
                                // TODO Auto-generated method stub
79
                                
80
                        }
81
                        
82
                        @Override
83
                        public void onStartTrackingTouch(SeekBar seekBar) {
84
                                // TODO Auto-generated method stub
85
                                
86
                        }
87
                        
88
                        @Override
89
                        public void onProgressChanged(SeekBar seekBar, int progress,
90
                                        boolean fromUser) {
91
                                // TODO Auto-generated method stub
92
                                numberDisplay.setText(getCountText(progress));
93
                                if(progress == 0){
94
                                        extension = "        ";
95
                                }
96
                                else if(progress == 9){
97
                                        extension = "[1.." + (progress + 1) + "]";
98
                                }
99
                                else{
100
                                        extension = "[1.." + (progress + 1) + "] ";
101
                                }
102
                                ((TextView)findViewById(R.id.names_number)).setText(extension);
103
                        }
104
                        
105
                        private String getCountText(int i){
106
                                if(i == 0){
107
                                        return "1 Server";
108
                                }
109
                                else{
110
                                        //count starts at 0
111
                                        return i+1 + " Servers";
112
                                }
113
                        }
114
                });
115
            
116
    }
117

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

    
124
                Iterator<Image> iter = Image.getImages().values().iterator();
125
                int i = 0;
126
                while (iter.hasNext()) {
127
                        Image image = iter.next();
128
                        images[i] = image;
129
                        imageNames[i] = image.getName();
130
                        i++;
131
                }
132
                
133
                //Sort so they display better in the spinner
134
                Arrays.sort(images);
135
                Arrays.sort(imageNames);
136
                
137
                selectedImageId = images[0].getId();
138
                ArrayAdapter<String> imageAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, imageNames);
139
                imageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
140
                imageSpinner.setAdapter(imageAdapter);
141
    }
142
    
143
    private void loadFlavorSpinner() {
144
                flavorSpinner = (Spinner) findViewById(R.id.flavor_spinner);
145
                flavorSpinner.setOnItemSelectedListener(this);
146
                String flavorNames[] = new String[Flavor.getFlavors().size()]; 
147
                flavors = new Flavor[Flavor.getFlavors().size()];
148

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

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

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

    
174
        public void onClick(View arg0) {
175
                if ("".equals(serverName.getText().toString())) {
176
                        showAlert("Required Fields Missing", "Server name is required.");
177
                } else {
178
                        showActivityIndicators();
179
                        server = new Server();
180
                        server.setName(serverName.getText().toString());
181
                        server.setImageId(selectedImageId);
182
                        server.setFlavorId(selectedFlavorId);
183
                        new SaveServerTask().execute((Void[]) null);
184
                }
185
        }
186
        
187
    private void showAlert(String title, String message) {
188
                AlertDialog alert = new AlertDialog.Builder(this).create();
189
                alert.setTitle(title);
190
                alert.setMessage(message);
191
                alert.setButton("OK", new DialogInterface.OnClickListener() {
192
              public void onClick(DialogInterface dialog, int which) {
193
                return;
194
            } }); 
195
                alert.show();
196
                hideActivityIndicators();
197
    }
198
        
199
    private void setActivityIndicatorsVisibility(int visibility) {
200
        ProgressBar pb = (ProgressBar) findViewById(R.id.save_server_progress_bar);
201
            TextView tv = (TextView) findViewById(R.id.saving_server_label);
202
        pb.setVisibility(visibility);
203
        tv.setVisibility(visibility);
204
    }
205

    
206
    private void showActivityIndicators() {
207
            setActivityIndicatorsVisibility(View.VISIBLE);
208
    }
209
    
210
    private void hideActivityIndicators() {
211
            setActivityIndicatorsVisibility(View.INVISIBLE);
212
    }
213
        
214
    private class SaveServerTask extends AsyncTask<Void, Void, Server> {
215
            
216
                private CloudServersException exception;
217
            
218
                @Override
219
                protected Server doInBackground(Void... arg0) {
220
                        try {
221
                                if(numberBar.getProgress() == 0){
222
                                        (new ServerManager()).create(server, getApplicationContext());
223
                                }
224
                                else{
225
                                        for(int i = 0; i < numberBar.getProgress() + 1; i++){
226
                                                server.setName(serverName.getText().toString() + Integer.toString(i+1));
227
                                                (new ServerManager()).create(server, getApplicationContext());
228
                                        }
229
                                }
230
                        } catch (CloudServersException e) {
231
                                exception = e;
232
                        }
233
                        return server;
234
                }
235
            
236
                @Override
237
                protected void onPostExecute(Server result) {
238
                        if (exception != null) {
239
                                showAlert("Error", "There was a problem creating your server: " + exception.getMessage());
240
                        } else {
241
                                hideActivityIndicators();
242
                                setResult(Activity.RESULT_OK);
243
                                finish();
244
                        }
245
                }
246
    }
247
        
248
}