root / src / com / rackspace / cloud / loadbalancer / api / client / NetworkItemManager.java @ c25e8fa0
History | View | Annotate | Download (6.9 kB)
1 | c25e8fa0 | Adam Menz | /**
|
---|---|---|---|
2 | c25e8fa0 | Adam Menz | *
|
3 | c25e8fa0 | Adam Menz | */
|
4 | c25e8fa0 | Adam Menz | package com.rackspace.cloud.loadbalancer.api.client; |
5 | c25e8fa0 | Adam Menz | |
6 | c25e8fa0 | Adam Menz | import java.io.IOException; |
7 | c25e8fa0 | Adam Menz | import java.io.StringReader; |
8 | c25e8fa0 | Adam Menz | import java.io.UnsupportedEncodingException; |
9 | c25e8fa0 | Adam Menz | import java.util.ArrayList; |
10 | c25e8fa0 | Adam Menz | |
11 | c25e8fa0 | Adam Menz | import javax.xml.parsers.FactoryConfigurationError; |
12 | c25e8fa0 | Adam Menz | import javax.xml.parsers.ParserConfigurationException; |
13 | c25e8fa0 | Adam Menz | import javax.xml.parsers.SAXParser; |
14 | c25e8fa0 | Adam Menz | import javax.xml.parsers.SAXParserFactory; |
15 | c25e8fa0 | Adam Menz | |
16 | c25e8fa0 | Adam Menz | import org.apache.http.HttpResponse; |
17 | c25e8fa0 | Adam Menz | import org.apache.http.client.ClientProtocolException; |
18 | c25e8fa0 | Adam Menz | import org.apache.http.client.methods.HttpDelete; |
19 | c25e8fa0 | Adam Menz | import org.apache.http.client.methods.HttpGet; |
20 | c25e8fa0 | Adam Menz | import org.apache.http.client.methods.HttpPost; |
21 | c25e8fa0 | Adam Menz | import org.apache.http.entity.StringEntity; |
22 | c25e8fa0 | Adam Menz | import org.apache.http.impl.client.BasicResponseHandler; |
23 | c25e8fa0 | Adam Menz | import org.apache.http.protocol.RequestExpectContinue; |
24 | c25e8fa0 | Adam Menz | import org.xml.sax.InputSource; |
25 | c25e8fa0 | Adam Menz | import org.xml.sax.SAXException; |
26 | c25e8fa0 | Adam Menz | import org.xml.sax.XMLReader; |
27 | c25e8fa0 | Adam Menz | |
28 | c25e8fa0 | Adam Menz | import android.content.Context; |
29 | c25e8fa0 | Adam Menz | |
30 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.files.api.client.CustomHttpClient; |
31 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.client.http.LoadBalancersException; |
32 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.parsers.CloudLoadBalancersFaultXMLParser; |
33 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.loadbalancer.api.parsers.NetworkItemXMLParser; |
34 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.servers.api.client.Account; |
35 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.servers.api.client.CloudServersException; |
36 | c25e8fa0 | Adam Menz | import com.rackspace.cloud.servers.api.client.http.HttpBundle; |
37 | c25e8fa0 | Adam Menz | |
38 | c25e8fa0 | Adam Menz | public class NetworkItemManager extends EntityManager { |
39 | c25e8fa0 | Adam Menz | private Context context; |
40 | c25e8fa0 | Adam Menz | |
41 | c25e8fa0 | Adam Menz | public NetworkItemManager(Context context) { |
42 | c25e8fa0 | Adam Menz | this.context = context;
|
43 | c25e8fa0 | Adam Menz | } |
44 | c25e8fa0 | Adam Menz | |
45 | c25e8fa0 | Adam Menz | public ArrayList<NetworkItem> createList(LoadBalancer loadBalancer) throws LoadBalancersException { |
46 | c25e8fa0 | Adam Menz | CustomHttpClient httpclient = new CustomHttpClient(context);
|
47 | c25e8fa0 | Adam Menz | HttpGet get = new HttpGet(LoadBalancer.getRegionUrl(loadBalancer.getRegion())
|
48 | c25e8fa0 | Adam Menz | + Account.getAccount().getAccountId() + "/loadbalancers/" + loadBalancer.getId() + "/accesslist"); |
49 | c25e8fa0 | Adam Menz | |
50 | c25e8fa0 | Adam Menz | ArrayList<NetworkItem> networkItems = new ArrayList<NetworkItem>(); |
51 | c25e8fa0 | Adam Menz | |
52 | c25e8fa0 | Adam Menz | get.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
|
53 | c25e8fa0 | Adam Menz | get.addHeader("Accept", "application/xml"); |
54 | c25e8fa0 | Adam Menz | |
55 | c25e8fa0 | Adam Menz | try {
|
56 | c25e8fa0 | Adam Menz | HttpResponse resp = httpclient.execute(get); |
57 | c25e8fa0 | Adam Menz | BasicResponseHandler responseHandler = new BasicResponseHandler();
|
58 | c25e8fa0 | Adam Menz | String body = responseHandler.handleResponse(resp);
|
59 | c25e8fa0 | Adam Menz | if (resp.getStatusLine().getStatusCode() == 200 || resp.getStatusLine().getStatusCode() == 202) { |
60 | c25e8fa0 | Adam Menz | NetworkItemXMLParser networkItemXMLParser = new NetworkItemXMLParser();
|
61 | c25e8fa0 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
62 | c25e8fa0 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
63 | c25e8fa0 | Adam Menz | xmlReader.setContentHandler(networkItemXMLParser); |
64 | c25e8fa0 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
65 | c25e8fa0 | Adam Menz | networkItems = networkItemXMLParser.getNetworkItems(); |
66 | c25e8fa0 | Adam Menz | } else {
|
67 | c25e8fa0 | Adam Menz | CloudLoadBalancersFaultXMLParser parser = new CloudLoadBalancersFaultXMLParser();
|
68 | c25e8fa0 | Adam Menz | SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); |
69 | c25e8fa0 | Adam Menz | XMLReader xmlReader = saxParser.getXMLReader(); |
70 | c25e8fa0 | Adam Menz | xmlReader.setContentHandler(parser); |
71 | c25e8fa0 | Adam Menz | xmlReader.parse(new InputSource(new StringReader(body))); |
72 | c25e8fa0 | Adam Menz | LoadBalancersException cse = parser.getException(); |
73 | c25e8fa0 | Adam Menz | throw cse;
|
74 | c25e8fa0 | Adam Menz | } |
75 | c25e8fa0 | Adam Menz | } catch (ClientProtocolException e) {
|
76 | c25e8fa0 | Adam Menz | LoadBalancersException cse = new LoadBalancersException();
|
77 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
78 | c25e8fa0 | Adam Menz | throw cse;
|
79 | c25e8fa0 | Adam Menz | } catch (IOException e) { |
80 | c25e8fa0 | Adam Menz | LoadBalancersException cse = new LoadBalancersException();
|
81 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
82 | c25e8fa0 | Adam Menz | throw cse;
|
83 | c25e8fa0 | Adam Menz | } catch (ParserConfigurationException e) { |
84 | c25e8fa0 | Adam Menz | LoadBalancersException cse = new LoadBalancersException();
|
85 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
86 | c25e8fa0 | Adam Menz | throw cse;
|
87 | c25e8fa0 | Adam Menz | } catch (SAXException e) {
|
88 | c25e8fa0 | Adam Menz | LoadBalancersException cse = new LoadBalancersException();
|
89 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
90 | c25e8fa0 | Adam Menz | throw cse;
|
91 | c25e8fa0 | Adam Menz | } catch (FactoryConfigurationError e) { |
92 | c25e8fa0 | Adam Menz | LoadBalancersException cse = new LoadBalancersException();
|
93 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
94 | c25e8fa0 | Adam Menz | throw cse;
|
95 | c25e8fa0 | Adam Menz | } |
96 | c25e8fa0 | Adam Menz | return networkItems;
|
97 | c25e8fa0 | Adam Menz | } |
98 | c25e8fa0 | Adam Menz | |
99 | c25e8fa0 | Adam Menz | public HttpBundle create(LoadBalancer loadBalancer, ArrayList<NetworkItem> entity) throws CloudServersException { |
100 | c25e8fa0 | Adam Menz | HttpResponse resp = null;
|
101 | c25e8fa0 | Adam Menz | CustomHttpClient httpclient = new CustomHttpClient(context);
|
102 | c25e8fa0 | Adam Menz | HttpPost post = new HttpPost(LoadBalancer.getRegionUrl(loadBalancer.getRegion())
|
103 | c25e8fa0 | Adam Menz | + Account.getAccount().getAccountId() + "/loadbalancers/" + loadBalancer.getId() + "/accesslist"); |
104 | c25e8fa0 | Adam Menz | |
105 | c25e8fa0 | Adam Menz | post.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
|
106 | c25e8fa0 | Adam Menz | post.addHeader("Content-Type", "application/xml"); |
107 | c25e8fa0 | Adam Menz | |
108 | c25e8fa0 | Adam Menz | String xml = "<accessList xmlns=\"http://docs.openstack.org/loadbalancers/api/v1.0\"> "; |
109 | c25e8fa0 | Adam Menz | for(NetworkItem networkItem : entity){
|
110 | c25e8fa0 | Adam Menz | xml += "<networkItem " +
|
111 | c25e8fa0 | Adam Menz | "address=\"" + networkItem.getAddress() + "\" " + |
112 | c25e8fa0 | Adam Menz | "type=\"" + networkItem.getType() + "\" /> "; |
113 | c25e8fa0 | Adam Menz | } |
114 | c25e8fa0 | Adam Menz | xml += "</accessList>";
|
115 | c25e8fa0 | Adam Menz | |
116 | c25e8fa0 | Adam Menz | StringEntity tmp = null;
|
117 | c25e8fa0 | Adam Menz | try {
|
118 | c25e8fa0 | Adam Menz | tmp = new StringEntity(xml);
|
119 | c25e8fa0 | Adam Menz | } catch (UnsupportedEncodingException e) { |
120 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
121 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
122 | c25e8fa0 | Adam Menz | throw cse;
|
123 | c25e8fa0 | Adam Menz | } |
124 | c25e8fa0 | Adam Menz | post.setEntity(tmp); |
125 | c25e8fa0 | Adam Menz | httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); |
126 | c25e8fa0 | Adam Menz | |
127 | c25e8fa0 | Adam Menz | HttpBundle bundle = new HttpBundle();
|
128 | c25e8fa0 | Adam Menz | bundle.setCurlRequest(post); |
129 | c25e8fa0 | Adam Menz | |
130 | c25e8fa0 | Adam Menz | try {
|
131 | c25e8fa0 | Adam Menz | resp = httpclient.execute(post); |
132 | c25e8fa0 | Adam Menz | bundle.setHttpResponse(resp); |
133 | c25e8fa0 | Adam Menz | } catch (ClientProtocolException e) {
|
134 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
135 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
136 | c25e8fa0 | Adam Menz | throw cse;
|
137 | c25e8fa0 | Adam Menz | } catch (IOException e) { |
138 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
139 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
140 | c25e8fa0 | Adam Menz | throw cse;
|
141 | c25e8fa0 | Adam Menz | } catch (FactoryConfigurationError e) { |
142 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
143 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
144 | c25e8fa0 | Adam Menz | throw cse;
|
145 | c25e8fa0 | Adam Menz | } |
146 | c25e8fa0 | Adam Menz | return bundle;
|
147 | c25e8fa0 | Adam Menz | } |
148 | c25e8fa0 | Adam Menz | |
149 | c25e8fa0 | Adam Menz | public HttpBundle delete(LoadBalancer loadBalancer, NetworkItem networkItem) throws CloudServersException { |
150 | c25e8fa0 | Adam Menz | HttpResponse resp = null;
|
151 | c25e8fa0 | Adam Menz | CustomHttpClient httpclient = new CustomHttpClient(context);
|
152 | c25e8fa0 | Adam Menz | |
153 | c25e8fa0 | Adam Menz | HttpDelete delete = new HttpDelete(LoadBalancer.getRegionUrl(loadBalancer.getRegion()) + Account.getAccount().getAccountId()
|
154 | c25e8fa0 | Adam Menz | + "/loadbalancers/" + loadBalancer.getId() + "/accesslist/" + networkItem.getId()); |
155 | c25e8fa0 | Adam Menz | delete.addHeader("X-Auth-Token", Account.getAccount().getAuthToken());
|
156 | c25e8fa0 | Adam Menz | delete.addHeader("Content-Type", "application/xml"); |
157 | c25e8fa0 | Adam Menz | httpclient.removeRequestInterceptorByClass(RequestExpectContinue.class); |
158 | c25e8fa0 | Adam Menz | |
159 | c25e8fa0 | Adam Menz | HttpBundle bundle = new HttpBundle();
|
160 | c25e8fa0 | Adam Menz | bundle.setCurlRequest(delete); |
161 | c25e8fa0 | Adam Menz | |
162 | c25e8fa0 | Adam Menz | try {
|
163 | c25e8fa0 | Adam Menz | resp = httpclient.execute(delete); |
164 | c25e8fa0 | Adam Menz | bundle.setHttpResponse(resp); |
165 | c25e8fa0 | Adam Menz | } catch (ClientProtocolException e) {
|
166 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
167 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
168 | c25e8fa0 | Adam Menz | throw cse;
|
169 | c25e8fa0 | Adam Menz | } catch (IOException e) { |
170 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
171 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
172 | c25e8fa0 | Adam Menz | throw cse;
|
173 | c25e8fa0 | Adam Menz | } catch (FactoryConfigurationError e) { |
174 | c25e8fa0 | Adam Menz | CloudServersException cse = new CloudServersException();
|
175 | c25e8fa0 | Adam Menz | cse.setMessage(e.getLocalizedMessage()); |
176 | c25e8fa0 | Adam Menz | throw cse;
|
177 | c25e8fa0 | Adam Menz | } |
178 | c25e8fa0 | Adam Menz | return bundle;
|
179 | c25e8fa0 | Adam Menz | } |
180 | c25e8fa0 | Adam Menz | |
181 | c25e8fa0 | Adam Menz | } |