Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / servers / api / client / ServerManager.java @ f39579c4

History | View | Annotate | Download (19.1 kB)

1
/**
2
 * 
3
 */
4
package com.rackspace.cloud.servers.api.client;
5

    
6
import java.io.IOException;
7
import java.io.StringReader;
8
import java.io.UnsupportedEncodingException;
9
import java.util.ArrayList;
10

    
11
import javax.xml.parsers.FactoryConfigurationError;
12
import javax.xml.parsers.ParserConfigurationException;
13
import javax.xml.parsers.SAXParser;
14
import javax.xml.parsers.SAXParserFactory;
15

    
16
import org.apache.http.HttpResponse;
17
import org.apache.http.client.ClientProtocolException;
18
import org.apache.http.client.methods.HttpDelete;
19
import org.apache.http.client.methods.HttpGet;
20
import org.apache.http.client.methods.HttpPost;
21
import org.apache.http.client.methods.HttpPut;
22
import org.apache.http.entity.StringEntity;
23
import org.apache.http.impl.client.BasicResponseHandler;
24
import org.apache.http.protocol.RequestExpectContinue;
25
import org.xml.sax.InputSource;
26
import org.xml.sax.SAXException;
27
import org.xml.sax.XMLReader;
28

    
29
import android.content.Context;
30
import android.util.Log;
31

    
32
import com.rackspace.cloud.files.api.client.CustomHttpClient;
33
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
34
import com.rackspace.cloud.servers.api.client.parsers.ServersXMLParser;
35

    
36
/**
37
 * @author Mike Mayo - mike.mayo@rackspace.com - twitter.com/greenisus
38
 *
39
 */
40
public class ServerManager extends EntityManager {
41

    
42
        public static final String SOFT_REBOOT = "SOFT";
43
        public static final String HARD_REBOOT = "HARD";
44
        
45
        public void create(Server entity, Context context) throws CloudServersException {
46

    
47
                CustomHttpClient httpclient = new CustomHttpClient(context);
48
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers.xml");
49
                
50
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
51
                post.addHeader("Content-Type", "application/xml");
52

    
53
                StringEntity tmp = null;
54
                try {
55
                        tmp = new StringEntity(entity.toXML());
56
                } catch (UnsupportedEncodingException e) {
57
                        CloudServersException cse = new CloudServersException();
58
                        cse.setMessage(e.getLocalizedMessage());
59
                        throw cse;
60
                }
61
                post.setEntity(tmp);
62
                
63
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
64

    
65
                try {                        
66
                        HttpResponse resp = httpclient.execute(post);
67
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
68
                    String body = responseHandler.handleResponse(resp);
69
                    
70
                    if (resp.getStatusLine().getStatusCode() == 202) {                            
71
                            ServersXMLParser serversXMLParser = new ServersXMLParser();
72
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
73
                            XMLReader xmlReader = saxParser.getXMLReader();
74
                            xmlReader.setContentHandler(serversXMLParser);
75
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
76
                            entity = serversXMLParser.getServer();                            
77
                    } else {
78
                            CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
79
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
80
                            XMLReader xmlReader = saxParser.getXMLReader();
81
                            xmlReader.setContentHandler(parser);
82
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
83
                            CloudServersException cse = parser.getException();                            
84
                            throw cse;
85
                    }
86
                } catch (ClientProtocolException e) {
87
                        CloudServersException cse = new CloudServersException();
88
                        cse.setMessage(e.getLocalizedMessage());
89
                        throw cse;
90
                } catch (IOException e) {
91
                        CloudServersException cse = new CloudServersException();
92
                        cse.setMessage(e.getLocalizedMessage());
93
                        throw cse;
94
                } catch (FactoryConfigurationError e) {
95
                        CloudServersException cse = new CloudServersException();
96
                        cse.setMessage(e.getLocalizedMessage());
97
                        throw cse;
98
                } catch (ParserConfigurationException e) {
99
                        CloudServersException cse = new CloudServersException();
100
                        cse.setMessage(e.getLocalizedMessage());
101
                        throw cse;
102
                } catch (SAXException e) {
103
                        CloudServersException cse = new CloudServersException();
104
                        cse.setMessage(e.getLocalizedMessage());
105
                        throw cse;
106
                }        
107
        }
108

    
109
        public ArrayList<Server> createList(boolean detail, Context context) throws CloudServersException {
110
                
111
                CustomHttpClient httpclient = new CustomHttpClient(context);
112
                HttpGet get = new HttpGet(Account.getAccount().getServerUrl() + "/servers/detail.xml" + cacheBuster());
113
                ArrayList<Server> servers = new ArrayList<Server>();
114
                get.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
115
                
116
                try {                        
117
                        HttpResponse resp = httpclient.execute(get);                    
118
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
119
                    String body = responseHandler.handleResponse(resp);
120
                    
121
                    if (resp.getStatusLine().getStatusCode() == 200 || resp.getStatusLine().getStatusCode() == 203) {                            
122
                            ServersXMLParser serversXMLParser = new ServersXMLParser();
123
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
124
                            XMLReader xmlReader = saxParser.getXMLReader();
125
                            xmlReader.setContentHandler(serversXMLParser);
126
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
127
                            servers = serversXMLParser.getServers();                            
128
                    } else {
129
                            CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
130
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
131
                            XMLReader xmlReader = saxParser.getXMLReader();
132
                            xmlReader.setContentHandler(parser);
133
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
134
                            CloudServersException cse = parser.getException();                            
135
                            throw cse;
136
                    }
137
                } catch (ClientProtocolException e) {
138
                        CloudServersException cse = new CloudServersException();
139
                        cse.setMessage(e.getLocalizedMessage());
140
                        throw cse;
141
                } catch (IOException e) {
142
                        CloudServersException cse = new CloudServersException();
143
                        cse.setMessage(e.getLocalizedMessage());
144
                        throw cse;
145
                } catch (ParserConfigurationException e) {
146
                        CloudServersException cse = new CloudServersException();
147
                        cse.setMessage(e.getLocalizedMessage());
148
                        throw cse;
149
                } catch (SAXException e) {
150
                        CloudServersException cse = new CloudServersException();
151
                        cse.setMessage(e.getLocalizedMessage());
152
                        throw cse;
153
                } catch (FactoryConfigurationError e) {
154
                        CloudServersException cse = new CloudServersException();
155
                        cse.setMessage(e.getLocalizedMessage());
156
                        throw cse;
157
                }
158
                
159
                
160
                return servers;
161
        }
162

    
163
        public Server find(long id, Context context) throws CloudServersException {
164
                
165
                Server server = null;
166
                CustomHttpClient httpclient = new CustomHttpClient(context);
167
                HttpGet get = new HttpGet(Account.getAccount().getServerUrl() + "/servers/" + id + ".xml" + cacheBuster());
168
                get.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
169
                
170
                try {                        
171
                        HttpResponse resp = httpclient.execute(get);                    
172
                    BasicResponseHandler responseHandler = new BasicResponseHandler();
173
                    String body = responseHandler.handleResponse(resp);
174
                    
175
                    if (resp.getStatusLine().getStatusCode() == 200 || resp.getStatusLine().getStatusCode() == 203) {                            
176
                            ServersXMLParser serversXMLParser = new ServersXMLParser();
177
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
178
                            XMLReader xmlReader = saxParser.getXMLReader();
179
                            xmlReader.setContentHandler(serversXMLParser);
180
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
181
                            server = serversXMLParser.getServer();                            
182
                    } else {
183
                            CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
184
                            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
185
                            XMLReader xmlReader = saxParser.getXMLReader();
186
                            xmlReader.setContentHandler(parser);
187
                            xmlReader.parse(new InputSource(new StringReader(body)));                            
188
                            CloudServersException cse = parser.getException();                            
189
                            throw cse;
190
                    }
191
                } catch (ClientProtocolException e) {
192
                        CloudServersException cse = new CloudServersException();
193
                        cse.setMessage(e.getLocalizedMessage());
194
                        throw cse;
195
                } catch (IOException e) {
196
                        CloudServersException cse = new CloudServersException();
197
                        cse.setMessage(e.getLocalizedMessage());
198
                        throw cse;
199
                } catch (ParserConfigurationException e) {
200
                        CloudServersException cse = new CloudServersException();
201
                        cse.setMessage(e.getLocalizedMessage());
202
                        throw cse;
203
                } catch (SAXException e) {
204
                        CloudServersException cse = new CloudServersException();
205
                        cse.setMessage(e.getLocalizedMessage());
206
                        throw cse;
207
                } catch (FactoryConfigurationError e) {
208
                        CloudServersException cse = new CloudServersException();
209
                        cse.setMessage(e.getLocalizedMessage());
210
                        throw cse;
211
                }
212
                
213
                return server;
214
        }
215

    
216
        public HttpResponse reboot(Server server, String rebootType, Context context) throws CloudServersException {
217
                HttpResponse resp = null;
218
                CustomHttpClient httpclient = new CustomHttpClient(context);
219
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + "/action.xml");                
220
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
221
                post.addHeader("Content-Type", "application/xml");
222

    
223
                StringEntity tmp = null;
224
                try {
225
                        tmp = new StringEntity("<reboot xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" type=\"" + rebootType + "\"/>");
226
                } catch (UnsupportedEncodingException e) {
227
                        CloudServersException cse = new CloudServersException();
228
                        cse.setMessage(e.getLocalizedMessage());
229
                        throw cse;
230
                }
231
                post.setEntity(tmp);
232
                
233
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
234

    
235
                try {                        
236
                        resp = httpclient.execute(post);                        
237
                } catch (ClientProtocolException e) {
238
                        CloudServersException cse = new CloudServersException();
239
                        cse.setMessage(e.getLocalizedMessage());
240
                        throw cse;
241
                } catch (IOException e) {
242
                        CloudServersException cse = new CloudServersException();
243
                        cse.setMessage(e.getLocalizedMessage());
244
                        throw cse;
245
                } catch (FactoryConfigurationError e) {
246
                        CloudServersException cse = new CloudServersException();
247
                        cse.setMessage(e.getLocalizedMessage());
248
                        throw cse;
249
                }        
250
                return resp;
251
        }
252

    
253
        public HttpResponse resize(Server server, int flavorId, Context context) throws CloudServersException {
254
                HttpResponse resp = null;
255
                CustomHttpClient httpclient = new CustomHttpClient(context);
256
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + "/action.xml");                        
257
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
258
                post.addHeader("Content-Type", "application/xml");
259
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
260

    
261
                StringEntity tmp = null;
262
                try {
263
                        tmp = new StringEntity("<resize xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" flavorId=\"" + flavorId + "\"/>");
264
                } catch (UnsupportedEncodingException e) {
265
                        CloudServersException cse = new CloudServersException();
266
                        cse.setMessage(e.getLocalizedMessage());
267
                        throw cse;
268
                }
269
                post.setEntity(tmp);
270

    
271
                try {                        
272
                        resp = httpclient.execute(post);
273
                } catch (ClientProtocolException e) {
274
                        CloudServersException cse = new CloudServersException();
275
                        cse.setMessage(e.getLocalizedMessage());
276
                        throw cse;
277
                } catch (IOException e) {
278
                        CloudServersException cse = new CloudServersException();
279
                        cse.setMessage(e.getLocalizedMessage());
280
                        throw cse;
281
                } catch (FactoryConfigurationError e) {
282
                        CloudServersException cse = new CloudServersException();
283
                        cse.setMessage(e.getLocalizedMessage());
284
                        throw cse;
285
                }        
286
                return resp;
287
        }
288
        
289
        public HttpResponse confirmResize(Server server, Context context) throws CloudServersException {
290
                HttpResponse resp = null;
291
                CustomHttpClient httpclient = new CustomHttpClient(context);
292
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + "/action.xml");                        
293
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
294
                post.addHeader("Content-Type", "application/xml");
295
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
296

    
297
                StringEntity tmp = null;
298
                try {
299
                        tmp = new StringEntity("<confirmResize xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\">");
300
                } catch (UnsupportedEncodingException e) {
301
                        CloudServersException cse = new CloudServersException();
302
                        cse.setMessage(e.getLocalizedMessage());
303
                        throw cse;
304
                }
305
                post.setEntity(tmp);
306

    
307
                try {                        
308
                        resp = httpclient.execute(post);
309
                } catch (ClientProtocolException e) {
310
                        CloudServersException cse = new CloudServersException();
311
                        cse.setMessage(e.getLocalizedMessage());
312
                        throw cse;
313
                } catch (IOException e) {
314
                        CloudServersException cse = new CloudServersException();
315
                        cse.setMessage(e.getLocalizedMessage());
316
                        throw cse;
317
                } catch (FactoryConfigurationError e) {
318
                        CloudServersException cse = new CloudServersException();
319
                        cse.setMessage(e.getLocalizedMessage());
320
                        throw cse;
321
                }        
322
                return resp;
323
        }
324

    
325

    
326
        public HttpResponse delete(Server server, Context context) throws CloudServersException {
327
                HttpResponse resp = null;
328
                CustomHttpClient httpclient = new CustomHttpClient(context);
329
                HttpDelete delete = new HttpDelete(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + ".xml");                                
330
                delete.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
331
                delete.addHeader("Content-Type", "application/xml");
332
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
333

    
334
                try {                        
335
                        resp = httpclient.execute(delete);
336
                } catch (ClientProtocolException e) {
337
                        CloudServersException cse = new CloudServersException();
338
                        cse.setMessage(e.getLocalizedMessage());
339
                        throw cse;
340
                } catch (IOException e) {
341
                        CloudServersException cse = new CloudServersException();
342
                        cse.setMessage(e.getLocalizedMessage());
343
                        throw cse;
344
                } catch (FactoryConfigurationError e) {
345
                        CloudServersException cse = new CloudServersException();
346
                        cse.setMessage(e.getLocalizedMessage());
347
                        throw cse;
348
                }        
349
                return resp;
350
        }
351
        
352
        public HttpResponse rename(Server server, String name, Context context) throws CloudServersException{
353
                HttpResponse resp = null;
354
                CustomHttpClient httpclient = new CustomHttpClient(context);
355
                HttpPut put = new HttpPut(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + ".xml");
356
        
357
                put.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
358
                put.addHeader("Content-Type", "application/xml");
359
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);  //*******FIND OUT WITH THIS DOES?
360
        
361
                StringEntity tmp = null;
362
                try {
363
                        tmp = new StringEntity("<server xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" name=\"" + name + "\"/>");
364
                } catch (UnsupportedEncodingException e) {
365
                        CloudServersException cse = new CloudServersException();
366
                        cse.setMessage(e.getLocalizedMessage());
367
                        throw cse;
368
                }
369
                put.setEntity(tmp);
370
                
371
                try {                        
372
                        resp = httpclient.execute(put);
373
                } catch (ClientProtocolException e) {
374
                        CloudServersException cse = new CloudServersException();
375
                        cse.setMessage(e.getLocalizedMessage());
376
                        throw cse;
377
                } catch (IOException e) {
378
                        CloudServersException cse = new CloudServersException();
379
                        cse.setMessage(e.getLocalizedMessage());
380
                        throw cse;
381
                } catch (FactoryConfigurationError e) {
382
                        CloudServersException cse = new CloudServersException();
383
                        cse.setMessage(e.getLocalizedMessage());
384
                        throw cse;
385
                }        
386
                return resp;
387
        }
388
        
389
        public HttpResponse rebuild(Server server, int imageId, Context context) throws CloudServersException {
390
                HttpResponse resp = null;
391
                CustomHttpClient httpclient = new CustomHttpClient(context);
392
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + "/action.xml");
393
                                
394
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
395
                post.addHeader("Content-Type", "application/xml");
396
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
397

    
398
                StringEntity tmp = null;
399
                try {
400
                        tmp = new StringEntity("<rebuild xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" imageId=\"" + imageId + "\"/>");
401
                } catch (UnsupportedEncodingException e) {
402
                        CloudServersException cse = new CloudServersException();
403
                        cse.setMessage(e.getLocalizedMessage());
404
                        throw cse;
405
                }
406
                post.setEntity(tmp);
407

    
408
                try {                        
409
                        resp = httpclient.execute(post);
410
                } catch (ClientProtocolException e) {
411
                        CloudServersException cse = new CloudServersException();
412
                        cse.setMessage(e.getLocalizedMessage());
413
                        throw cse;
414
                } catch (IOException e) {
415
                        CloudServersException cse = new CloudServersException();
416
                        cse.setMessage(e.getLocalizedMessage());
417
                        throw cse;
418
                } catch (FactoryConfigurationError e) {
419
                        CloudServersException cse = new CloudServersException();
420
                        cse.setMessage(e.getLocalizedMessage());
421
                        throw cse;
422
                }        
423
                return resp;
424
        }
425

    
426
        public HttpResponse backup(Server server, String weeklyValue, String dailyValue, boolean enabled, Context context) throws CloudServersException {
427
                HttpResponse resp = null;
428
                CustomHttpClient httpclient = new CustomHttpClient(context);
429
                HttpPost post = new HttpPost(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + "/backup_schedule.xml");
430
                                
431
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
432
                post.addHeader("Content-Type", "application/xml");
433
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
434

    
435
                StringEntity tmp = null;
436
                try {
437
                        tmp = new StringEntity("<backupSchedule xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" enabled=\"" + enabled + "\" " +
438
                                        "weekly=\"" + weeklyValue + "\" daily=\"" + dailyValue + "\"/>");
439
                        
440
                } catch (UnsupportedEncodingException e) {
441
                        CloudServersException cse = new CloudServersException();
442
                        cse.setMessage(e.getLocalizedMessage());
443
                        throw cse;
444
                }
445
                post.setEntity(tmp);
446

    
447
                try {                        
448
                        resp = httpclient.execute(post);
449
                } catch (ClientProtocolException e) {
450
                        CloudServersException cse = new CloudServersException();
451
                        cse.setMessage(e.getLocalizedMessage());
452
                        throw cse;
453
                } catch (IOException e) {
454
                        CloudServersException cse = new CloudServersException();
455
                        cse.setMessage(e.getLocalizedMessage());
456
                        throw cse;
457
                } catch (FactoryConfigurationError e) {
458
                        CloudServersException cse = new CloudServersException();
459
                        cse.setMessage(e.getLocalizedMessage());
460
                        throw cse;
461
                }        
462
                return resp;
463
        }
464
        
465
        public HttpResponse changePassword(Server server, String password, Context context) throws CloudServersException{
466
                HttpResponse resp = null;
467
                CustomHttpClient httpclient = new CustomHttpClient(context);
468
                HttpPut put = new HttpPut(Account.getAccount().getServerUrl() + "/servers/" + server.getId() + ".xml");
469
        
470
                put.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
471
                put.addHeader("Content-Type", "application/xml");
472
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); 
473
        
474
                StringEntity tmp = null;
475
                try {
476
                        tmp = new StringEntity("<server xmlns=\"http://docs.rackspacecloud.com/servers/api/v1.0\" adminPass=\"" + password + "\"/>");
477
                } catch (UnsupportedEncodingException e) {
478
                        CloudServersException cse = new CloudServersException();
479
                        cse.setMessage(e.getLocalizedMessage());
480
                        throw cse;
481
                }
482
                put.setEntity(tmp);
483
                
484
                try {                        
485
                        resp = httpclient.execute(put);
486
                } catch (ClientProtocolException e) {
487
                        CloudServersException cse = new CloudServersException();
488
                        cse.setMessage(e.getLocalizedMessage());
489
                        throw cse;
490
                } catch (IOException e) {
491
                        CloudServersException cse = new CloudServersException();
492
                        cse.setMessage(e.getLocalizedMessage());
493
                        throw cse;
494
                } catch (FactoryConfigurationError e) {
495
                        CloudServersException cse = new CloudServersException();
496
                        cse.setMessage(e.getLocalizedMessage());
497
                        throw cse;
498
                }        
499
                return resp;
500
        }
501
        
502
}