Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / loadbalancer / api / client / NetworkItemManager.java @ c25e8fa0

History | View | Annotate | Download (6.9 kB)

1
/**
2
 * 
3
 */
4
package com.rackspace.cloud.loadbalancer.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.entity.StringEntity;
22
import org.apache.http.impl.client.BasicResponseHandler;
23
import org.apache.http.protocol.RequestExpectContinue;
24
import org.xml.sax.InputSource;
25
import org.xml.sax.SAXException;
26
import org.xml.sax.XMLReader;
27

    
28
import android.content.Context;
29

    
30
import com.rackspace.cloud.files.api.client.CustomHttpClient;
31
import com.rackspace.cloud.loadbalancer.api.client.http.LoadBalancersException;
32
import com.rackspace.cloud.loadbalancer.api.parsers.CloudLoadBalancersFaultXMLParser;
33
import com.rackspace.cloud.loadbalancer.api.parsers.NetworkItemXMLParser;
34
import com.rackspace.cloud.servers.api.client.Account;
35
import com.rackspace.cloud.servers.api.client.CloudServersException;
36
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
37

    
38
public class NetworkItemManager extends EntityManager {
39
        private Context context;
40

    
41
        public NetworkItemManager(Context context) {
42
                this.context = context;
43
        }
44

    
45
        public ArrayList<NetworkItem> createList(LoadBalancer loadBalancer) throws LoadBalancersException {
46
                CustomHttpClient httpclient = new CustomHttpClient(context);
47
                HttpGet get = new HttpGet(LoadBalancer.getRegionUrl(loadBalancer.getRegion()) 
48
                                + Account.getAccount().getAccountId() + "/loadbalancers/" + loadBalancer.getId() + "/accesslist");
49
                
50
                ArrayList<NetworkItem> networkItems = new ArrayList<NetworkItem>();
51

    
52
                get.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
53
                get.addHeader("Accept", "application/xml");
54

    
55
                try {                        
56
                        HttpResponse resp = httpclient.execute(get);                    
57
                        BasicResponseHandler responseHandler = new BasicResponseHandler();
58
                        String body = responseHandler.handleResponse(resp);
59
                        if (resp.getStatusLine().getStatusCode() == 200 || resp.getStatusLine().getStatusCode() == 202) {                            
60
                                NetworkItemXMLParser networkItemXMLParser = new NetworkItemXMLParser();
61
                                SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
62
                                XMLReader xmlReader = saxParser.getXMLReader();
63
                                xmlReader.setContentHandler(networkItemXMLParser);
64
                                xmlReader.parse(new InputSource(new StringReader(body)));                            
65
                                networkItems = networkItemXMLParser.getNetworkItems();                            
66
                        } else {
67
                                CloudLoadBalancersFaultXMLParser parser = new CloudLoadBalancersFaultXMLParser();
68
                                SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
69
                                XMLReader xmlReader = saxParser.getXMLReader();
70
                                xmlReader.setContentHandler(parser);
71
                                xmlReader.parse(new InputSource(new StringReader(body)));                            
72
                                LoadBalancersException cse = parser.getException();                            
73
                                throw cse;
74
                        }
75
                } catch (ClientProtocolException e) {
76
                        LoadBalancersException cse = new LoadBalancersException();
77
                        cse.setMessage(e.getLocalizedMessage());
78
                        throw cse;
79
                } catch (IOException e) {
80
                        LoadBalancersException cse = new LoadBalancersException();
81
                        cse.setMessage(e.getLocalizedMessage());
82
                        throw cse;
83
                } catch (ParserConfigurationException e) {
84
                        LoadBalancersException cse = new LoadBalancersException();
85
                        cse.setMessage(e.getLocalizedMessage());
86
                        throw cse;
87
                } catch (SAXException e) {
88
                        LoadBalancersException cse = new LoadBalancersException();
89
                        cse.setMessage(e.getLocalizedMessage());
90
                        throw cse;
91
                } catch (FactoryConfigurationError e) {
92
                        LoadBalancersException cse = new LoadBalancersException();
93
                        cse.setMessage(e.getLocalizedMessage());
94
                        throw cse;
95
                }
96
                return networkItems;
97
        }
98
        
99
        public HttpBundle create(LoadBalancer loadBalancer, ArrayList<NetworkItem> entity) throws CloudServersException {
100
                HttpResponse resp = null;
101
                CustomHttpClient httpclient = new CustomHttpClient(context);
102
                HttpPost post = new HttpPost(LoadBalancer.getRegionUrl(loadBalancer.getRegion()) 
103
                                + Account.getAccount().getAccountId() + "/loadbalancers/" + loadBalancer.getId() + "/accesslist");
104
                
105
                post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
106
                post.addHeader("Content-Type", "application/xml");
107

    
108
                String xml = "<accessList xmlns=\"http://docs.openstack.org/loadbalancers/api/v1.0\"> ";
109
                                        for(NetworkItem networkItem : entity){
110
                                        xml += "<networkItem " +
111
                                                   "address=\"" + networkItem.getAddress() + "\" " + 
112
                                                   "type=\"" + networkItem.getType() + "\" /> ";
113
                                        }
114
                                        xml += "</accessList>";
115

    
116
                StringEntity tmp = null;
117
                try {
118
                        tmp = new StringEntity(xml);
119
                } catch (UnsupportedEncodingException e) {
120
                        CloudServersException cse = new CloudServersException();
121
                        cse.setMessage(e.getLocalizedMessage());
122
                        throw cse;
123
                }
124
                post.setEntity(tmp);
125
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
126

    
127
                HttpBundle bundle = new HttpBundle();
128
                bundle.setCurlRequest(post);
129
                
130
                try {                        
131
                        resp = httpclient.execute(post);
132
                        bundle.setHttpResponse(resp);
133
                } catch (ClientProtocolException e) {
134
                        CloudServersException cse = new CloudServersException();
135
                        cse.setMessage(e.getLocalizedMessage());
136
                        throw cse;
137
                } catch (IOException e) {
138
                        CloudServersException cse = new CloudServersException();
139
                        cse.setMessage(e.getLocalizedMessage());
140
                        throw cse;
141
                } catch (FactoryConfigurationError e) {
142
                        CloudServersException cse = new CloudServersException();
143
                        cse.setMessage(e.getLocalizedMessage());
144
                        throw cse;
145
                }        
146
                return bundle;
147
        }
148

    
149
        public HttpBundle delete(LoadBalancer loadBalancer, NetworkItem networkItem) throws CloudServersException {
150
                HttpResponse resp = null;
151
                CustomHttpClient httpclient = new CustomHttpClient(context);
152

    
153
                HttpDelete delete = new HttpDelete(LoadBalancer.getRegionUrl(loadBalancer.getRegion()) + Account.getAccount().getAccountId() 
154
                                + "/loadbalancers/" + loadBalancer.getId() + "/accesslist/" + networkItem.getId());                                
155
                delete.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
156
                delete.addHeader("Content-Type", "application/xml");
157
                httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class);
158

    
159
                HttpBundle bundle = new HttpBundle();
160
                bundle.setCurlRequest(delete);
161

    
162
                try {                        
163
                        resp = httpclient.execute(delete);
164
                        bundle.setHttpResponse(resp);
165
                } catch (ClientProtocolException e) {
166
                        CloudServersException cse = new CloudServersException();
167
                        cse.setMessage(e.getLocalizedMessage());
168
                        throw cse;
169
                } catch (IOException e) {
170
                        CloudServersException cse = new CloudServersException();
171
                        cse.setMessage(e.getLocalizedMessage());
172
                        throw cse;
173
                } catch (FactoryConfigurationError e) {
174
                        CloudServersException cse = new CloudServersException();
175
                        cse.setMessage(e.getLocalizedMessage());
176
                        throw cse;
177
                }        
178
                return bundle;
179
        }
180

    
181
}