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