Merge "Lower code duplication of AaiClient calls in BBInputSetupUtils"
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / onap / so / apihandlerinfra / MsoRequest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7  * ================================================================================
8  * Modifications Copyright (c) 2019 Samsung
9  * ================================================================================
10  * Modifications Copyright (c) 2020 Nokia
11  * ================================================================================
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *      http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  * ============LICENSE_END=========================================================
24  */
25
26 package org.onap.so.apihandlerinfra;
27
28 import java.io.IOException;
29 import java.io.StringWriter;
30 import java.sql.Timestamp;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Optional;
36 import java.util.StringTokenizer;
37 import javax.ws.rs.core.MultivaluedMap;
38 import javax.ws.rs.core.Response;
39 import javax.xml.XMLConstants;
40 import javax.xml.transform.OutputKeys;
41 import javax.xml.transform.Transformer;
42 import javax.xml.transform.TransformerFactory;
43 import javax.xml.transform.dom.DOMSource;
44 import javax.xml.transform.stream.StreamResult;
45 import org.onap.aai.domain.yang.GenericVnf;
46 import org.onap.aai.domain.yang.ServiceInstance;
47 import org.onap.aai.domain.yang.Tenant;
48 import org.onap.so.apihandler.common.ResponseBuilder;
49 import org.onap.so.apihandlerinfra.infra.rest.AAIDataRetrieval;
50 import org.onap.so.apihandlerinfra.tasksbeans.TasksRequest;
51 import org.onap.so.apihandlerinfra.validation.ApplyUpdatedConfigValidation;
52 import org.onap.so.apihandlerinfra.validation.CloudConfigurationValidation;
53 import org.onap.so.apihandlerinfra.validation.ConfigurationParametersValidation;
54 import org.onap.so.apihandlerinfra.validation.CustomWorkflowValidation;
55 import org.onap.so.apihandlerinfra.validation.InPlaceSoftwareUpdateValidation;
56 import org.onap.so.apihandlerinfra.validation.InstanceIdMapValidation;
57 import org.onap.so.apihandlerinfra.validation.MembersValidation;
58 import org.onap.so.apihandlerinfra.validation.ModelInfoValidation;
59 import org.onap.so.apihandlerinfra.validation.PlatformLOBValidation;
60 import org.onap.so.apihandlerinfra.validation.ProjectOwningEntityValidation;
61 import org.onap.so.apihandlerinfra.validation.RelatedInstancesValidation;
62 import org.onap.so.apihandlerinfra.validation.RequestInfoValidation;
63 import org.onap.so.apihandlerinfra.validation.RequestParametersValidation;
64 import org.onap.so.apihandlerinfra.validation.RequestScopeValidation;
65 import org.onap.so.apihandlerinfra.validation.SubscriberInfoValidation;
66 import org.onap.so.apihandlerinfra.validation.UserParamsValidation;
67 import org.onap.so.apihandlerinfra.validation.ValidationInformation;
68 import org.onap.so.apihandlerinfra.validation.ValidationRule;
69 import org.onap.so.apihandlerinfra.vnfbeans.RequestStatusType;
70 import org.onap.so.apihandlerinfra.vnfbeans.VnfInputs;
71 import org.onap.so.apihandlerinfra.vnfbeans.VnfRequest;
72 import org.onap.so.constants.Status;
73 import org.onap.so.db.request.beans.InfraActiveRequests;
74 import org.onap.so.db.request.client.RequestsDbClient;
75 import org.onap.so.exceptions.ValidationException;
76 import org.onap.so.logger.LogConstants;
77 import org.onap.so.serviceinstancebeans.CloudConfiguration;
78 import org.onap.so.serviceinstancebeans.ModelInfo;
79 import org.onap.so.serviceinstancebeans.ModelType;
80 import org.onap.so.serviceinstancebeans.PolicyException;
81 import org.onap.so.serviceinstancebeans.RelatedInstance;
82 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
83 import org.onap.so.serviceinstancebeans.RequestError;
84 import org.onap.so.serviceinstancebeans.RequestInfo;
85 import org.onap.so.serviceinstancebeans.RequestParameters;
86 import org.onap.so.serviceinstancebeans.Service;
87 import org.onap.so.serviceinstancebeans.ServiceException;
88 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
89 import org.slf4j.Logger;
90 import org.slf4j.LoggerFactory;
91 import org.slf4j.MDC;
92 import org.springframework.beans.factory.annotation.Autowired;
93 import org.springframework.beans.factory.annotation.Value;
94 import org.springframework.stereotype.Component;
95 import org.w3c.dom.Document;
96 import org.w3c.dom.Element;
97 import org.w3c.dom.Node;
98 import org.w3c.dom.NodeList;
99 import com.fasterxml.jackson.annotation.JsonInclude.Include;
100 import com.fasterxml.jackson.core.JsonGenerationException;
101 import com.fasterxml.jackson.databind.JsonMappingException;
102 import com.fasterxml.jackson.databind.ObjectMapper;
103
104 @Component
105 public class MsoRequest {
106
107     @Autowired
108     private RequestsDbClient requestsDbClient;
109
110     @Autowired
111     private ResponseBuilder builder;
112
113     @Autowired
114     private AAIDataRetrieval aaiDataRet;
115
116     @Value("${mso.enforceDLP:false}")
117     private boolean enforceDLP;
118
119     private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
120
121     public Response buildServiceErrorResponse(int httpResponseCode, MsoException exceptionType, String errorText,
122             String messageId, List<String> variables, String version) {
123
124         if (errorText.length() > 1999) {
125             errorText = errorText.substring(0, 1999);
126         }
127
128         RequestError re = new RequestError();
129
130         if ("PolicyException".equals(exceptionType.name())) {
131
132             PolicyException pe = new PolicyException();
133             pe.setMessageId(messageId);
134             pe.setText(errorText);
135             if (variables != null) {
136                 for (String variable : variables) {
137                     pe.getVariables().add(variable);
138                 }
139             }
140             re.setPolicyException(pe);
141
142         } else {
143
144             ServiceException se = new ServiceException();
145             se.setMessageId(messageId);
146             se.setText(errorText);
147             if (variables != null) {
148                 for (String variable : variables) {
149                     se.getVariables().add(variable);
150                 }
151             }
152             re.setServiceException(se);
153         }
154         return builder.buildResponse(httpResponseCode, null, re, version);
155     }
156
157
158     // Parse request JSON
159     public void parse(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMap, Actions action,
160             String version, String originalRequestJSON, int reqVersion, Boolean aLaCarteFlag)
161             throws ValidationException, IOException {
162
163         logger.debug("Validating the Service Instance request");
164         List<ValidationRule> rules = new ArrayList<>();
165         logger.debug("Incoming version is: {} coverting to int: {}", version, reqVersion);
166         RequestParameters requestParameters = sir.getRequestDetails().getRequestParameters();
167         ValidationInformation info =
168                 new ValidationInformation(sir, instanceIdMap, action, reqVersion, aLaCarteFlag, requestParameters);
169
170         rules.add(new InstanceIdMapValidation());
171
172         String workflowUuid = null;
173         if (instanceIdMap != null) {
174             workflowUuid = instanceIdMap.get("workflowUuid");
175         }
176
177         if (workflowUuid != null) {
178             rules.add(new CustomWorkflowValidation());
179         } else if (reqVersion >= 6 && action == Action.inPlaceSoftwareUpdate) {
180             rules.add(new InPlaceSoftwareUpdateValidation());
181         } else if (reqVersion >= 6 && action == Action.applyUpdatedConfig) {
182             rules.add(new ApplyUpdatedConfigValidation());
183         } else if (action == Action.addMembers || action == Action.removeMembers) {
184             rules.add(new MembersValidation());
185         } else {
186             rules.add(new RequestScopeValidation());
187             rules.add(new RequestParametersValidation());
188             rules.add(new RequestInfoValidation());
189             rules.add(new ModelInfoValidation());
190             rules.add(new CloudConfigurationValidation());
191             rules.add(new SubscriberInfoValidation());
192             if (!enforceDLP) {
193                 rules.add(new PlatformLOBValidation());
194                 rules.add(new ProjectOwningEntityValidation());
195             }
196             rules.add(new RelatedInstancesValidation());
197             rules.add(new ConfigurationParametersValidation());
198         }
199         if (reqVersion >= 7 && requestParameters != null && requestParameters.getUserParams() != null) {
200             for (Map<String, Object> params : requestParameters.getUserParams()) {
201                 if (params.containsKey("service")) {
202                     ObjectMapper obj = new ObjectMapper();
203                     String input = obj.writeValueAsString(params.get("service"));
204                     Service validate = obj.readValue(input, Service.class);
205                     info.setUserParams(validate);
206                     rules.add(new UserParamsValidation());
207                     break;
208                 }
209             }
210         }
211         for (ValidationRule rule : rules) {
212             rule.validate(info);
213         }
214     }
215
216     void parseOrchestration(ServiceInstancesRequest sir) throws ValidationException {
217         RequestInfo requestInfo = sir.getRequestDetails().getRequestInfo();
218
219         if (requestInfo == null) {
220             throw new ValidationException("requestInfo");
221         }
222
223         if (empty(requestInfo.getSource())) {
224             throw new ValidationException("source");
225         }
226         if (empty(requestInfo.getRequestorId())) {
227             throw new ValidationException("requestorId");
228         }
229     }
230
231     public Map<String, List<String>> getOrchestrationFilters(MultivaluedMap<String, String> queryParams) {
232         final String FILTER_KEY = "filter";
233         Map<String, List<String>> orchestrationFilterParams = new HashMap<>();
234
235         Optional.ofNullable(queryParams.get(FILTER_KEY)).ifPresent(listValues -> listValues
236                 .forEach(value -> addValueToOrchestrationFilterParamsMap(orchestrationFilterParams, value)));
237
238         return orchestrationFilterParams;
239     }
240
241     private void addValueToOrchestrationFilterParamsMap(Map<String, List<String>> orchestrationFilterParams,
242             String value) {
243         final String TOKEN_DELIMITER = ":";
244         StringTokenizer stringTokenizer = new StringTokenizer(value, TOKEN_DELIMITER);
245
246         if (!stringTokenizer.hasMoreTokens()) {
247             return;
248         }
249         String mapKey = stringTokenizer.nextToken();
250         List<String> orchestrationList = new ArrayList<>();
251         while (stringTokenizer.hasMoreTokens()) {
252             orchestrationList.add(stringTokenizer.nextToken());
253         }
254
255         orchestrationFilterParams.put(mapKey, orchestrationList);
256     }
257
258     public InfraActiveRequests createRequestObject(ServiceInstancesRequest servInsReq, Actions action, String requestId,
259             Status status, String originalRequestJSON, String requestScope) {
260         InfraActiveRequests aq = new InfraActiveRequests();
261         try {
262             if (null == servInsReq) {
263                 servInsReq = new ServiceInstancesRequest();
264             }
265             String networkType = "";
266             String vnfType = "";
267             aq.setRequestId(requestId);
268             aq.setRequestAction(action.toString());
269             aq.setRequestUrl(MDC.get(LogConstants.HTTP_URL));
270
271             Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
272
273             aq.setStartTime(startTimeStamp);
274             if (requestScope.equals(ModelType.instanceGroup.name()) && action == Action.deleteInstance) {
275                 aq.setRequestScope(requestScope);
276             } else {
277                 RequestInfo requestInfo = servInsReq.getRequestDetails().getRequestInfo();
278                 if (requestInfo != null) {
279
280                     if (requestInfo.getSource() != null) {
281                         aq.setSource(requestInfo.getSource());
282                     }
283                     if (requestInfo.getCallbackUrl() != null) {
284                         aq.setCallBackUrl(requestInfo.getCallbackUrl());
285                     }
286                     if (requestInfo.getCorrelator() != null) {
287                         aq.setCorrelator(requestInfo.getCorrelator());
288                     }
289
290                     if (requestInfo.getRequestorId() != null) {
291                         aq.setRequestorId(requestInfo.getRequestorId());
292                     }
293                 }
294
295                 if (servInsReq.getRequestDetails().getModelInfo() != null
296                         || (action == Action.inPlaceSoftwareUpdate || action == Action.applyUpdatedConfig)) {
297                     aq.setRequestScope(requestScope);
298                 }
299
300                 if (servInsReq.getRequestDetails().getCloudConfiguration() != null) {
301                     CloudConfiguration cloudConfiguration = servInsReq.getRequestDetails().getCloudConfiguration();
302                     if (cloudConfiguration.getLcpCloudRegionId() != null) {
303                         aq.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
304                     }
305
306                     if (cloudConfiguration.getTenantId() != null) {
307                         aq.setTenantId(cloudConfiguration.getTenantId());
308                     }
309
310                 }
311
312                 if (servInsReq.getServiceInstanceId() != null) {
313                     aq.setServiceInstanceId(servInsReq.getServiceInstanceId());
314                 }
315
316                 if (servInsReq.getVnfInstanceId() != null) {
317                     aq.setVnfId(servInsReq.getVnfInstanceId());
318                 }
319
320                 if (servInsReq.getPnfName() != null) {
321                     aq.setRequestScope(requestScope);
322                     aq.setPnfName(servInsReq.getPnfName());
323                 }
324
325                 if (servInsReq.getRequestDetails() != null && servInsReq.getRequestDetails().getRequestInfo() != null
326                         && servInsReq.getRequestDetails().getRequestInfo().getProductFamilyId() != null) {
327                     logger.debug("Retrieving productFamilyName to put into requests db");
328
329                     org.onap.aai.domain.yang.Service service =
330                             aaiDataRet.getService(servInsReq.getRequestDetails().getRequestInfo().getProductFamilyId());
331                     if (service != null) {
332                         logger.debug("Found service by service-id");
333                         String productFamilyName = service.getServiceDescription();
334                         if (productFamilyName != null) {
335                             aq.setProductFamilyName(productFamilyName);
336                         }
337                     }
338                 }
339
340                 aq.setProductFamilyName(getProductFamilyNameFromAAI(servInsReq));
341
342                 aq.setTenantName(getTenantNameFromAAI(servInsReq));
343
344                 if (ModelType.service.name().equalsIgnoreCase(requestScope)) {
345                     if (servInsReq.getRequestDetails().getRequestInfo() != null) {
346                         if (servInsReq.getRequestDetails().getRequestInfo().getInstanceName() != null) {
347                             aq.setServiceInstanceName(requestInfo.getInstanceName());
348                         }
349                     }
350                 }
351
352                 if (ModelType.network.name().equalsIgnoreCase(requestScope)) {
353                     aq.setNetworkName(servInsReq.getRequestDetails().getRequestInfo().getInstanceName());
354                     aq.setNetworkType(networkType);
355                     aq.setNetworkId(servInsReq.getNetworkInstanceId());
356                 }
357
358                 if (ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)) {
359                     aq.setVolumeGroupId(servInsReq.getVolumeGroupInstanceId());
360                     aq.setVolumeGroupName(servInsReq.getRequestDetails().getRequestInfo().getInstanceName());
361                     aq.setVnfType(vnfType);
362
363                 }
364
365                 if (ModelType.vfModule.name().equalsIgnoreCase(requestScope)) {
366                     aq.setVfModuleName(requestInfo.getInstanceName());
367                     aq.setVfModuleModelName(servInsReq.getRequestDetails().getModelInfo().getModelName());
368                     aq.setVfModuleId(servInsReq.getVfModuleInstanceId());
369                     aq.setVolumeGroupId(servInsReq.getVolumeGroupInstanceId());
370                     aq.setVnfType(vnfType);
371
372                 }
373
374                 if (ModelType.configuration.name().equalsIgnoreCase(requestScope)) {
375                     aq.setConfigurationId(servInsReq.getConfigurationId());
376                     aq.setConfigurationName(requestInfo.getInstanceName());
377                 }
378                 if (requestScope.equalsIgnoreCase(ModelType.instanceGroup.name())) {
379                     aq.setInstanceGroupId(servInsReq.getInstanceGroupId());
380                     aq.setInstanceGroupName(requestInfo.getInstanceName());
381                 }
382                 if (ModelType.vnf.name().equalsIgnoreCase(requestScope)) {
383                     if (requestInfo != null) {
384                         aq.setVnfName(requestInfo.getInstanceName());
385                     }
386                     if (null != servInsReq.getRequestDetails()) {
387                         RelatedInstanceList[] instanceList = servInsReq.getRequestDetails().getRelatedInstanceList();
388
389                         if (instanceList != null) {
390
391                             for (RelatedInstanceList relatedInstanceList : instanceList) {
392
393                                 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
394                                 if (relatedInstance.getModelInfo().getModelType().equals(ModelType.service)) {
395                                     aq.setVnfType(vnfType);
396                                 }
397                             }
398                         }
399                     }
400                 }
401             }
402
403             aq.setRequestBody(originalRequestJSON);
404
405             aq.setRequestStatus(status.toString());
406             aq.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
407         } catch (Exception e) {
408             logger.error("Exception when creation record request", e);
409
410             if (!status.equals(Status.FAILED)) {
411                 throw e;
412             }
413         }
414         return aq;
415     }
416
417     public InfraActiveRequests createRequestObject(TasksRequest taskRequest, Action action, String requestId,
418             Status status, String originalRequestJSON) {
419         InfraActiveRequests aq = new InfraActiveRequests();
420         try {
421
422             org.onap.so.apihandlerinfra.tasksbeans.RequestInfo requestInfo =
423                     taskRequest.getRequestDetails().getRequestInfo();
424             aq.setRequestId(requestId);
425             aq.setRequestAction(action.name());
426             aq.setRequestUrl(MDC.get(LogConstants.HTTP_URL));
427
428             Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
429
430             aq.setStartTime(startTimeStamp);
431             if (requestInfo != null) {
432
433                 if (requestInfo.getSource() != null) {
434                     aq.setSource(requestInfo.getSource());
435                 }
436
437                 if (requestInfo.getRequestorId() != null) {
438                     aq.setRequestorId(requestInfo.getRequestorId());
439                 }
440             }
441
442             aq.setRequestBody(originalRequestJSON);
443             aq.setRequestStatus(status.toString());
444             aq.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
445
446         } catch (Exception e) {
447             logger.error("Exception when creation record request", e);
448
449             if (!status.equals(Status.FAILED)) {
450                 throw e;
451             }
452         }
453         return aq;
454     }
455
456     public void createErrorRequestRecord(Status status, String requestId, String errorMessage, Actions action,
457             String requestScope, String requestJSON) {
458         try {
459             InfraActiveRequests request = new InfraActiveRequests(requestId);
460             Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
461             request.setStartTime(startTimeStamp);
462             request.setRequestStatus(status.toString());
463             request.setStatusMessage(errorMessage);
464             request.setProgress((long) 100);
465             request.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
466             request.setRequestAction(action.toString());
467             request.setRequestScope(requestScope);
468             request.setRequestBody(requestJSON);
469             Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());
470             request.setEndTime(endTimeStamp);
471             request.setRequestUrl(MDC.get(LogConstants.HTTP_URL));
472             requestsDbClient.save(request);
473         } catch (Exception e) {
474             logger.error("Exception when updating record in DB", e);
475             logger.debug("Exception: ", e);
476         }
477     }
478
479
480     public Response buildResponse(int httpResponseCode, String errorCode, InfraActiveRequests inProgress) {
481         return buildResponseWithError(httpResponseCode, errorCode, inProgress, null);
482     }
483
484     public Response buildResponseWithError(int httpResponseCode, String errorCode, InfraActiveRequests inProgress,
485             String errorString) {
486
487
488         // Log the failed request into the MSO Requests database
489
490         return Response.status(httpResponseCode).entity(null).build();
491
492     }
493
494     public Response buildResponseFailedValidation(int httpResponseCode, String exceptionMessage) {
495
496         return Response.status(httpResponseCode).entity(null).build();
497     }
498
499
500     public String getServiceType(VnfInputs vnfInputs) {
501         if (vnfInputs.getServiceType() != null)
502             return vnfInputs.getServiceType();
503         if (vnfInputs.getServiceId() != null)
504             return vnfInputs.getServiceId();
505         return null;
506     }
507
508     public long translateStatus(RequestStatusType status) {
509         switch (status) {
510             case FAILED:
511             case COMPLETE:
512                 return Constants.PROGRESS_REQUEST_COMPLETED;
513             case IN_PROGRESS:
514                 return Constants.PROGRESS_REQUEST_IN_PROGRESS;
515             default:
516                 return 0;
517         }
518     }
519
520     public static String domToStr(Document doc) {
521         if (doc == null) {
522             return null;
523         }
524
525         try {
526             StringWriter sw = new StringWriter();
527             StreamResult sr = new StreamResult(sw);
528             TransformerFactory tf = TransformerFactory.newInstance();
529             tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
530             tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
531             Transformer t = tf.newTransformer();
532             t.setOutputProperty(OutputKeys.STANDALONE, "yes");
533             NodeList nl = doc.getDocumentElement().getChildNodes();
534             DOMSource source = null;
535             for (int x = 0; x < nl.getLength(); x++) {
536                 Node e = nl.item(x);
537                 if (e instanceof Element) {
538                     source = new DOMSource(e);
539                     break;
540                 }
541             }
542             if (source != null) {
543                 t.transform(source, sr);
544
545                 String s = sw.toString();
546                 return s;
547             }
548
549             return null;
550
551         } catch (Exception e) {
552             logger.error("Exception in domToStr", e);
553         }
554         return null;
555     }
556
557     public void addBPMNSpecificInputs(VnfRequest vnfReq, VnfInputs vnfInputs, String personaModelId,
558             String personaModelVersion, Boolean isBaseVfModule, String vnfPersonaModelId,
559             String vnfPersonaModelVersion) {
560         vnfInputs.setPersonaModelId(personaModelId);
561         vnfInputs.setPersonaModelVersion(personaModelVersion);
562         vnfInputs.setIsBaseVfModule(isBaseVfModule);
563         vnfInputs.setVnfPersonaModelId(vnfPersonaModelId);
564         vnfInputs.setVnfPersonaModelVersion(vnfPersonaModelVersion);
565
566         vnfReq.setVnfInputs(vnfInputs);
567
568     }
569
570     private static boolean empty(String s) {
571         return (s == null || s.trim().isEmpty());
572     }
573
574     public String getRequestJSON(ServiceInstancesRequest sir)
575             throws JsonGenerationException, JsonMappingException, IOException {
576         ObjectMapper mapper = new ObjectMapper();
577         mapper.setSerializationInclusion(Include.NON_NULL);
578
579         logger.debug("building sir from object {}", sir);
580         String requestJSON = mapper.writeValueAsString(sir);
581
582         // Perform mapping from VID-style modelInfo fields to ASDC-style modelInfo fields
583
584         logger.debug("REQUEST JSON before mapping: {}", requestJSON);
585         // modelUuid = modelVersionId
586         requestJSON = requestJSON.replaceAll("\"modelVersionId\":", "\"modelUuid\":");
587         // modelCustomizationUuid = modelCustomizationId
588         requestJSON = requestJSON.replaceAll("\"modelCustomizationId\":", "\"modelCustomizationUuid\":");
589         // modelInstanceName = modelCustomizationName
590         requestJSON = requestJSON.replaceAll("\"modelCustomizationName\":", "\"modelInstanceName\":");
591         // modelInvariantUuid = modelInvariantId
592         requestJSON = requestJSON.replaceAll("\"modelInvariantId\":", "\"modelInvariantUuid\":");
593         logger.debug("REQUEST JSON after mapping: {}", requestJSON);
594
595         return requestJSON;
596     }
597
598
599     public boolean getAlacarteFlag(ServiceInstancesRequest sir) {
600         if (sir.getRequestDetails().getRequestParameters() != null
601                 && sir.getRequestDetails().getRequestParameters().getALaCarte() != null)
602             return sir.getRequestDetails().getRequestParameters().getALaCarte();
603
604         return false;
605     }
606
607
608     public String getNetworkType(ServiceInstancesRequest sir, String requestScope) {
609         if (requestScope.equalsIgnoreCase(ModelType.network.name()))
610             return sir.getRequestDetails().getModelInfo().getModelName();
611         else
612             return null;
613     }
614
615
616     public String getServiceInstanceType(ServiceInstancesRequest sir, String requestScope) {
617         if (requestScope.equalsIgnoreCase(ModelType.network.name()))
618             return sir.getRequestDetails().getModelInfo().getModelName();
619         else
620             return null;
621     }
622
623
624     public String getSDCServiceModelVersion(ServiceInstancesRequest sir) {
625         String sdcServiceModelVersion = null;
626         if (sir.getRequestDetails().getRelatedInstanceList() != null)
627             for (RelatedInstanceList relatedInstanceList : sir.getRequestDetails().getRelatedInstanceList()) {
628                 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
629                 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
630                 if (relatedInstanceModelInfo.getModelType().equals(ModelType.service))
631                     sdcServiceModelVersion = relatedInstanceModelInfo.getModelVersion();
632             }
633         return sdcServiceModelVersion;
634     }
635
636
637     public String getVfModuleType(ServiceInstancesRequest sir, String requestScope) {
638
639         String vnfType;
640         String vfModuleType = null;
641         String vfModuleModelName;
642         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
643         RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
644         String serviceModelName = null;
645         String vnfModelName = null;
646         String volumeGroupId = null;
647
648         if (instanceList == null) {
649             return null;
650         }
651         for (RelatedInstanceList relatedInstanceList : instanceList) {
652             RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
653             ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
654
655             if (relatedInstanceModelInfo.getModelType().equals(ModelType.service)) {
656                 serviceModelName = relatedInstanceModelInfo.getModelName();
657             } else if (relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)
658                     && !(ModelType.configuration.name().equalsIgnoreCase(requestScope))) {
659                 vnfModelName = relatedInstanceModelInfo.getModelCustomizationName();
660             } else if (relatedInstanceModelInfo.getModelType().equals(ModelType.volumeGroup)) {
661                 volumeGroupId = relatedInstance.getInstanceId();
662             }
663         }
664         if (requestScope.equalsIgnoreCase(ModelType.vfModule.name())) {
665             vfModuleModelName = modelInfo.getModelName();
666             vnfType = serviceModelName + "/" + vnfModelName;
667             vfModuleType = vnfType + "::" + vfModuleModelName;
668             sir.setVolumeGroupInstanceId(volumeGroupId);
669         }
670
671         return vfModuleType;
672
673     }
674
675     public String getVnfType(ServiceInstancesRequest sir, String requestScope) {
676
677         String vnfType = null;
678         RelatedInstanceList[] instanceList = sir.getRequestDetails().getRelatedInstanceList();
679         String serviceModelName = null;
680         String vnfModelName = null;
681         String volumeGroupId = null;
682
683         if (instanceList == null) {
684             return null;
685         }
686         for (RelatedInstanceList relatedInstanceList : instanceList) {
687             RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
688             ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
689
690             if (relatedInstanceModelInfo.getModelType().equals(ModelType.service)) {
691                 serviceModelName = relatedInstanceModelInfo.getModelName();
692             } else if (relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)
693                     && !(ModelType.configuration.name().equalsIgnoreCase(requestScope))) {
694                 vnfModelName = relatedInstanceModelInfo.getModelCustomizationName();
695             } else if (relatedInstanceModelInfo.getModelType().equals(ModelType.volumeGroup)) {
696                 volumeGroupId = relatedInstance.getInstanceId();
697             }
698         }
699
700         if (requestScope.equalsIgnoreCase(ModelType.volumeGroup.name())) {
701             vnfType = serviceModelName + "/" + vnfModelName;
702         } else if (requestScope.equalsIgnoreCase(ModelType.vfModule.name())) {
703             vnfType = serviceModelName + "/" + vnfModelName;
704             sir.setVolumeGroupInstanceId(volumeGroupId);
705         } else if (requestScope.equalsIgnoreCase(ModelType.vnf.name()))
706             vnfType = serviceModelName + "/" + sir.getRequestDetails().getModelInfo().getModelCustomizationName();
707
708         return vnfType;
709     }
710
711     protected String getTenantNameFromAAI(ServiceInstancesRequest servInsReq) {
712         String tenantName = null;
713         if (servInsReq.getRequestDetails() != null && servInsReq.getRequestDetails().getCloudConfiguration() != null
714                 && servInsReq.getRequestDetails().getCloudConfiguration().getTenantId() != null) {
715             Tenant tenant = aaiDataRet.getTenant(servInsReq.getRequestDetails().getCloudConfiguration().getCloudOwner(),
716                     servInsReq.getRequestDetails().getCloudConfiguration().getLcpCloudRegionId(),
717                     servInsReq.getRequestDetails().getCloudConfiguration().getTenantId());
718             if (tenant != null) {
719                 tenantName = tenant.getTenantName();
720             }
721         }
722         return tenantName;
723     }
724
725     protected String getProductFamilyNameFromAAI(ServiceInstancesRequest servInsReq) {
726         String productFamilyName = null;
727         if (servInsReq.getRequestDetails() != null && servInsReq.getRequestDetails().getRequestInfo() != null
728                 && servInsReq.getRequestDetails().getRequestInfo().getProductFamilyId() != null) {
729             org.onap.aai.domain.yang.Service service =
730                     aaiDataRet.getService(servInsReq.getRequestDetails().getRequestInfo().getProductFamilyId());
731             if (service != null) {
732                 productFamilyName = service.getServiceDescription();
733             }
734         }
735         return productFamilyName;
736     }
737
738 }