Statistics
| Branch: | Revision:

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
}