Incrementing versions by 0.1.0 for post-helium master branch
[plugin2oc.git] / neutron / src / main / java / org / opendaylight / plugin2oc / neutron / LoadBalancerHealthMonitorHandler.java
1 package org.opendaylight.plugin2oc.neutron;
2
3 import java.io.IOException;
4 import java.net.HttpURLConnection;
5 import java.util.UUID;
6
7 import net.juniper.contrail.api.ApiConnector;
8 import net.juniper.contrail.api.types.LoadbalancerHealthmonitor;
9 import net.juniper.contrail.api.types.LoadbalancerHealthmonitorType;
10 import net.juniper.contrail.api.types.Project;
11
12 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerHealthMonitorAware;
13 import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerHealthMonitor;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 /**
18  * Handle requests for Neutron LoadBalancerHealthMonitor.
19  */
20 public class LoadBalancerHealthMonitorHandler implements INeutronLoadBalancerHealthMonitorAware {
21
22     /**
23      * Logger instance.
24      */
25     static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerHealthMonitorHandler.class);
26     static ApiConnector apiConnector;
27
28     /**
29      * Invoked when a health monitor creation is requested to check if the specified
30      * health monitor can be created and then creates the health monitor
31      *
32      * @param loadBalancerHealthMonitor
33      *            An instance of proposed new NeutronLoadBalancerHealthMonitor object.
34      *
35      * @return A HTTP status code to the creation request.
36      */
37     @Override
38     public int canCreateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
39         if (loadBalancerHealthMonitor == null) {
40             LOGGER.error("LoadBalancerHealthMonitor object can't be null..");
41             return HttpURLConnection.HTTP_BAD_REQUEST;
42         }
43         apiConnector = Activator.apiConnector;
44         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID() == null) {
45             LOGGER.error("LoadBalancerHealthMonitor tenant Id can not be null");
46             return HttpURLConnection.HTTP_BAD_REQUEST;
47         }
48         try {
49             String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
50             String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
51             try {
52                 if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
53                     loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
54                 }
55                 if (!(projectUUID.contains("-"))) {
56                     projectUUID = Utils.uuidFormater(projectUUID);
57                 }
58                 boolean isValidLoadBalancerHealthMonitorUUID = Utils.isValidHexNumber(loadBalancerHealthMonitorUUID);
59                 boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
60                 if (!isValidLoadBalancerHealthMonitorUUID || !isValidprojectUUID) {
61                     LOGGER.info("Badly formed Hexadecimal UUID...");
62                     return HttpURLConnection.HTTP_BAD_REQUEST;
63                 }
64                 projectUUID = UUID.fromString(projectUUID).toString();
65                 loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
66             } catch (Exception ex) {
67                 LOGGER.error("UUID input incorrect", ex);
68                 return HttpURLConnection.HTTP_BAD_REQUEST;
69             }
70             Project project = (Project) apiConnector.findById(Project.class, projectUUID);
71             if (project == null) {
72                 try {
73                     Thread.currentThread();
74                     Thread.sleep(3000);
75                 } catch (InterruptedException e) {
76                     LOGGER.error("InterruptedException :    ", e);
77                     return HttpURLConnection.HTTP_BAD_REQUEST;
78                 }
79                 project = (Project) apiConnector.findById(Project.class, projectUUID);
80                 if (project == null) {
81                     LOGGER.error("Could not find projectUUID...");
82                     return HttpURLConnection.HTTP_NOT_FOUND;
83                 }
84             }
85             LoadbalancerHealthmonitor virtualHealthMonitorByID = (LoadbalancerHealthmonitor) apiConnector.findById(
86                     LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
87             if (virtualHealthMonitorByID != null) {
88                 LOGGER.warn("LoadBalancerHealthMonitor already exists with UUID" + virtualHealthMonitorByID);
89                 return HttpURLConnection.HTTP_FORBIDDEN;
90             }
91             return HttpURLConnection.HTTP_OK;
92         } catch (IOException ie) {
93             LOGGER.error("IOException :   " + ie);
94             return HttpURLConnection.HTTP_INTERNAL_ERROR;
95         } catch (Exception e) {
96             LOGGER.error("Exception :   " + e);
97             return HttpURLConnection.HTTP_INTERNAL_ERROR;
98         }
99     }
100
101     /**
102      * Invoked to take action after a health monitor has been created.
103      *
104      * @param loadBalancerHealthMonitor
105      *            An instance of new NeutronLoadBalancerHealthMonitor object.
106      */
107     @Override
108     public void neutronLoadBalancerHealthMonitorCreated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
109         try {
110             createHealthMonitor(loadBalancerHealthMonitor);
111         } catch (IOException ex) {
112             LOGGER.warn("Exception  :    " + ex);
113         }
114         LoadbalancerHealthmonitor virtuaLoadbalancerHealthMonitor = null;
115         try {
116             String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
117             if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
118                 loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
119             }
120             loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
121             virtuaLoadbalancerHealthMonitor = (LoadbalancerHealthmonitor) apiConnector.findById(
122                     LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
123             if (virtuaLoadbalancerHealthMonitor != null) {
124                 LOGGER.info("LoadBalancerHealthMonitor creation verified....");
125             } else {
126                 LOGGER.info("LoadBalancerHealthMonitor creation failed...");
127             }
128         } catch (Exception e) {
129             LOGGER.error("Exception :     " + e);
130         }
131     }
132
133     /**
134      * Invoked to create the specified NeutronLoadBalancerHealthMonitor.
135      *
136      * @param loadBalancerHealthMonitor
137      *            An instance of new NeutronLoadBalancerHealthMonitor object.
138      */
139     private void createHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) throws IOException {
140         LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor = new LoadbalancerHealthmonitor();
141         virtualLoadBalancerHealthMonitor = mapLoadBalancerHealthMonitorProperties(loadBalancerHealthMonitor,
142                 virtualLoadBalancerHealthMonitor);
143         boolean loadBalancerHealthMonitorCreated;
144         try {
145             loadBalancerHealthMonitorCreated = apiConnector.create(virtualLoadBalancerHealthMonitor);
146             LOGGER.debug("loadBalancerHealthMonitor:   " + loadBalancerHealthMonitorCreated);
147             if (!loadBalancerHealthMonitorCreated) {
148                 LOGGER.info("loadBalancerHealthMonitor creation failed..");
149             }
150         } catch (Exception Ex) {
151             LOGGER.error("Exception : " + Ex);
152         }
153         LOGGER.info("loadBalancerHealthMonitor:" + loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID()
154                 + "succesfully created.");
155     }
156
157     @Override
158     public int canUpdateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor delta,
159             NeutronLoadBalancerHealthMonitor original) {
160         // TODO Auto-generated method stub
161         return 0;
162     }
163
164     @Override
165     public void neutronLoadBalancerHealthMonitorUpdated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
166         // TODO Auto-generated method stub
167
168     }
169
170     @Override
171     public int canDeleteNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
172         // TODO Auto-generated method stub
173         return 0;
174     }
175
176     @Override
177     public void neutronLoadBalancerHealthMonitorDeleted(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
178         // TODO Auto-generated method stub
179
180     }
181
182     /**
183      * Invoked to map the NeutronLoadBalancerHealthMonitor object properties to the LoadbalancerHealthmonitor
184      * object.
185      *
186      * @param loadBalancerHealthMonitor
187      *            An instance of new NeutronLoadBalancerHealthMonitor object.
188      * @param virtualLoadBalancerHealthMonitor
189      *            An instance of new LoadbalancerHealthmonitor object.
190      * @return {@link LoadbalancerHealthmonitor}
191      */
192     private LoadbalancerHealthmonitor mapLoadBalancerHealthMonitorProperties(
193             NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor,
194             LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor) {
195         String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
196         String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
197         try {
198             if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
199                 loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
200             }
201             if (!(projectUUID.contains("-"))) {
202                 projectUUID = Utils.uuidFormater(projectUUID);
203             }
204             projectUUID = UUID.fromString(projectUUID).toString();
205             loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
206             Project project = (Project) apiConnector.findById(Project.class, projectUUID);
207             virtualLoadBalancerHealthMonitor.setParent(project);
208         } catch (Exception ex) {
209             LOGGER.error("UUID input incorrect", ex);
210         }
211         virtualLoadBalancerHealthMonitor.setDisplayName(loadBalancerHealthMonitorUUID);
212         virtualLoadBalancerHealthMonitor.setName(loadBalancerHealthMonitorUUID);
213         virtualLoadBalancerHealthMonitor.setUuid(loadBalancerHealthMonitorUUID);
214         LoadbalancerHealthmonitorType loadbalancer_healthmonitor_properties = new LoadbalancerHealthmonitorType();
215         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp() != null) {
216             loadbalancer_healthmonitor_properties.setAdminState(loadBalancerHealthMonitor
217                     .getLoadBalancerHealthMonitorAdminStateIsUp());
218         } else {
219             loadbalancer_healthmonitor_properties.setAdminState(true);
220         }
221         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
222             loadbalancer_healthmonitor_properties.setDelay(loadBalancerHealthMonitor
223                     .getLoadBalancerHealthMonitorDelay());
224         }
225         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
226             loadbalancer_healthmonitor_properties.setExpectedCodes(loadBalancerHealthMonitor
227                     .getLoadBalancerHealthMonitorExpectedCodes());
228         }
229         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
230             loadbalancer_healthmonitor_properties.setHttpMethod(loadBalancerHealthMonitor
231                     .getLoadBalancerHealthMonitorHttpMethod());
232         }
233         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
234             loadbalancer_healthmonitor_properties.setMaxRetries(loadBalancerHealthMonitor
235                     .getLoadBalancerHealthMonitorMaxRetries());
236         }
237         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
238             loadbalancer_healthmonitor_properties.setTimeout(loadBalancerHealthMonitor
239                     .getLoadBalancerHealthMonitorTimeout());
240         }
241         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType() != null) {
242             loadbalancer_healthmonitor_properties.setType(loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType());
243         }
244         if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
245             loadbalancer_healthmonitor_properties.setUrlPath(loadBalancerHealthMonitor
246                     .getLoadBalancerHealthMonitorUrlPath());
247         }
248         virtualLoadBalancerHealthMonitor.setProperties(loadbalancer_healthmonitor_properties);
249         return virtualLoadBalancerHealthMonitor;
250     }
251 }