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