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