Initial OpenECOMP MSO commit
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / openecomp / mso / apihandlerinfra / NetworkInfoHandler.java
1
2 package org.openecomp.mso.apihandlerinfra;
3
4 /*-
5  * #%L
6  * MSO
7  * %%
8  * Copyright (C) 2016 OPENECOMP - MSO
9  * %%
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *      http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * #L%
22  */
23
24
25 import java.io.StringReader;
26 import java.io.StringWriter;
27 import java.util.LinkedList;
28 import java.util.List;
29
30 import javax.ws.rs.GET;
31 import javax.ws.rs.Path;
32 import javax.ws.rs.PathParam;
33 import javax.ws.rs.QueryParam;
34 import javax.ws.rs.core.Response;
35 import javax.xml.bind.JAXBContext;
36 import javax.xml.bind.JAXBException;
37 import javax.xml.bind.Marshaller;
38 import javax.xml.bind.Unmarshaller;
39 import javax.xml.transform.sax.SAXSource;
40
41 import org.apache.http.HttpStatus;
42 import org.xml.sax.InputSource;
43
44 import org.openecomp.mso.apihandler.common.ValidationException;
45 import org.openecomp.mso.apihandlerinfra.networkbeans.ActionType;
46 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkInputs;
47 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkOutputs;
48 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest;
49 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequests;
50 import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory;
51 import org.openecomp.mso.apihandlerinfra.networkbeans.RequestInfo;
52 import org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType;
53 import org.openecomp.mso.logger.MsoLogger;
54 import org.openecomp.mso.requestsdb.InfraActiveRequests;
55 import org.openecomp.mso.requestsdb.InfraRequests;
56 import org.openecomp.mso.requestsdb.RequestsDatabase;
57 import org.openecomp.mso.utils.UUIDChecker;
58
59 @Path("/{version: v1|v2|v3}/network-request")
60 public class NetworkInfoHandler {
61
62     protected ObjectFactory beansObjectFactory = new ObjectFactory ();
63
64     private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
65
66     @GET
67     public Response queryFilters (@QueryParam("network-type") String networkType,
68                                   @QueryParam("service-type") String serviceType,
69                                   @QueryParam("aic-node-clli") String aicNodeClli,
70                                   @QueryParam("tenant-id") String tenantId,
71                                   @PathParam("version") String version) {
72         MsoLogger.setServiceName ("QueryFilters");
73         // Generate a Request Id
74         UUIDChecker.generateUUID(msoLogger);
75         long startTime = System.currentTimeMillis ();
76
77         msoLogger.debug ("Incoming request received for query filters with Network type " + networkType
78                                          + " - service type "
79                                          + serviceType
80                                          + " - aicNodeClli "
81                                          + aicNodeClli
82                                          + " - tenant id "
83                                          + tenantId);
84         Response response = null;
85         if (networkType != null) {
86             response = this.getRequestList ("vnfType", networkType, version);
87         } else {
88             response = queryGenericFilters (serviceType, aicNodeClli, tenantId, version);
89         }
90         msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
91         msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
92         return response;
93     }
94
95     @GET
96     @Path(Constants.REQUEST_ID_PATH)
97     public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) {
98         // Check INFRA_ACTIVE_REQUESTS table to find info
99         // on this request
100         MsoLogger.setServiceName ("GetRequest");
101         // Generate a Request Id
102         UUIDChecker.generateUUID(msoLogger);
103         msoLogger.debug ("Incoming request received for getRequest with requestId=" + requestId + ", version = " + version);
104         long startTime = System.currentTimeMillis ();
105
106         Response response = getRequestGeneric (requestId, version);
107         msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
108         msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
109         return response;
110     }
111
112     protected MsoLogger getMsoLogger () {
113         return msoLogger;
114     }
115
116     protected void fillNetworkRequest (NetworkRequest qr, InfraRequests ar, String version) {
117         NetworkInputs vi = beansObjectFactory.createNetworkInputs ();
118
119         if (ar.getVnfId () != null) {
120             vi.setNetworkId (ar.getVnfId ());
121         }
122         if (ar.getVnfName () != null) {
123             vi.setNetworkName (ar.getVnfName ());
124         }
125         if (ar.getVnfType () != null) {
126             vi.setNetworkType (ar.getVnfType ());
127         }
128         if (version.equals(Constants.SCHEMA_VERSION_V1)) {
129                 if (ar.getServiceType () != null) {
130                         vi.setServiceType (ar.getServiceType ());
131                 }
132                 if (ar.getAicNodeClli () != null) {
133                         vi.setAicNodeClli (ar.getAicNodeClli ());
134                 }
135         }
136         else if (version.equals(Constants.SCHEMA_VERSION_V2)) {
137                 if (ar.getAaiServiceId () != null) {
138                         vi.setServiceId (ar.getAaiServiceId ());
139                 }
140                 if (ar.getAicCloudRegion () != null) {
141                         vi.setAicCloudRegion (ar.getAicCloudRegion ());
142                 }
143         }
144         else if (version.equals(Constants.SCHEMA_VERSION_V3)) {
145                 if (ar.getAaiServiceId () != null) {
146                         vi.setServiceId (ar.getAaiServiceId ());
147                 }
148                 if (ar.getAicCloudRegion () != null) {
149                         vi.setAicCloudRegion (ar.getAicCloudRegion ());
150                 }
151                 if (ar.getServiceInstanceId () != null) {
152                         vi.setServiceInstanceId (ar.getServiceInstanceId ());
153                 }
154                                 
155         }
156         
157         if (ar.getTenantId () != null) {
158             vi.setTenantId (ar.getTenantId ());
159         }
160         if (ar.getProvStatus () != null) {
161             vi.setProvStatus (ar.getProvStatus ());
162         }
163         qr.setNetworkInputs (vi);
164
165         qr.setNetworkParams (ar.getVnfParams ());
166
167         try {
168             String networkoutputs = ar.getVnfOutputs ();
169             if (networkoutputs != null && networkoutputs.length () > 0) {
170                 msoLogger.debug ("Read NETWORK outputs: " + networkoutputs);
171                 NetworkOutputs networkOutput = null;
172
173                 // Now unmarshal it into network outputs
174                 try {
175                     JAXBContext jaxbContext = JAXBContext.newInstance (NetworkOutputs.class);
176                     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller ();
177
178                     InputSource inputSource = new InputSource (new StringReader (networkoutputs));
179                     SAXSource source = new SAXSource (inputSource);
180
181                     networkOutput = jaxbUnmarshaller.unmarshal (source, NetworkOutputs.class).getValue ();
182
183                 } catch (Exception e) {
184                     msoLogger.debug ("Validation failed", e);
185                     throw new ValidationException ("format for network outputs");
186                 }
187
188                 qr.setNetworkOutputs (networkOutput);
189             }
190         } catch (Exception e) {
191             msoLogger.debug ("exception reading networkOutputs Clob", e);
192         }
193     }
194
195     protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String version) {
196         if (serviceType != null) {
197             return this.getRequestList ("serviceType", serviceType, version);
198         }
199         if (aicNodeClli != null) {
200             return this.getRequestList ("aicNodeClli", aicNodeClli, version);
201         }
202         if (tenantId != null) {
203             return this.getRequestList ("tenantId", tenantId, version);
204         }
205         return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build ();
206     }
207
208     protected Response getRequestGeneric (String requestId, String version) {
209         // Check INFRA_ACTIVE_REQUESTS table to find info
210         // on this request
211         MsoLogger.setLogContext (requestId, null);
212         getMsoLogger ().debug ("getRequest: " + requestId);
213
214         String responseString = null;
215
216         InfraActiveRequests activeReq = RequestsDatabase.getRequestFromInfraActive (requestId, "NETWORK");
217         if (activeReq != null) {
218             // build response for active
219             responseString = infraRequestsResponse (activeReq, version);
220             return Response.status (HttpStatus.SC_OK).entity (responseString).build ();
221         } else {
222             // Report that no request has been found
223             return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build ();
224         }
225     }
226
227     protected Response getRequestList (String queryAttribute, String queryValue, String version) {
228         // Check INFRA_ACTIVE_REQUESTS table to find info
229         // on this request
230
231         getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue);
232
233         List <InfraActiveRequests> activeReqList = RequestsDatabase.getRequestListFromInfraActive (queryAttribute,
234                                                                                                    queryValue,
235                                                                                                    "NETWORK");
236
237         List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> ();
238
239         if (activeReqList != null) {
240             // build response for active
241             queryResponseList = infraRequestsResponses (activeReqList, version);
242
243         }
244
245         if (queryResponseList != null && !queryResponseList.isEmpty ()) {
246             String result = this.translateNetworkRequests (queryResponseList);
247             return Response.status (HttpStatus.SC_OK).entity (result).build ();
248
249         } else {
250             // Report that no request has been found
251             return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build ();
252         }
253     }
254
255     private NetworkRequest fillGeneric (InfraRequests ar) {
256         NetworkRequest qr = beansObjectFactory.createNetworkRequest ();
257         RequestInfo ri = beansObjectFactory.createRequestInfo ();
258         ri.setRequestId (ar.getRequestId ());
259         ri.setAction (ActionType.fromValue (ar.getAction ()));
260         ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ()));
261         if (ar.getProgress () != null) {
262             ri.setProgress (ar.getProgress ().intValue ());
263         }
264         if (ar.getSource () != null) {
265             ri.setSource (ar.getSource ());
266         }
267
268         ri.setStartTime (ar.getStartTime ().toString ());
269         if (ar.getEndTime () != null) {
270             ri.setEndTime (ar.getEndTime ().toString ());
271         }
272
273         if (ar.getStatusMessage () != null) {
274             ri.setStatusMessage (ar.getStatusMessage ());
275         }
276         qr.setRequestInfo (ri);
277         return qr;
278     }
279
280     private List <NetworkRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) {
281         List <NetworkRequest> queryResponseList = new LinkedList <NetworkRequest> ();
282
283         for (InfraRequests ar : arList) {
284             NetworkRequest qr = fillGeneric (ar);
285             fillNetworkRequest (qr, ar, version);
286             queryResponseList.add (qr);
287         }
288         return queryResponseList;
289     }
290
291     private String translateNetworkRequests (List <NetworkRequest> queryResponseList) {
292         NetworkRequests queryResponses = new NetworkRequests ();
293         for (int i = 0; i < queryResponseList.size (); i++) {
294             queryResponses.getNetworkRequest ().add (queryResponseList.get (i));
295         }
296
297         StringWriter stringWriter = new StringWriter ();
298         try {
299             JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequests.class);
300             Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
301
302             // output pretty printed
303             jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
304
305             jaxbMarshaller.marshal (queryResponses, stringWriter);
306
307         } catch (JAXBException e) {
308             getMsoLogger ().debug ("Marshalling issue", e);
309         }
310
311         return stringWriter.toString ();
312     }
313
314     private String infraRequestsResponse (InfraRequests ar, String version) {
315         NetworkRequest qr = fillGeneric (ar);
316         fillNetworkRequest (qr, ar, version);
317
318         StringWriter stringWriter = new StringWriter ();
319         try {
320             JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class);
321             Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
322
323             jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
324             jaxbMarshaller.marshal (qr, stringWriter);
325
326         } catch (JAXBException e) {
327             getMsoLogger ().debug ("Marshalling issue", e);
328         }
329
330         String response = stringWriter.toString ();
331         return response;
332     }
333 }