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.serviceinstancebeans.SubscriberInfo;
68 import org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType;
69 import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfInputs;
70 import org.openecomp.mso.apihandlerinfra.vnfbeans.VnfRequest;
71 import org.openecomp.mso.db.AbstractSessionFactoryManager;
72 import org.openecomp.mso.logger.MessageEnum;
73 import org.openecomp.mso.logger.MsoLogger;
74 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
75 import org.openecomp.mso.requestsdb.InfraActiveRequests;
76 import org.openecomp.mso.requestsdb.RequestsDatabase;
77 import org.openecomp.mso.utils.UUIDChecker;
79 public class MsoRequest {
81 private String requestId;
82 private String requestXML;
83 private String requestJSON;
84 private String requestUri;
85 private VnfRequest vnfReq;
86 private RequestInfo requestInfo;
87 private ModelInfo modelInfo;
88 private CloudConfiguration cloudConfiguration ;
89 private VnfInputs vnfInputs;
90 private String vnfParams;
91 private Action action;
92 private String errorMessage;
93 private String errorCode;
94 private String httpResponse;
95 private String responseBody;
96 private RequestStatusType status;
97 private ServiceInstancesRequest sir;
98 private long startTime;
99 private long progress = Constants.PROGRESS_REQUEST_RECEIVED;
100 private String serviceInstanceType;
101 private String vnfType;
102 private String vfModuleType;
103 private String vfModuleModelName;
104 private String networkType;
105 private String asdcServiceModelVersion;
106 private String requestScope;
107 private int reqVersion;
108 private boolean aLaCarteFlag = false;
110 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
111 private static final String NOT_PROVIDED = "not provided";
113 protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
115 MsoRequest (String requestId) {
116 this.requestId = requestId;
117 this.startTime = System.currentTimeMillis();
118 MsoLogger.setLogContext (requestId, null);
124 this.startTime = System.currentTimeMillis();
125 MsoLogger.setLogContext (requestId, null);
130 public Response buildServiceErrorResponse (int httpResponseCode,
131 MsoException exceptionType,
134 List<String> variables) {
136 this.errorCode = messageId;
139 this.errorMessage = text;
142 this.errorMessage = "";
144 this.httpResponse = Integer.toString(httpResponseCode);
145 if(errorMessage.length() > 1999){
146 errorMessage = errorMessage.substring(0, 1999);
149 RequestError re = new RequestError();
151 if(exceptionType.name().equals("PolicyException")){
153 PolicyException pe = new PolicyException();
154 pe.setMessageId(messageId);
156 if(variables != null){
157 for(String variable: variables){
158 pe.getVariables().add(variable);
161 re.setPolicyException(pe);
165 ServiceException se = new ServiceException();
166 se.setMessageId(messageId);
168 if(variables != null){
169 if(variables != null){
170 for(String variable: variables){
171 se.getVariables().add(variable);
175 re.setServiceException(se);
178 String requestErrorStr = null;
181 ObjectMapper mapper = new ObjectMapper();
182 mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
183 requestErrorStr = mapper.writeValueAsString(re);
185 msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in buildServiceErrorResponse writing exceptionType to string ", e);
189 return Response.status (httpResponseCode).entity(requestErrorStr).build ();
193 private int reqVersionToInt(String version){
195 return Integer.parseInt(version.substring(1));
201 // Parse request JSON
202 void parse (ServiceInstancesRequest sir, HashMap<String,String> instanceIdMap, Action action, String version) throws ValidationException {
204 msoLogger.debug ("Validating the Service Instance request");
207 this.action = action;
208 this.reqVersion = reqVersionToInt(version);
209 msoLogger.debug ("Incoming version is: " + version + " coverting to int: " + this.reqVersion);
213 ObjectMapper mapper = new ObjectMapper();
214 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
215 requestJSON = mapper.writeValueAsString(sir.getRequestDetails());
217 } catch(Exception e){
218 throw new ValidationException ("Parse ServiceInstanceRequest to JSON string");
221 if(instanceIdMap != null){
222 if(instanceIdMap.get("serviceInstanceId") != null){
223 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("serviceInstanceId"))) {
224 throw new ValidationException ("serviceInstanceId");
226 this.sir.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
229 if(instanceIdMap.get("vnfInstanceId") != null){
230 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vnfInstanceId"))) {
231 throw new ValidationException ("vnfInstanceId");
233 this.sir.setVnfInstanceId(instanceIdMap.get("vnfInstanceId"));
236 if(instanceIdMap.get("vfModuleInstanceId") != null){
237 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("vfModuleInstanceId"))) {
238 throw new ValidationException ("vfModuleInstanceId");
240 this.sir.setVfModuleInstanceId(instanceIdMap.get("vfModuleInstanceId"));
243 if(instanceIdMap.get("volumeGroupInstanceId") != null){
244 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("volumeGroupInstanceId"))) {
245 throw new ValidationException ("volumeGroupInstanceId");
247 this.sir.setVolumeGroupInstanceId(instanceIdMap.get("volumeGroupInstanceId"));
250 if(instanceIdMap.get("networkInstanceId") != null){
251 if (!UUIDChecker.isValidUUID (instanceIdMap.get ("networkInstanceId"))) {
252 throw new ValidationException ("networkInstanceId");
254 this.sir.setNetworkInstanceId(instanceIdMap.get("networkInstanceId"));
258 RequestParameters requestParameters = sir.getRequestDetails().getRequestParameters();
259 if(this.reqVersion >= 3){
260 if(requestParameters!=null){
261 this.aLaCarteFlag = sir.getRequestDetails().getRequestParameters().getALaCarte();
263 this.aLaCarteFlag = false;
266 this.aLaCarteFlag = true;
269 if(requestParameters != null && (reqVersion < 3) && requestParameters.getAutoBuildVfModules()){
270 throw new ValidationException("AutoBuildVfModule", version);
273 this.modelInfo = sir.getRequestDetails().getModelInfo();
275 if (this.modelInfo == null) {
276 throw new ValidationException ("model-info");
279 this.requestInfo = sir.getRequestDetails().getRequestInfo();
281 if (this.requestInfo == null) {
282 throw new ValidationException ("requestInfo");
285 if (modelInfo.getModelType () == null) {
286 throw new ValidationException ("modelType");
289 this.requestScope = modelInfo.getModelType().name();
291 // modelCustomizationId is required when usePreLoad is false for v4 and higher for VF Module Create
292 if(requestParameters != null && reqVersion > 3 && requestScope.equalsIgnoreCase(ModelType.vfModule.name()) && action == Action.createInstance && !requestParameters.isUsePreload()) {
293 if(!UUIDChecker.isValidUUID(modelInfo.getModelCustomizationId())) {
294 throw new ValidationException("modelCustomizationId");
298 // modelCustomizationId is required when usePreLoad is false for v5 and higher for VF Module Replace
299 if(requestParameters != null && reqVersion > 4 && requestScope.equalsIgnoreCase(ModelType.vfModule.name()) && action == Action.replaceInstance && !requestParameters.isUsePreload()) {
300 if(!UUIDChecker.isValidUUID(modelInfo.getModelCustomizationId())) {
301 throw new ValidationException("modelCustomizationId");
305 // modelCustomizationId or modelCustomizationName are required when usePreLoad is false for v5 and higher for VNF Replace
306 if(requestParameters != null && reqVersion > 4 && requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action == Action.replaceInstance && !requestParameters.isUsePreload()) {
307 if(!UUIDChecker.isValidUUID(modelInfo.getModelCustomizationId()) && modelInfo.getModelCustomizationName() == null) {
308 throw new ValidationException("modelCustomizationId or modelCustomizationName");
312 //is required for serviceInstance delete macro when aLaCarte=false (v3)
313 //create and updates except for network (except v4)
314 if (empty (modelInfo.getModelInvariantId ()) && ((this.reqVersion >2 && !this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.deleteInstance) ||
315 !(this.reqVersion < 4 && requestScope.equalsIgnoreCase (ModelType.network.name ())) && (action == Action.createInstance || action == Action.updateInstance))) {
316 throw new ValidationException ("modelInvariantId");
319 if (!empty (modelInfo.getModelInvariantId ()) && !UUIDChecker.isValidUUID (modelInfo.getModelInvariantId ())) {
320 throw new ValidationException ("modelInvariantId format");
323 if (this.reqVersion <= 2 && empty (modelInfo.getModelName ()) && (action == Action.createInstance || action == Action.updateInstance || (action == Action.deleteInstance &&
324 (requestScope.equalsIgnoreCase (ModelType.network.name ()) || requestScope.equalsIgnoreCase (ModelType.vfModule.name ()))))) {
325 throw new ValidationException ("modelName");
327 if(this.reqVersion > 2 && empty (modelInfo.getModelName ()) && (action == Action.createInstance || action == Action.updateInstance || (action == Action.deleteInstance &&
328 (requestScope.equalsIgnoreCase (ModelType.vfModule.name ()))))){
329 throw new ValidationException ("modelName");
332 if (empty (modelInfo.getModelVersion ()) && ((this.reqVersion == 3 && !this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.deleteInstance) ||
333 !(this.reqVersion < 4 && requestScope.equalsIgnoreCase (ModelType.network.name ())) && (action == Action.createInstance || action == Action.updateInstance))) {
334 throw new ValidationException ("modelVersion");
337 // modelVersionId doesn't exist in v2, not required field in v3, is required for serviceInstance delete macro when aLaCarte=false in v4
338 if (this.reqVersion > 3 && empty (modelInfo.getModelVersionId()) && ((!this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.deleteInstance) ||
339 (action == Action.createInstance || action == Action.updateInstance))) {
340 throw new ValidationException ("modelVersionId");
343 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action != Action.deleteInstance && empty (modelInfo.getModelCustomizationName ())) {
344 if(this.reqVersion<=2){
345 throw new ValidationException ("modelCustomizationName");
346 } else if (!UUIDChecker.isValidUUID (modelInfo.getModelCustomizationId())) {
347 throw new ValidationException ("modelCustomizationId or modelCustomizationName");
351 if(this.reqVersion > 2 && (!UUIDChecker.isValidUUID (modelInfo.getModelCustomizationId())) && requestScope.equalsIgnoreCase (ModelType.network.name ())
352 && (action == Action.updateInstance || action == Action.createInstance)){
353 throw new ValidationException ("modelCustomizationId");
356 if(!empty(modelInfo.getModelNameVersionId())){
357 modelInfo.setModelVersionId(modelInfo.getModelNameVersionId());
360 this.cloudConfiguration = sir.getRequestDetails ().getCloudConfiguration ();
361 if ( (((!this.aLaCarteFlag && requestScope.equalsIgnoreCase (ModelType.service.name ()) && this.reqVersion < 5) ||
362 (!requestScope.equalsIgnoreCase (ModelType.service.name ())) && action != Action.updateInstance))
363 && cloudConfiguration == null) {
364 throw new ValidationException ("cloudConfiguration");
367 if (cloudConfiguration != null) {
368 if (empty (cloudConfiguration.getLcpCloudRegionId ())) {
369 throw new ValidationException ("lcpCloudRegionId");
371 if (empty (cloudConfiguration.getTenantId ())) {
372 throw new ValidationException ("tenantId");
377 if (requestScope.equalsIgnoreCase (ModelType.service.name ()) && action == Action.createInstance) {
378 if (requestParameters == null) {
379 throw new ValidationException ("requestParameters");
381 if (empty (requestParameters.getSubscriptionServiceType ())) {
382 throw new ValidationException ("subscriptionServiceType");
386 if (this.reqVersion > 4 && requestScope.equalsIgnoreCase (ModelType.service.name ()) && action == Action.createInstance) {
387 SubscriberInfo subscriberInfo = sir.getRequestDetails ().getSubscriberInfo();
388 if (subscriberInfo == null) {
389 throw new ValidationException ("subscriberInfo");
391 if (empty (subscriberInfo.getGlobalSubscriberId ())) {
392 throw new ValidationException ("globalSubscriberId");
396 if(requestScope.equalsIgnoreCase(ModelType.service.name())){
397 this.serviceInstanceType = modelInfo.getModelName();
400 if(requestScope.equalsIgnoreCase(ModelType.network.name())){
401 this.networkType = modelInfo.getModelName();
404 // Verify instanceName existence and format except for macro serviceInstance
405 if (this.reqVersion < 3 && requestScope.equalsIgnoreCase (ModelType.service.name ()) && empty (requestInfo.getInstanceName ()) && action == Action.createInstance) {
406 throw new ValidationException ("instanceName");
409 if (!empty (requestInfo.getInstanceName ())) {
410 if (!requestInfo.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) {
411 throw new ValidationException ("instanceName format");
415 if (empty (requestInfo.getProductFamilyId ())) {
416 // Mandatory for vnf Create(aLaCarte=true), Network Create(aLaCarte=true) and network update
417 //Mandatory for macro request create service instance
418 if((requestScope.equalsIgnoreCase (ModelType.vnf.name ()) && action == Action.createInstance) ||
419 (requestScope.equalsIgnoreCase (ModelType.network.name ()) && (action == Action.createInstance || action == Action.updateInstance)) ||
420 (this.reqVersion > 3 && !this.aLaCarteFlag && requestScope.equalsIgnoreCase(ModelType.service.name()) && action == Action.createInstance)) {
421 throw new ValidationException ("productFamilyId");
425 //required for all operations in V4
426 if(empty(requestInfo.getRequestorId()) && this.reqVersion > 3) {
427 throw new ValidationException ("requestorId");
430 if (empty (requestInfo.getSource ())) {
431 throw new ValidationException ("source");
435 RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
437 String serviceModelName = null;
438 String vnfModelName = null;
439 String asdcServiceModelVersion = null;
440 String volumeGroupId = null;
441 boolean isRelatedServiceInstancePresent = false;
442 boolean isRelatedVnfInstancePresent = false;
444 if (instanceList != null) {
445 for(RelatedInstanceList relatedInstanceList : instanceList){
446 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
448 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo ();
449 if (relatedInstanceModelInfo == null) {
450 throw new ValidationException ("modelInfo in relatedInstance");
453 if (relatedInstanceModelInfo.getModelType () == null) {
454 throw new ValidationException ("modelType in relatedInstance");
458 if (!empty (relatedInstance.getInstanceName ())) {
459 if (!relatedInstance.getInstanceName ().matches (Constants.VALID_INSTANCE_NAME_FORMAT)) {
460 throw new ValidationException ("instanceName format in relatedInstance");
464 if (empty (relatedInstance.getInstanceId ())) {
465 throw new ValidationException ("instanceId in relatedInstance");
468 if (!UUIDChecker.isValidUUID (relatedInstance.getInstanceId ())) {
469 throw new ValidationException ("instanceId format in relatedInstance");
473 if (action != Action.deleteInstance) {
474 if(!relatedInstanceModelInfo.getModelType().equals(ModelType.volumeGroup)) {
476 if(empty (relatedInstanceModelInfo.getModelInvariantId ())) {
477 throw new ValidationException ("modelInvariantId in relatedInstance");
478 } else if(this.reqVersion > 3 && empty(relatedInstanceModelInfo.getModelVersionId ())) {
479 throw new ValidationException("modelVersionId in relatedInstance");
480 } else if(empty(relatedInstanceModelInfo.getModelName ())) {
481 throw new ValidationException ("modelName in relatedInstance");
482 } else if (empty (relatedInstanceModelInfo.getModelVersion ())) {
483 throw new ValidationException ("modelVersion in relatedInstance");
487 if (!empty (relatedInstanceModelInfo.getModelInvariantId ()) &&
488 !UUIDChecker.isValidUUID (relatedInstanceModelInfo.getModelInvariantId ())) {
489 throw new ValidationException ("modelInvariantId format in relatedInstance");
493 if (empty (relatedInstanceModelInfo.getModelCustomizationName ()) && relatedInstanceModelInfo.getModelType ().equals (ModelType.vnf) ) {
494 if(this.reqVersion >=3 && empty (relatedInstanceModelInfo.getModelCustomizationId()) && action != Action.deleteInstance) {
495 throw new ValidationException ("modelCustomizationName or modelCustomizationId in relatedInstance of vnf");
496 } else if(this.reqVersion < 3) {
497 throw new ValidationException ("modelCustomizationName in relatedInstance");
501 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)) {
502 isRelatedServiceInstancePresent = true;
503 if (!relatedInstance.getInstanceId ().equals (this.sir.getServiceInstanceId ())) {
504 throw new ValidationException ("serviceInstanceId matching the serviceInstanceId in request URI");
506 serviceModelName = relatedInstanceModelInfo.getModelName ();
507 asdcServiceModelVersion = relatedInstanceModelInfo.getModelVersion ();
508 } else if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)) {
509 isRelatedVnfInstancePresent = true;
510 if (!relatedInstance.getInstanceId ().equals (this.sir.getVnfInstanceId ())) {
511 throw new ValidationException ("vnfInstanceId matching the vnfInstanceId in request URI");
513 vnfModelName = relatedInstanceModelInfo.getModelCustomizationName();
514 } else if(relatedInstanceModelInfo.getModelType().equals(ModelType.volumeGroup)) {
515 volumeGroupId = relatedInstance.getInstanceId ();
520 if(requestScope.equalsIgnoreCase (ModelType.volumeGroup.name ())) {
521 if (!isRelatedServiceInstancePresent) {
522 throw new ValidationException ("related service instance for volumeGroup request");
524 if (!isRelatedVnfInstancePresent) {
525 throw new ValidationException ("related vnf instance for volumeGroup request");
527 this.serviceInstanceType = serviceModelName;
528 this.vnfType = serviceModelName + "/" + vnfModelName;
529 this.asdcServiceModelVersion = asdcServiceModelVersion;
531 else if(requestScope.equalsIgnoreCase(ModelType.vfModule.name ())) {
532 if (!isRelatedServiceInstancePresent) {
533 throw new ValidationException ("related service instance for vfModule request");
535 if (!isRelatedVnfInstancePresent) {
536 throw new ValidationException ("related vnf instance for vfModule request");
538 String vfModuleModelName = modelInfo.getModelName ();
539 this.vfModuleModelName = vfModuleModelName;
540 this.serviceInstanceType = serviceModelName;
541 this.vnfType = serviceModelName + "/" + vnfModelName;
542 this.asdcServiceModelVersion = asdcServiceModelVersion;
543 this.vfModuleType = vnfType + "::" + vfModuleModelName;
544 this.sir.setVolumeGroupInstanceId (volumeGroupId);
546 else if (requestScope.equalsIgnoreCase (ModelType.vnf.name ())) {
547 if (!isRelatedServiceInstancePresent) {
548 throw new ValidationException ("related service instance for vnf request");
550 this.vnfType = serviceModelName + "/" + sir.getRequestDetails().getModelInfo().getModelCustomizationName();
553 else if ((( requestScope.equalsIgnoreCase(ModelType.vnf.name ()) || requestScope.equalsIgnoreCase(ModelType.volumeGroup.name ()) || requestScope.equalsIgnoreCase(ModelType.vfModule.name ()) ) && (action == Action.createInstance)) ||
554 (this.reqVersion > 2 && (requestScope.equalsIgnoreCase(ModelType.volumeGroup.name ()) || requestScope.equalsIgnoreCase(ModelType.vfModule.name ())) && action == Action.updateInstance)){
555 msoLogger.debug ("related instance exception");
556 throw new ValidationException ("related instances");
561 void parseOrchestration (ServiceInstancesRequest sir) throws ValidationException {
563 msoLogger.debug ("Validating the Orchestration request");
568 ObjectMapper mapper = new ObjectMapper();
569 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
570 requestJSON = mapper.writeValueAsString(sir.getRequestDetails());
572 } catch(Exception e){
573 throw new ValidationException ("Parse ServiceInstanceRequest to JSON string", e);
576 this.requestInfo = sir.getRequestDetails().getRequestInfo();
578 if (this.requestInfo == null) {
579 throw new ValidationException ("requestInfo");
582 if (empty (requestInfo.getSource ())) {
583 throw new ValidationException ("source");
585 if (empty (requestInfo.getRequestorId ())) {
586 throw new ValidationException ("requestorId");
590 public Map<String, List<String>> getOrchestrationFilters (MultivaluedMap<String, String> queryParams) throws ValidationException {
592 String queryParam = null;
593 Map<String, List<String>> orchestrationFilterParams = new HashMap<String, List<String>>();
596 for (Entry<String,List<String>> entry : queryParams.entrySet()) {
597 queryParam = entry.getKey();
600 if(queryParam.equalsIgnoreCase("filter")){
601 for(String value : entry.getValue()) {
602 StringTokenizer st = new StringTokenizer(value, ":");
606 List<String> orchestrationList = new ArrayList<String>();
607 while (st.hasMoreElements()) {
609 mapKey = st.nextElement() + "";
611 orchestrationList.add(st.nextElement() + "");
615 orchestrationFilterParams.put(mapKey, orchestrationList);
620 //msoLogger.error (MessageEnum.APIH_VALIDATION_ERROR, e);
621 throw new ValidationException ("QueryParam ServiceInfo", e);
628 return orchestrationFilterParams;
631 public void createRequestRecord (Status status, Action action) {
633 Session session = null;
636 session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
637 session.beginTransaction ();
640 sir = new ServiceInstancesRequest ();
643 InfraActiveRequests aq = new InfraActiveRequests ();
644 aq.setRequestId (requestId);
646 aq.setRequestAction(action.name());
647 aq.setAction(action.name());
649 Timestamp startTimeStamp = new Timestamp (System.currentTimeMillis());
651 aq.setStartTime (startTimeStamp);
653 if (requestInfo != null) {
655 if(requestInfo.getSource() != null){
656 aq.setSource(requestInfo.getSource());
658 if(requestInfo.getCallbackUrl() != null){
659 aq.setCallBackUrl(requestInfo.getCallbackUrl());
661 if(requestInfo.getCorrelator() != null){
662 aq.setCorrelator(requestInfo.getCorrelator());
665 if(requestInfo.getRequestorId() != null) {
666 aq.setRequestorId(requestInfo.getRequestorId());
670 if (modelInfo != null) {
671 aq.setRequestScope(requestScope);
674 if (cloudConfiguration != null) {
675 if(cloudConfiguration.getLcpCloudRegionId() != null) {
676 aq.setAicCloudRegion(cloudConfiguration.getLcpCloudRegionId());
679 if(cloudConfiguration.getTenantId() != null) {
680 aq.setTenantId(cloudConfiguration.getTenantId());
685 if(sir.getServiceInstanceId() != null){
686 aq.setServiceInstanceId(sir.getServiceInstanceId());
689 if(sir.getVnfInstanceId() != null){
690 aq.setVnfId(sir.getVnfInstanceId());
694 if(ModelType.service.name().equalsIgnoreCase(requestScope)){
695 if(requestInfo.getInstanceName() != null){
696 aq.setServiceInstanceName(requestInfo.getInstanceName());
700 if(ModelType.network.name().equalsIgnoreCase(requestScope)){
701 aq.setNetworkName(requestInfo.getInstanceName());
702 aq.setNetworkType(networkType);
703 aq.setNetworkId(sir.getNetworkInstanceId());
706 if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)){
707 aq.setVolumeGroupId(sir.getVolumeGroupInstanceId());
708 aq.setVolumeGroupName(requestInfo.getInstanceName());
709 aq.setVnfType(vnfType);
713 if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)){
714 aq.setVfModuleName(requestInfo.getInstanceName());
715 aq.setVfModuleModelName(modelInfo.getModelName());
716 aq.setVfModuleId(sir.getVfModuleInstanceId());
717 aq.setVolumeGroupId(sir.getVolumeGroupInstanceId());
718 aq.setVnfType(vnfType);
722 if(ModelType.vnf.name().equalsIgnoreCase(requestScope)){
723 aq.setVnfName(requestInfo.getInstanceName());
724 if (null != sir.getRequestDetails()) {
725 RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
727 if (instanceList != null) {
729 for(RelatedInstanceList relatedInstanceList : instanceList){
731 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
732 if(relatedInstance.getModelInfo().getModelType().equals(ModelType.service)){
733 aq.setVnfType(vnfType);
740 aq.setRequestBody (this.requestJSON);
742 aq.setRequestStatus (status.toString ());
743 aq.setLastModifiedBy (Constants.MODIFIED_BY_APIHANDLER);
745 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
746 aq.setStatusMessage (this.errorMessage);
747 aq.setResponseBody (this.responseBody);
748 aq.setProgress(new Long(100));
750 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
751 aq.setEndTime (endTimeStamp);
754 msoLogger.debug ("About to insert a record");
757 session.getTransaction ().commit ();
759 } catch (Exception e) {
760 msoLogger.error (MessageEnum.APIH_DB_INSERT_EXC, "", "", MsoLogger.ErrorCode.DataError, "Exception when creation record request", e);
761 if (session != null) {
764 if (!status.equals (Status.FAILED)) {
770 public void updateFinalStatus (Status status) {
773 result = (RequestsDatabase.getInstance()).updateInfraFinalStatus (requestId,
778 Constants.MODIFIED_BY_APIHANDLER);
779 } catch (Exception e) {
780 msoLogger.error(MessageEnum.APIH_DB_UPDATE_EXC, e.getMessage(), "", "", MsoLogger.ErrorCode.DataError, "Exception when updating record in DB");
781 msoLogger.debug ("Exception: ", e);
785 public Response buildResponse (int httpResponseCode, String errorCode, InfraActiveRequests inProgress) {
786 return buildResponseWithError (httpResponseCode, errorCode, inProgress, null);
789 public Response buildResponseWithError (int httpResponseCode,
791 InfraActiveRequests inProgress,
792 String errorString) {
796 // Log the failed request into the MSO Requests database
798 return Response.status (httpResponseCode).entity (null).build ();
802 public Response buildResponseFailedValidation (int httpResponseCode, String exceptionMessage) {
806 return Response.status (httpResponseCode).entity (null).build ();
809 public String getRequestUri () {
813 public void setRequestUri (String requestUri) {
814 this.requestUri = requestUri;
817 public VnfInputs getVnfInputs () {
821 public RequestInfo getRequestInfo () {
825 public String getResponseBody () {
829 public void setResponseBody (String responseBody) {
830 this.responseBody = responseBody;
833 public String getHttpResponse () {
837 public void setHttpResponse (String httpResponse) {
838 this.httpResponse = httpResponse;
841 public String getRequestId () {
845 public String getRequestXML () {
849 public void setRequestXML (String requestXML) {
850 this.requestXML = requestXML;
853 public RequestStatusType getStatus () {
857 public String getServiceType () {
858 if (this.vnfInputs.getServiceType () != null)
859 return this.vnfInputs.getServiceType ();
860 if (this.vnfInputs.getServiceId () != null)
861 return this.vnfInputs.getServiceId ();
865 public void setStatus (RequestStatusType status) {
866 this.status = status;
870 this.progress = Constants.PROGRESS_REQUEST_COMPLETED;
873 this.progress = Constants.PROGRESS_REQUEST_IN_PROGRESS;
878 public ModelInfo getModelInfo() {
882 public ServiceInstancesRequest getServiceInstancesRequest() {
886 public String getServiceInstanceType () {
887 return serviceInstanceType;
890 public String getNetworkType () {
894 public String getVnfType () {
898 public String getVfModuleModelName () {
899 return vfModuleModelName;
902 public String getVfModuleType () {
906 public String getAsdcServiceModelVersion () {
907 return asdcServiceModelVersion;
910 public static String domToStr (Document doc) {
916 StringWriter sw = new StringWriter ();
917 StreamResult sr = new StreamResult (sw);
918 TransformerFactory tf = TransformerFactory.newInstance ();
919 Transformer t = tf.newTransformer ();
920 t.setOutputProperty (OutputKeys.STANDALONE, "yes");
921 NodeList nl = doc.getDocumentElement ().getChildNodes ();
922 DOMSource source = null;
923 for (int x = 0; x < nl.getLength (); x++) {
924 Node e = nl.item (x);
925 if (e instanceof Element) {
926 source = new DOMSource (e);
930 if (source != null) {
931 t.transform (source, sr);
933 String s = sw.toString ();
939 } catch (Exception e) {
940 msoLogger.error (MessageEnum.APIH_DOM2STR_ERROR, "", "", MsoLogger.ErrorCode.DataError, "Exception in domToStr", e);
945 public void addBPMNSpecificInputs(String personaModelId, String personaModelVersion, Boolean isBaseVfModule,
946 String vnfPersonaModelId, String vnfPersonaModelVersion) {
947 vnfInputs.setPersonaModelId(personaModelId);
948 vnfInputs.setPersonaModelVersion(personaModelVersion);
949 vnfInputs.setIsBaseVfModule(isBaseVfModule);
950 vnfInputs.setVnfPersonaModelId(vnfPersonaModelId);
951 vnfInputs.setVnfPersonaModelVersion(vnfPersonaModelVersion);
953 this.vnfReq.setVnfInputs(vnfInputs);
955 StringWriter stringWriter = new StringWriter ();
957 JAXBContext jaxbContext = JAXBContext.newInstance (VnfRequest.class);
958 Marshaller jaxbMarshaller = jaxbContext.createMarshaller ();
960 // output pretty printed
961 jaxbMarshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
963 jaxbMarshaller.marshal (this.vnfReq, stringWriter);
965 } catch (JAXBException e) {
966 msoLogger.debug ("Exception: ", e);
969 this.requestXML = stringWriter.toString ();
970 msoLogger.debug("REQUEST XML to BPEL: " + this.requestXML);
975 private static boolean empty(String s) {
976 return (s == null || s.trim().isEmpty());
979 public String getRequestJSON() throws JsonGenerationException, JsonMappingException, IOException {
980 ObjectMapper mapper = new ObjectMapper();
981 mapper.setSerializationInclusion(Inclusion.NON_NULL);
982 //mapper.configure(Feature.WRAP_ROOT_VALUE, true);
983 msoLogger.debug ("building sir from object " + sir);
984 requestJSON = mapper.writeValueAsString(sir);
986 // Perform mapping from VID-style modelInfo fields to ASDC-style modelInfo fields
988 msoLogger.debug("REQUEST JSON before mapping: " + requestJSON);
989 // modelUuid = modelVersionId
990 requestJSON = requestJSON.replaceAll("\"modelVersionId\":","\"modelUuid\":");
991 // modelCustomizationUuid = modelCustomizationId
992 requestJSON = requestJSON.replaceAll("\"modelCustomizationId\":","\"modelCustomizationUuid\":");
993 // modelInstanceName = modelCustomizationName
994 requestJSON = requestJSON.replaceAll("\"modelCustomizationName\":","\"modelInstanceName\":");
995 // modelInvariantUuid = modelInvariantId
996 requestJSON = requestJSON.replaceAll("\"modelInvariantId\":","\"modelInvariantUuid\":");
997 msoLogger.debug("REQUEST JSON after mapping: " + requestJSON);
1002 public boolean getALaCarteFlag() {
1003 return aLaCarteFlag;
1006 public void setaLaCarteFlag(boolean aLaCarteFlag) {
1007 this.aLaCarteFlag = aLaCarteFlag;
1010 public int getReqVersion() {
1014 public void setReqVersion(int reqVersion) {
1015 this.reqVersion = reqVersion;