Statistics
| Branch: | Revision:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
324

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

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

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

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

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

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

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