2 package org.openecomp.mso.apihandlerinfra;
8 * Copyright (C) 2016 OPENECOMP - MSO
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
14 * http://www.apache.org/licenses/LICENSE-2.0
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.
25 import java.io.StringReader;
26 import java.io.StringWriter;
27 import java.util.LinkedList;
28 import java.util.List;
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;
41 import org.apache.http.HttpStatus;
42 import org.openecomp.mso.apihandler.common.ValidationException;
43 import org.openecomp.mso.apihandlerinfra.networkbeans.ActionType;
44 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkInputs;
45 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkOutputs;
46 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequest;
47 import org.openecomp.mso.apihandlerinfra.networkbeans.NetworkRequests;
48 import org.openecomp.mso.apihandlerinfra.networkbeans.ObjectFactory;
49 import org.openecomp.mso.apihandlerinfra.networkbeans.RequestInfo;
50 import org.openecomp.mso.apihandlerinfra.networkbeans.RequestStatusType;
51 import org.openecomp.mso.logger.MsoLogger;
52 import org.openecomp.mso.requestsdb.InfraActiveRequests;
53 import org.openecomp.mso.requestsdb.InfraRequests;
54 import org.openecomp.mso.requestsdb.RequestsDatabase;
55 import org.openecomp.mso.utils.UUIDChecker;
56 import org.xml.sax.InputSource;
58 import com.wordnik.swagger.annotations.Api;
59 import com.wordnik.swagger.annotations.ApiOperation;
61 @Path("/{version: v1|v2|v3}/network-request")
62 @Api(value="/{version: v1|v2|v3}/network-request",description="API Requests for network requests")
63 public class NetworkInfoHandler {
65 protected ObjectFactory beansObjectFactory = new ObjectFactory ();
67 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
70 @ApiOperation(value="Finds Network Requests",response=Response.class)
71 public Response queryFilters (@QueryParam("network-type") String networkType,
72 @QueryParam("service-type") String serviceType,
73 @QueryParam("aic-node-clli") String aicNodeClli,
74 @QueryParam("tenant-id") String tenantId,
75 @PathParam("version") String version) {
76 MsoLogger.setServiceName ("QueryFilters");
77 // Generate a Request Id
78 UUIDChecker.generateUUID(msoLogger);
79 long startTime = System.currentTimeMillis ();
81 msoLogger.debug ("Incoming request received for query filters with Network type " + networkType
89 if (networkType != null) {
90 response = this.getRequestList ("vnfType", networkType, version);
92 response = queryGenericFilters (serviceType, aicNodeClli, tenantId, version);
94 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
95 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
100 @Path(Constants.REQUEST_ID_PATH)
101 @ApiOperation(value="Add a Network Outputs from requestId and version",response=Response.class)
102 public Response getRequest (@PathParam("request-id") String requestId, @PathParam("version") String version) {
103 // Check INFRA_ACTIVE_REQUESTS table to find info
105 MsoLogger.setServiceName ("GetRequest");
106 // Generate a Request Id
107 UUIDChecker.generateUUID(msoLogger);
108 msoLogger.debug ("Incoming request received for getRequest with requestId=" + requestId + ", version = " + version);
109 long startTime = System.currentTimeMillis ();
111 Response response = getRequestGeneric (requestId, version);
112 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
113 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
117 protected MsoLogger getMsoLogger () {
121 protected void fillNetworkRequest (NetworkRequest qr, InfraRequests ar, String version) {
122 NetworkInputs vi = beansObjectFactory.createNetworkInputs ();
124 if (ar.getVnfId () != null) {
125 vi.setNetworkId (ar.getVnfId ());
127 if (ar.getVnfName () != null) {
128 vi.setNetworkName (ar.getVnfName ());
130 if (ar.getVnfType () != null) {
131 vi.setNetworkType (ar.getVnfType ());
133 if (version.equals(Constants.SCHEMA_VERSION_V1)) {
134 if (ar.getServiceType () != null) {
135 vi.setServiceType (ar.getServiceType ());
137 if (ar.getAicNodeClli () != null) {
138 vi.setAicNodeClli (ar.getAicNodeClli ());
141 else if (version.equals(Constants.SCHEMA_VERSION_V2)) {
142 if (ar.getAaiServiceId () != null) {
143 vi.setServiceId (ar.getAaiServiceId ());
145 if (ar.getAicCloudRegion () != null) {
146 vi.setAicCloudRegion (ar.getAicCloudRegion ());
149 else if (version.equals(Constants.SCHEMA_VERSION_V3)) {
150 if (ar.getAaiServiceId () != null) {
151 vi.setServiceId (ar.getAaiServiceId ());
153 if (ar.getAicCloudRegion () != null) {
154 vi.setAicCloudRegion (ar.getAicCloudRegion ());
156 if (ar.getServiceInstanceId () != null) {
157 vi.setServiceInstanceId (ar.getServiceInstanceId ());
162 if (ar.getTenantId () != null) {
163 vi.setTenantId (ar.getTenantId ());
165 if (ar.getProvStatus () != null) {
166 vi.setProvStatus (ar.getProvStatus ());
168 qr.setNetworkInputs (vi);
170 qr.setNetworkParams (ar.getVnfParams ());
173 String networkoutputs = ar.getVnfOutputs ();
174 if (networkoutputs != null && networkoutputs.length () > 0) {
175 msoLogger.debug ("Read NETWORK outputs: " + networkoutputs);
176 NetworkOutputs networkOutput = null;
178 // Now unmarshal it into network outputs
180 JAXBContext jaxbContext = JAXBContext.newInstance (NetworkOutputs.class);
181 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller ();
183 InputSource inputSource = new InputSource (new StringReader (networkoutputs));
184 SAXSource source = new SAXSource (inputSource);
186 networkOutput = jaxbUnmarshaller.unmarshal (source, NetworkOutputs.class).getValue ();
188 } catch (Exception e) {
189 msoLogger.debug ("Validation failed", e);
190 throw new ValidationException ("format for network outputs");
193 qr.setNetworkOutputs (networkOutput);
195 } catch (Exception e) {
196 msoLogger.debug ("exception reading networkOutputs Clob", e);
200 protected Response queryGenericFilters (String serviceType, String aicNodeClli, String tenantId, String version) {
201 if (serviceType != null) {
202 return this.getRequestList ("serviceType", serviceType, version);
204 if (aicNodeClli != null) {
205 return this.getRequestList ("aicNodeClli", aicNodeClli, version);
207 if (tenantId != null) {
208 return this.getRequestList ("tenantId", tenantId, version);
210 return Response.status (HttpStatus.SC_BAD_REQUEST).entity ("").build ();
213 protected Response getRequestGeneric (String requestId, String version) {
214 // Check INFRA_ACTIVE_REQUESTS table to find info
216 MsoLogger.setLogContext (requestId, null);
217 getMsoLogger ().debug ("getRequest: " + requestId);
219 String responseString;
221 InfraActiveRequests activeReq = (RequestsDatabase.getInstance()).getRequestFromInfraActive (requestId, "NETWORK");
222 if (activeReq != null) {
223 // build response for active
224 responseString = infraRequestsResponse (activeReq, version);
225 return Response.status (HttpStatus.SC_OK).entity (responseString).build ();
227 // Report that no request has been found
228 return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build ();
232 protected Response getRequestList (String queryAttribute, String queryValue, String version) {
233 // Check INFRA_ACTIVE_REQUESTS table to find info
236 getMsoLogger ().debug ("getRequest based on " + queryAttribute + ": " + queryValue);
238 List <InfraActiveRequests> activeReqList = (RequestsDatabase.getInstance()).getRequestListFromInfraActive (queryAttribute,
242 List <NetworkRequest> queryResponseList = new LinkedList <> ();
244 if (activeReqList != null) {
245 // build response for active
246 queryResponseList = infraRequestsResponses (activeReqList, version);
250 if (queryResponseList != null && !queryResponseList.isEmpty ()) {
251 String result = this.translateNetworkRequests (queryResponseList);
252 return Response.status (HttpStatus.SC_OK).entity (result).build ();
255 // Report that no request has been found
256 return Response.status (HttpStatus.SC_NOT_FOUND).entity ("").build ();
260 private NetworkRequest fillGeneric (InfraRequests ar) {
261 NetworkRequest qr = beansObjectFactory.createNetworkRequest ();
262 RequestInfo ri = beansObjectFactory.createRequestInfo ();
263 ri.setRequestId (ar.getRequestId ());
264 ri.setAction (ActionType.fromValue (ar.getAction ()));
265 ri.setRequestStatus (RequestStatusType.fromValue (ar.getRequestStatus ()));
266 if (ar.getProgress () != null) {
267 ri.setProgress (ar.getProgress ().intValue ());
269 if (ar.getSource () != null) {
270 ri.setSource (ar.getSource ());
273 ri.setStartTime (ar.getStartTime ().toString ());
274 if (ar.getEndTime () != null) {
275 ri.setEndTime (ar.getEndTime ().toString ());
278 if (ar.getStatusMessage () != null) {
279 ri.setStatusMessage (ar.getStatusMessage ());
281 qr.setRequestInfo (ri);
285 private List <NetworkRequest> infraRequestsResponses (List <? extends InfraRequests> arList, String version) {
286 List <NetworkRequest> queryResponseList = new LinkedList <> ();
288 for (InfraRequests ar : arList) {
289 NetworkRequest qr = fillGeneric (ar);
290 fillNetworkRequest (qr, ar, version);
291 queryResponseList.add (qr);
293 return queryResponseList;
296 private String translateNetworkRequests (List <NetworkRequest> queryResponseList) {
297 NetworkRequests queryResponses = new NetworkRequests ();
298 for (int i = 0; i < queryResponseList.size (); i++) {
299 queryResponses.getNetworkRequest ().add (queryResponseList.get (i));
302 StringWriter stringWriter = new StringWriter ();
304 JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequests.class);
305 Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
307 // output pretty printed
308 jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
310 jaxbMarshaller.marshal (queryResponses, stringWriter);
312 } catch (JAXBException e) {
313 getMsoLogger ().debug ("Marshalling issue", e);
316 return stringWriter.toString ();
319 private String infraRequestsResponse (InfraRequests ar, String version) {
320 NetworkRequest qr = fillGeneric (ar);
321 fillNetworkRequest (qr, ar, version);
323 StringWriter stringWriter = new StringWriter ();
325 JAXBContext jaxbContext = JAXBContext.newInstance (NetworkRequest.class);
326 Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
328 jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
329 jaxbMarshaller.marshal (qr, stringWriter);
331 } catch (JAXBException e) {
332 getMsoLogger ().debug ("Marshalling issue", e);
335 String response = stringWriter.toString ();