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