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