Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / AddServerActivity.java @ 984acda7

History | View | Annotate | Download (6.9 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 Activity implements OnItemSelectedListener, OnClickListener {
38

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

    
99
    private void loadImageSpinner() {
100
                imageSpinner = (Spinner) findViewById(R.id.image_spinner);
101
                imageSpinner.setOnItemSelectedListener(this);
102
                String imageNames[] = new String[Image.getImages().size()]; 
103
                images = new Image[Image.getImages().size()];
104

    
105
                Iterator<Image> iter = Image.getImages().values().iterator();
106
                int i = 0;
107
                while (iter.hasNext()) {
108
                        Image image = iter.next();
109
                        images[i] = image;
110
                        imageNames[i] = image.getName();
111
                        i++;
112
                }
113
                
114
                //Sort so they display better in the spinner
115
                Arrays.sort(images);
116
                Arrays.sort(imageNames);
117
                
118
                selectedImageId = images[0].getId();
119
                ArrayAdapter<String> imageAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, imageNames);
120
                imageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
121
                imageSpinner.setAdapter(imageAdapter);
122
    }
123
    
124
    private void loadFlavorSpinner() {
125
                flavorSpinner = (Spinner) findViewById(R.id.flavor_spinner);
126
                flavorSpinner.setOnItemSelectedListener(this);
127
                String flavorNames[] = new String[Flavor.getFlavors().size()]; 
128
                flavors = new Flavor[Flavor.getFlavors().size()];
129

    
130
                Iterator<Flavor> iter = Flavor.getFlavors().values().iterator();
131
                int i = 0;
132
                while (iter.hasNext()) {
133
                        Flavor flavor = iter.next();
134
                        flavors[i] = flavor;
135
                        flavorNames[i] = flavor.getName() + ", " + flavor.getDisk() + " GB disk";
136
                        i++;
137
                }
138
                selectedFlavorId = flavors[0].getId();
139
                ArrayAdapter<String> flavorAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, flavorNames);
140
                flavorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
141
                flavorSpinner.setAdapter(flavorAdapter);
142
    }
143

    
144
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
145
                if (parent == imageSpinner) {
146
                        selectedImageId = images[position].getId();
147
                } else if (parent == flavorSpinner) {
148
                        selectedFlavorId = flavors[position].getId();
149
                }
150
        }
151

    
152
        public void onNothingSelected(AdapterView<?> parent) {
153
        }
154

    
155
        public void onClick(View arg0) {
156
                if ("".equals(serverName.getText().toString())) {
157
                        showAlert("Required Fields Missing", "Server name is required.");
158
                } else {
159
                        showActivityIndicators();
160
                        server = new Server();
161
                        server.setName(serverName.getText().toString());
162
                        server.setImageId(selectedImageId);
163
                        server.setFlavorId(selectedFlavorId);
164
                        new SaveServerTask().execute((Void[]) null);
165
                }
166
        }
167
        
168
    private void showAlert(String title, String message) {
169
                AlertDialog alert = new AlertDialog.Builder(this).create();
170
                alert.setTitle(title);
171
                alert.setMessage(message);
172
                alert.setButton("OK", new DialogInterface.OnClickListener() {
173
              public void onClick(DialogInterface dialog, int which) {
174
                return;
175
            } }); 
176
                alert.show();
177
                hideActivityIndicators();
178
    }
179
        
180
    private void setActivityIndicatorsVisibility(int visibility) {
181
        ProgressBar pb = (ProgressBar) findViewById(R.id.save_server_progress_bar);
182
            TextView tv = (TextView) findViewById(R.id.saving_server_label);
183
        pb.setVisibility(visibility);
184
        tv.setVisibility(visibility);
185
    }
186

    
187
    private void showActivityIndicators() {
188
            setActivityIndicatorsVisibility(View.VISIBLE);
189
    }
190
    
191
    private void hideActivityIndicators() {
192
            setActivityIndicatorsVisibility(View.INVISIBLE);
193
    }
194
        
195
    private class SaveServerTask extends AsyncTask<Void, Void, Server> {
196
            
197
                private CloudServersException exception;
198
            
199
                @Override
200
                protected Server doInBackground(Void... arg0) {
201
                        try {
202
                                if(numberBar.getProgress() == 0){
203
                                        (new ServerManager()).create(server, getApplicationContext());
204
                                }
205
                                else{
206
                                        for(int i = 0; i < numberBar.getProgress() + 1; i++){
207
                                                server.setName(serverName.getText().toString() + Integer.toString(i+1));
208
                                                (new ServerManager()).create(server, getApplicationContext());
209
                                        }
210
                                }
211
                        } catch (CloudServersException e) {
212
                                exception = e;
213
                        }
214
                        return server;
215
                }
216
            
217
                @Override
218
                protected void onPostExecute(Server result) {
219
                        if (exception != null) {
220
                                showAlert("Error", "There was a problem creating your server: " + exception.getMessage());
221
                        } else {
222
                                hideActivityIndicators();
223
                                setResult(Activity.RESULT_OK);
224
                                finish();
225
                        }
226
                }
227
    }
228
        
229
}