2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.mso.apihandlerinfra;
23 import java.io.StringReader;
24 import java.io.StringWriter;
25 import java.io.IOException;
26 import java.sql.Timestamp;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
31 import java.util.Map.Entry;
32 import java.util.StringTokenizer;
34 import javax.ws.rs.core.MultivaluedMap;
35 import javax.ws.rs.core.Response;
36 import javax.xml.bind.JAXBContext;
37 import javax.xml.bind.JAXBException;
38 import javax.xml.bind.Marshaller;
39 import javax.xml.transform.OutputKeys;
40 import javax.xml.transform.Transformer;
41 import javax.xml.transform.TransformerFactory;
42 import javax.xml.transform.dom.DOMSource;
43 import javax.xml.transform.stream.StreamResult;
45 import org.codehaus.jackson.JsonGenerationException;
46 import org.codehaus.jackson.map.JsonMappingException;
47 import org.codehaus.jackson.map.ObjectMapper;
48 import org.codehaus.jackson.map.annotate.JsonSerialize;
49 import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
50 import org.hibernate.Session;
51 import org.w3c.dom.Document;
52 import org.w3c.dom.Element;
53 import org.w3c.dom.Node;
54 import org.w3c.dom.NodeList;
56 import org.openecomp.mso.apihandler.common.ValidationException;
57 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.CloudConfiguration;
58 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ModelInfo;
59 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.PolicyException;
60 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstance;
61 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RelatedInstanceList;
62 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestError;
63 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestInfo;
64 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestParameters;
65 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceException;
66 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest;
67 import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType;
68 import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs;
69 import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest;
70 import org.openecomp.mso.db.HibernateUtils;
71 import org.openecomp.mso.logger.MessageEnum;
72 import org.openecomp.mso.logger.MsoLogger;
73 import org.openecomp.mso.requestsdb.HibernateUtilsRequestsDb;
74 import org.openecomp.mso.requestsdb.InfraActiveRequests;
75 import org.openecomp.mso.requestsdb.RequestsDatabase;
76 import org.openecomp.mso.utils.UUIDChecker;
78 public class MsoRequest {
80 private String requestId;
81 private String requestXML;
82 private String requestJSON;
83 private String requestUri;
84 private VnfRequest vnfReq;
85 private RequestInfo requestInfo;
86 private ModelInfo modelInfo;
87 private CloudConfiguration cloudConfiguration ;
88 private VnfInputs vnfInputs;
89 private String vnfParams;
90 private Action action;
91 private String errorMessage;
92 private String errorCode;
93 private String httpResponse;
94 private String responseBody;
95 private RequestStatusType status;
96 private ServiceInstancesRequest sir;
97 private long startTime;
98 private long progress = Constants.PROGRESS_REQUEST_RECEIVED;
99 private String serviceInstanceType;
100 private String vnfType;
101 private String vfModuleType;
102 private String vfModuleModelName;
103 private String networkType;
104 private String asdcServiceModelVersion;
105 private String requestScope;
106 private int reqVersion;
107 private boolean aLaCarteFlag = false;
109 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
110 private static final String NOT_PROVIDED = "not provided";
112 protected HibernateUtils hibernateUtils = new HibernateUtilsRequestsDb ();
114 MsoRequest (String requestId) {
115 this.requestId = requestId;
116 this.startTime = System.currentTimeMillis();
117 MsoLogger.setLogContext (requestId, null);
123 this.startTime = System.currentTimeMillis();
124 MsoLogger.setLogContext (requestId, null);
129 public Response buildServiceErrorResponse (int httpResponseCode,
130 MsoException exceptionType,
133 List<String> variables) {
135 this.errorCode = messageId;
138 this.errorMessage = text;
141 this.errorMessage = "";
143 this.httpResponse = Integer.toString(httpResponseCode);
144 if(errorMessage.length() > 1999){
145 errorMessage = errorMessage.substring(0, 1999);
148 RequestError re = new RequestError();
150 if(exceptionType.name().equals("PolicyException")){
152 PolicyException pe = new PolicyException();
153 pe.setMessageId(messageId);
155 if(variables != null){
156 for(String variable: variables){
157 pe.getVariables().add(variable);
160 re.setPolicyException(pe);
164 ServiceException se = new ServiceException();
165 se.setMessageId(messageId);
167 if(variables != null){
168 if(variables != null){
169 for(String variable: variables){
170 se.getVariables().add(variable);
174 re.setServiceException(se);
177 String requestErrorStr = null;
180 ObjectMapper mapper = new ObjectMapper();
181 mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
182 requestErrorStr = mapper.writeValueAsString(re);
184 msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in buildServiceErrorResponse writing exceptionType to string ", e);
188 return Response.status (httpResponseCode).entity(requestErrorStr).build ();
192 private int reqVersionToInt(String version){
194 return Integer.parseInt(version.substring(1));
200 // Parse request JSON
201 void parse (ServiceInstancesRequest sir, HashMap<String,String> instanceIdMap, Action action, String version) throws ValidationException {
203 msoLogger.debug ("Validating the Service Instance request");
206 this.action = action;
207 this.reqVersion = reqVersionToInt(version);
208 msoLogger.debug ("Incoming version is: " + version + " coverting to int: " + this.reqVersion);
212 ObjectMapper mapper = new ObjectMapper();
213 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
214 requestJSON = mapper.writeValueAsString(sir.getRequestDetails());
216 } catch(Exception e){
217 throw new ValidationException ("Parse ServiceInstanceRequest to JSON string");
220 if(instanceIdMap != null){
221 if(instanceIdMap.get("serviceInstanceId") != null){
222 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("serviceInstanceId"))) {
223 throw new ValidationException ("serviceInstanceId");
225 this.sir.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
228 if(instanceIdMap.get("vnfInstanceId") != null){
229 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vnfInstanceId"))) {
230 throw new ValidationException ("vnfInstanceId");
232 this.sir.setVnfInstanceId(instanceIdMap.get("vnfInstanceId"));
235 if(instanceIdMap.get("vfModuleInstanceId") != null){
236 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vfModuleInstanceId"))) {
237 throw new ValidationException ("vfModuleInstanceId");
239 this.sir.setVfModuleInstanceId(instanceIdMap.get("vfModuleInstanceId"));
242 if(instanceIdMap.get("volumeGroupInstanceId") != null){
243 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("volumeGroupInstanceId"))) {
244 throw new ValidationException ("volumeGroupInstanceId");
246 this.sir.setVolumeGroupInstanceId(instanceIdMap.get("volumeGroupInstanceId"));
249 if(instanceIdMap.get("networkInstanceId") != null){
250 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("networkInstanceId"))) {
251 throw new ValidationException ("networkInstanceId");
253 this.sir.setNetworkInstanceId(instanceIdMap.get("networkInstanceId"));
257 RequestParameters requestParameters = sir.getRequestDetails().getRequestParameters();
258 if(this.reqVersion >= 3){
259 if(requestParameters!=null){
260 this.aLaCarteFlag = sir.getRequestDetails().getRequestParameters().getALaCarte();
262 this.aLaCarteFlag = false;
265 this.aLaCarteFlag = true;
268 if(requestParameters != null && (reqVersion < 3) && requestParameters.getAutoBuildVfModules()){
269 throw new ValidationException("AutoBuildVfModule", version);
272 this.modelInfo = sir.getRequestDetails().getModelInfo();
274 if (this.modelInfo == null) {
275 throw new ValidationException ("model-info");
278 this.requestInfo = sir.getRequestDetails().getRequestInfo();
280 if (this.requestInfo == null) {
281 throw new ValidationException ("requestInfo");
284 if (modelInfo.getModelType () == null) {
285 throw new ValidationException ("modelType");
288 this.requestScope = modelInfo.getModelType().name();
290 //is required for serviceInstance delete macro when aLaCarte=false (v3)
291 //create and updates except for network
292 if (empty (modelInfo.getModelInvariantId ()) && ((this.reqVersion >2 && !this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.deleteInstance) ||
293 !(requestScope.equalsIgnoreCase (ModelType.network.name ())) && (action == Action.createInstance || action == Action.updateInstance))) {
294 throw new ValidationException ("modelInvariantId");
297 if (!empty (modelInfo.getModelInvariantId ()) && !UUIDChecker.isValidUUID (modelInfo.getModelInvariantId ())) {
298 throw new ValidationException ("modelInvariantId format");
301 if (this.reqVersion <= 2 && empty (modelInfo.getModelName ()) && (action == Action.createInstance || action == Action.updateInstance || (action == Action.deleteInstance &&
302 (requestScope.equalsIgnoreCase (ModelType.network.name ()) || requestScope.equalsIgnoreCase (ModelType.vfModule.name ()))))) {
303 throw new ValidationException ("modelName");
305 if(this.reqVersion > 2 && empty (modelInfo.getModelName ()) && (action == Action.createInstance || action == Action.updateInstance || (action == Action.deleteInstance &&
306 (requestScope.equalsIgnoreCase (ModelType.vfModule.name ()))))){
307 throw new ValidationException ("modelName");
310 if (empty (modelInfo.getModelVersion ()) && ((this.reqVersion >2 && !this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.deleteInstance) ||
311 !(requestScope.equalsIgnoreCase (ModelType.network.name ())) && (action == Action.createInstance || action == Action.updateInstance))) {
312 throw new ValidationException ("modelVersion");
315 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action != Action.deleteInstance && empty (modelInfo.getModelCustomizationName ())) {
316 if(this.reqVersion<=2){
317 throw new ValidationException ("modelCustomizationName");
318 } else if (!UUIDChecker.isValidUUID (modelInfo.getModelCustomizationId())) {
319 throw new ValidationException ("modelCustomizationId or modelCustomizationName");
323 if(this.reqVersion > 2 && (!UUIDChecker.isValidUUID (modelInfo.getModelCustomizationId())) && requestScope.equalsIgnoreCase (ModelType.network.name ())
324 && (action == Action.updateInstance || action == Action.createInstance)){
325 throw new ValidationException ("modelCustomizationId");
328 if(!empty(modelInfo.getModelNameVersionId())){
329 modelInfo.setModelVersionId(modelInfo.getModelNameVersionId());
331 if(!empty(modelInfo.getModelVersionId())){
332 modelInfo.setModelNameVersionId(modelInfo.getModelVersionId());
335 this.cloudConfiguration = sir.getRequestDetails ().getCloudConfiguration ();
336 if ( (((!this.aLaCarteFlag && requestScope.equalsIgnoreCase (ModelType.service.name ())) ||
337 (!requestScope.equalsIgnoreCase (ModelType.service.name ())) && action != Action.updateInstance))
338 && cloudConfiguration == null) {
339 throw new ValidationException ("cloudConfiguration");
342 if (cloudConfiguration != null) {
343 if (empty (cloudConfiguration.getLcpCloudRegionId ())) {
344 throw new ValidationException ("lcpCloudRegionId");
346 if (empty (cloudConfiguration.getTenantId ())) {
347 throw new ValidationException ("tenantId");
353 if (requestScope.equalsIgnoreCase (ModelType.service.name ()) && action == Action.createInstance) {
354 if (requestParameters == null) {
355 throw new ValidationException ("requestParameters");
357 if (empty (requestParameters.getSubscriptionServiceType ())) {
358 throw new ValidationException ("subscriptionServiceType");
362 if(requestScope.equalsIgnoreCase(ModelType.service.name())){
363 this.serviceInstanceType = modelInfo.getModelName();
366 if(requestScope.equalsIgnoreCase(ModelType.network.name())){
367 this.networkType = modelInfo.getModelName();
370 // Verify instanceName existence and format except for macro serviceInstance
371 if (this.reqVersion < 3 && requestScope.equalsIgnoreCase (ModelType.service.name ()) && empty (requestInfo.getInstanceName ()) && action == Action.createInstance) {
372 throw new ValidationException ("instanceName");
375 if (!empty (requestInfo.getInstanceName ())) {
376 if (!requestInfo.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) {
377 throw new ValidationException ("instanceName format");
381 if (empty (requestInfo.getProductFamilyId ()) && ((requestScope.equalsIgnoreCase (ModelType.vnf.name ()) && action == Action.createInstance) ||
382 (requestScope.equalsIgnoreCase (ModelType.network.name ()) && (action == Action.createInstance || action == Action.updateInstance)))) {
383 throw new ValidationException ("productFamilyId");
386 if (empty (requestInfo.getSource ())) {
387 throw new ValidationException ("source");
391 RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
393 String serviceModelName = null;
394 String vnfModelName = null;
395 String asdcServiceModelVersion = null;
396 String volumeGroupId = null;
397 boolean isRelatedServiceInstancePresent = false;
398 boolean isRelatedVnfInstancePresent = false;
400 if (instanceList != null) {
401 for(RelatedInstanceList relatedInstanceList : instanceList){
402 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
404 if (relatedInstance.getModelInfo () == null) {
405 throw new ValidationException ("modelInfo in relatedInstance");
408 if (relatedInstance.getModelInfo ().getModelType () == null) {
409 throw new ValidationException ("modelType in relatedInstance");
413 if (!empty (relatedInstance.getInstanceName ())) {
414 if (!relatedInstance.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) {
415 throw new ValidationException ("instanceName format in relatedInstance");
419 if (empty (relatedInstance.getInstanceId ())) {
420 throw new ValidationException ("instanceId in relatedInstance");
423 if (!UUIDChecker.isValidUUID (relatedInstance.getInstanceId ())) {
424 throw new ValidationException ("instanceId format in relatedInstance");
428 if (action != Action.deleteInstance) {
430 // ModelInvariantId is not required in volumeGroup relatedInstance
431 if(!(relatedInstance.getModelInfo ().getModelType ().equals(ModelType.volumeGroup)) &&
432 empty (relatedInstance.getModelInfo ().getModelInvariantId ())) {
433 throw new ValidationException ("modelInvariantId in relatedInstance");
436 if (!empty (relatedInstance.getModelInfo ().getModelInvariantId ()) &&
437 !UUIDChecker.isValidUUID (relatedInstance.getModelInfo ().getModelInvariantId ())) {
438 throw new ValidationException ("modelInvariantId format in relatedInstance");
441 if (empty(relatedInstance.getModelInfo ().getModelName ()) &&
442 !(relatedInstance.getModelInfo ().getModelType ().equals (ModelType.volumeGroup))) {
443 throw new ValidationException ("modelName in relatedInstance");
446 if (empty (relatedInstance.getModelInfo ().getModelVersion ()) &&
447 !(relatedInstance.getModelInfo ().getModelType ().equals (ModelType.volumeGroup))) {
448 throw new ValidationException ("modelVersion in relatedInstance");
452 if (empty (relatedInstance.getModelInfo ().getModelCustomizationName ()) &&
453 relatedInstance.getModelInfo ().getModelType ().equals (ModelType.vnf)) {
454 throw new ValidationException ("modelCustomizationName in relatedInstance");
457 if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)) {
458 isRelatedServiceInstancePresent = true;
459 if (!relatedInstance.getInstanceId ().equals (this.sir.getServiceInstanceId ())) {
460 throw new ValidationException ("serviceInstanceId matching the serviceInstanceId in request URI");
462 serviceModelName = relatedInstance.getModelInfo ().getModelName ();
463 asdcServiceModelVersion = relatedInstance.getModelInfo().getModelVersion ();
465 else if(relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)) {
466 isRelatedVnfInstancePresent = true;
467 if (!relatedInstance.getInstanceId ().equals (this.sir.getVnfInstanceId ())) {
468 throw new ValidationException ("vnfInstanceId matching the vnfInstanceId in request URI");
470 vnfModelName = relatedInstance.getModelInfo().getModelCustomizationName();
472 else if(relatedInstance.getModelInfo().getModelType().equals(ModelType.volumeGroup)) {
473 volumeGroupId = relatedInstance.getInstanceId ();
478 if(requestScope.equalsIgnoreCase (ModelType.volumeGroup.name ())) {
479 if (!isRelatedServiceInstancePresent) {
480 throw new ValidationException ("related service instance for volumeGroup request");
482 if (!isRelatedVnfInstancePresent) {
483 throw new ValidationException ("related vnf instance for volumeGroup request");
485 this.serviceInstanceType = serviceModelName;
486 this.vnfType = serviceModelName + "/" + vnfModelName;
487 this.asdcServiceModelVersion = asdcServiceModelVersion;
489 else if(requestScope.equalsIgnoreCase(ModelType.vfModule.name ())) {
490 if (!isRelatedServiceInstancePresent) {
491 throw new ValidationException ("related service instance for vfModule request");
493 if (!isRelatedVnfInstancePresent) {
494 throw new ValidationException ("related vnf instance for vfModule request");
496 String vfModuleModelName = modelInfo.getModelName ();
497 this.vfModuleModelName = vfModuleModelName;
498 this.serviceInstanceType = serviceModelName;
499 this.vnfType = serviceModelName + "/" + vnfModelName;
500 this.asdcServiceModelVersion = asdcServiceModelVersion;
501 this.vfModuleType = vnfType + "::" + vfModuleModelName;
502 this.sir.setVolumeGroupInstanceId (volumeGroupId);
504 else if (requestScope.equalsIgnoreCase (ModelType.vnf.name ())) {
505 if (!isRelatedServiceInstancePresent) {
506 throw new ValidationException ("related service instance for vnf request");
508 this.vnfType = serviceModelName + "/" + sir.getRequestDetails().getModelInfo().getModelCustomizationName();
511 else if ((( requestScope.equalsIgnoreCase(ModelType.vnf.name ()) || requestScope.equalsIgnoreCase(ModelType.volumeGroup.name ()) || requestScope.equalsIgnoreCase(ModelType.vfModule.name ()) ) && (action == Action.createInstance)) ||
512 (this.reqVersion > 2 && (requestScope.equalsIgnoreCase(ModelType.volumeGroup.name ()) || requestScope.equalsIgnoreCase(ModelType.vfModule.name ())) && action == Action.updateInstance)){
513 msoLogger.debug ("related instance exception");
514 throw new ValidationException ("related instances");
519 void parseOrchestration (ServiceInstancesRequest sir) throws ValidationException {
521 msoLogger.debug ("Validating the Orchestration request");
526 ObjectMapper mapper = new ObjectMapper();
527 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
528 requestJSON = mapper.writeValueAsString(sir.getRequestDetails());
530 } catch(Exception e){
531 throw new ValidationException ("Parse ServiceInstanceRequest to JSON string", e);
534 this.requestInfo = sir.getRequestDetails().getRequestInfo();
536 if (this.requestInfo == null) {
537 throw new ValidationException ("requestInfo");
540 if (empty (requestInfo.getSource ())) {
541 throw new ValidationException ("source");
543 if (empty (requestInfo.getRequestorId ())) {
544 throw new ValidationException ("requestorId");
548 public Map<String, List<String>> getOrchestrationFilters (MultivaluedMap<String, String> queryParams) throws ValidationException {
550 String queryParam = null;
551 Map<String, List<String>> orchestrationFilterParams = new HashMap<String, List<String>>();
554 for (Entry<String,List<String>> entry : queryParams.entrySet()) {
555 queryParam = entry.getKey();
558 if(queryParam.equalsIgnoreCase("filter")){
560 StringTokenizer st = new StringTokenizer(entry.getValue().get(0), ":");
564 List<String> orchestrationList = new ArrayList<String>();
565 while (st.hasMoreElements()) {
567 mapKey = st.nextElement() + "";
569 orchestrationList.add(st.nextElement() + "");
573 orchestrationFilterParams.put(mapKey, orchestrationList);
577 //msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, e);
578 throw new ValidationException ("QueryParam ServiceInfo", e);
585 return orchestrationFilterParams;
588 public void createRequestRecord (Status status, Action action) {
590 Session session = null;
593 session = hibernateUtils.getSessionFactory ().openSession ();
594 session.beginTransaction ();
597 sir = new ServiceInstancesRequest ();
600 InfraActiveRequests aq = new InfraActiveRequests ();
601 aq.setRequestId (requestId);
603 aq.setRequestAction(action.name());
604 aq.setAction(action.name());
606 Timestamp startTimeStamp = new Timestamp (System.currentTimeMillis());
608 aq.setStartTime (startTimeStamp);
610 if (requestInfo != null) {
612 if(requestInfo.getSource() != null){
613 aq.setSource(requestInfo.getSource());
615 if(requestInfo.getCallbackUrl() != null){
616 aq.setCallBackUrl(requestInfo.getCallbackUrl());
618 if(requestInfo.getCorrelator() != null){
619 aq.setCorrelator(requestInfo.getCorrelator());
622 if(requestInfo.getRequestorId() != null) {
623 aq.setRequestorId(requestInfo.getRequestorId());
627 if (modelInfo != null) {
628 aq.setRequestScope(requestScope);
631 if (cloudConfiguration != null) {
632 if(cloudConfiguration.getLcpCloudRegionId() != null) {
633 aq.setAicCloudRegion(cloudConfiguration.getLcpCloudRegionId());
636 if(cloudConfiguration.getTenantId() != null) {
637 aq.setTenantId(cloudConfiguration.getTenantId());
642 if(sir.getServiceInstanceId() != null){
643 aq.setServiceInstanceId(sir.getServiceInstanceId());
646 if(sir.getVnfInstanceId() != null){
647 aq.setVnfId(sir.getVnfInstanceId());
651 if(ModelType.service.name().equalsIgnoreCase(requestScope)){
652 if(requestInfo.getInstanceName() != null){
653 aq.setServiceInstanceName(requestInfo.getInstanceName());
657 if(ModelType.network.name().equalsIgnoreCase(requestScope)){
658 aq.setNetworkName(requestInfo.getInstanceName());
659 aq.setNetworkType(networkType);
660 aq.setNetworkId(sir.getNetworkInstanceId());
663 if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)){
664 aq.setVolumeGroupId(sir.getVolumeGroupInstanceId());
665 aq.setVolumeGroupName(requestInfo.getInstanceName());
666 aq.setVnfType(vnfType);
670 if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)){
671 aq.setVfModuleName(requestInfo.getInstanceName());
672 aq.setVfModuleModelName(modelInfo.getModelName());
673 aq.setVfModuleId(sir.getVfModuleInstanceId());
674 aq.setVolumeGroupId(sir.getVolumeGroupInstanceId());
675 aq.setVnfType(vnfType);
679 if(ModelType.vnf.name().equalsIgnoreCase(requestScope)){
680 aq.setVnfName(requestInfo.getInstanceName());
681 if (null != sir.getRequestDetails()) {
682 RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
684 if (instanceList != null) {
686 for(RelatedInstanceList relatedInstanceList : instanceList){
688 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
689 if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)){
690 aq.setVnfType(vnfType);
697 aq.setRequestBody (this.requestJSON);
699 aq.setRequestStatus (status.toString ());
700 aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER);
702 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
703 aq.setStatusMessage (this.errorMessage);
704 aq.setResponseBody (this.responseBody);
705 aq.setProgress(new Long(100));
707 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
708 aq.setEndTime (endTimeStamp);
711 msoLogger.debug ("About to insert a record");
714 session.getTransaction ().commit ();
716 } catch (Exception e) {
717 msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception when creation record request", e);
718 if (session != null) {
721 if (!status.equals (Status.FAILED)) {
727 public void updateFinalStatus (Status status) {
730 result = RequestsDatabase.updateInfraFinalStatus (requestId,
735 Constants.MODIFIED_BY_APIHANDLER);
736 } catch (Exception e) {
737 msoLogger.error(MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "Exception when updating record in DB");
738 msoLogger.debug ("Exception: ", e);
742 public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) {
743 return buildResponseWithError (httpResponseCode, errorCode, inProgress, null);
746 public Response buildResponseWithError (int httpResponseCode,
748 InfraActiveRequests inProgress,
749 String errorString) {
753 // Log the failed request into the MSO Requests database
755 return Response.status (httpResponseCode).entity (null).build ();
759 public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) {
763 return Response.status (httpResponseCode).entity (null).build ();
766 public String getRequestUri () {
770 public void setRequestUri (String requestUri) {
771 this.requestUri = requestUri;
774 public VnfInputs getVnfInputs () {
778 public RequestInfo getRequestInfo () {
782 public String getResponseBody () {
786 public void setResponseBody (String responseBody) {
787 this.responseBody = responseBody;
790 public String getHttpResponse () {
794 public void setHttpResponse (String httpResponse) {
795 this.httpResponse = httpResponse;
798 public String getRequestId () {
802 public String getRequestXML () {
806 public void setRequestXML (String requestXML) {
807 this.requestXML = requestXML;
810 public RequestStatusType getStatus () {
814 public String getServiceType () {
815 if (this.vnfInputs.getServiceType () != null)
816 return this.vnfInputs.getServiceType ();
817 if (this.vnfInputs.getServiceId () != null)
818 return this.vnfInputs.getServiceId ();
822 public void setStatus (RequestStatusType status) {
823 this.status = status;
827 this.progress = Constants.PROGRESS_REQUEST_COMPLETED;
830 this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS;
835 public ModelInfo getModelInfo() {
839 public ServiceInstancesRequest getServiceInstancesRequest() {
843 public String getServiceInstanceType () {
844 return serviceInstanceType;
847 public String getNetworkType () {
851 public String getVnfType () {
855 public String getVfModuleModelName () {
856 return vfModuleModelName;
859 public String getVfModuleType () {
863 public String getAsdcServiceModelVersion () {
864 return asdcServiceModelVersion;
867 public static String domToStr (Document doc) {
873 StringWriter sw = new StringWriter ();
874 StreamResult sr = new StreamResult (sw);
875 TransformerFactory tf = TransformerFactory.newInstance ();
876 Transformer t = tf.newTransformer ();
877 t.setOutputProperty (OutputKeys.STANDALONE, "yes");
878 NodeList nl = doc.getDocumentElement ().getChildNodes ();
879 DOMSource source = null;
880 for (int x = 0; x < nl.getLength (); x++) {
881 Node e = nl.item (x);
882 if (e instanceof Element) {
883 source = new DOMSource (e);
887 if (source != null) {
888 t.transform (source, sr);
890 String s = sw.toString ();
896 } catch (Exception e) {
897 msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in domToStr", e);
902 public void addBPMNSpecificInputs(String personaModelId, String personaModelVersion, Boolean isBaseVfModule,
903 String vnfPersonaModelId, String vnfPersonaModelVersion) {
904 vnfInputs.setPersonaModelId(personaModelId);
905 vnfInputs.setPersonaModelVersion(personaModelVersion);
906 vnfInputs.setIsBaseVfModule(isBaseVfModule);
907 vnfInputs.setVnfPersonaModelId(vnfPersonaModelId);
908 vnfInputs.setVnfPersonaModelVersion(vnfPersonaModelVersion);
910 this.vnfReq.setVnfInputs(vnfInputs);
912 StringWriter stringWriter = new StringWriter ();
914 JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class);
915 Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
917 // output pretty printed
918 jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
920 jaxbMarshaller.marshal (this.vnfReq, stringWriter);
922 } catch (JAXBException e) {
923 msoLogger.debug ("Exception: ", e);
926 this.requestXML = stringWriter.toString ();
927 msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML);
932 private static boolean empty(String s) {
933 return (s == null || s.trim().isEmpty());
936 public String getRequestJSON() throws JsonGenerationException, JsonMappingException, IOException {
937 ObjectMapper mapper = new ObjectMapper();
938 mapper.setSerializationInclusion(Inclusion.NON_NULL);
939 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
940 msoLogger.debug ("building sir from object " + sir);
941 requestJSON = mapper.writeValueAsString(sir);
945 public boolean getALaCarteFlag() {
949 public void setaLaCarteFlag(boolean aLaCarteFlag) {
950 this.aLaCarteFlag = aLaCarteFlag;
953 public int getReqVersion() {
957 public void setReqVersion(int reqVersion) {
958 this.reqVersion = reqVersion;