Merge "Add userParams as inputs"
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / DoActivateCoreNSSI.groovy
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2020  Tech Mahindra
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts
22
23 import javax.ws.rs.NotFoundException
24 import javax.ws.rs.core.Response
25 import org.camunda.bpm.engine.delegate.BpmnError
26 import org.camunda.bpm.engine.delegate.DelegateExecution
27 import org.onap.aai.domain.yang.GenericVnf
28 import org.onap.aai.domain.yang.RelatedToProperty
29 import org.onap.aai.domain.yang.Relationship
30 import org.onap.aai.domain.yang.RelationshipData
31 import org.onap.aai.domain.yang.ServiceInstance
32 import org.onap.aaiclient.client.aai.AAIObjectName
33 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
34 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
35 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
36 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
37 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
38 import org.onap.logging.filter.base.ONAPComponents
39 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
40 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
41 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
42 import org.onap.so.bpmn.common.scripts.ExceptionUtil
43 import org.onap.so.bpmn.common.scripts.RequestDBUtil
44 import org.onap.so.bpmn.core.UrnPropertiesReader
45 import org.onap.so.bpmn.core.json.JsonUtils
46 import org.onap.so.client.HttpClient
47 import org.onap.so.db.request.beans.ResourceOperationStatus
48 import org.onap.so.serviceinstancebeans.CloudConfiguration
49 import org.onap.so.serviceinstancebeans.LineOfBusiness
50 import org.onap.so.serviceinstancebeans.ModelInfo
51 import org.onap.so.serviceinstancebeans.ModelType
52 import org.onap.so.serviceinstancebeans.OwningEntity
53 import org.onap.so.serviceinstancebeans.Platform
54 import org.onap.so.serviceinstancebeans.Project
55 import org.onap.so.serviceinstancebeans.RequestDetails
56 import org.onap.so.serviceinstancebeans.RequestInfo
57 import org.onap.so.serviceinstancebeans.RequestParameters
58 import org.onap.so.serviceinstancebeans.SubscriberInfo
59 import org.slf4j.Logger
60 import org.slf4j.LoggerFactory
61 import com.fasterxml.jackson.databind.ObjectMapper
62
63 class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
64     String Prefix="DACTCNSSI_"
65     private static final Logger logger = LoggerFactory.getLogger(DoActivateCoreNSSI.class);
66     CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
67     private RequestDBUtil requestDBUtil = new RequestDBUtil()
68     ExceptionUtil exceptionUtil = new ExceptionUtil()
69     ObjectMapper mapper = new ObjectMapper();
70
71     JsonUtils jsonUtil = new JsonUtils()
72
73     private final Long TIMEOUT = 60 * 60 * 1000
74
75     @Override
76     public void preProcessRequest(DelegateExecution execution) {
77         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: preProcessRequest ****")
78
79         String operationType = execution.getVariable("operationType")
80         String oStatus= ""
81
82         if(operationType.equals("activateInstance")) {
83             oStatus ="activated"
84         } else {
85             oStatus ="deactivated"
86         }
87
88         execution.setVariable("oStatus", oStatus)
89         String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "snssaiList")
90
91         logger.debug("sNssaiListAsString "+sNssaiListAsString)
92
93         List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
94
95         logger.debug("sNssaiList "+sNssaiList)
96
97
98         String sNssai = sNssaiList.get(0)
99         execution.setVariable("sNssai", sNssai)
100
101         logger.debug("sNssai: "+sNssai)
102
103         String serviceType = execution.getVariable("subscriptionServiceType")
104         execution.setVariable("serviceType", serviceType)
105         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: preProcessRequest ****")
106     }
107
108     public void getNetworkInstanceWithSPInstanceAssociatedWithNssiId(DelegateExecution execution) {
109         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
110         //NSSI Id as service Instance Id to get from Request
111         String serviceInstanceId = execution.getVariable("serviceInstanceID")
112         String errorMsg = "query Network Service Instance from AAI failed"
113         AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
114         Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
115         String networkServiceInstanceName = ""
116         String networkServiceInstanceId =""
117         if(nsi.isPresent()) {
118             List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
119             List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
120
121             for (Relationship relationship : relationshipList) {
122                 String relatedTo = relationship.getRelatedTo()
123                 if (relatedTo == "service-instance") {
124                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
125                     List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
126                     for (RelationshipData relationshipData : relationshipDataList) {
127                         if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
128                             execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
129                         }
130                     }
131                     for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
132                         if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
133                             execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
134                         }
135                     }
136                 }
137
138                 //If related to is allotted-Resource
139                 if (relatedTo == "allotted-resource") {
140                     //get slice Profile Instance Id from allotted resource in list by nssi
141                     List<String> sliceProfileInstanceIdList = new ArrayList<>()
142                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
143                     for (RelationshipData relationshipData : relationshipDataList) {
144                         if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
145                             sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
146                         }
147                     }
148                     for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
149                         String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
150
151                         //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
152                         AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
153                         Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
154                         if (sliceProfileServiceInstance.isPresent()) {
155                             String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
156                             String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
157                             if(sNssai.equals(execution.getVariable("sNssai"))) {
158                                 orchestrationStatus = execution.getVariable("oStatus")
159                                 //Slice Profile Service Instance to be updated in AAI
160                                 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
161                             }
162
163                             Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
164                             spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
165                             spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
166                             spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
167                         }
168                     }
169                 }
170             }
171             execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
172         }
173         logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
174         //Get ServiceInstance Relationships
175         getServiceInstanceRelationships(execution)
176         //Get Vnf Relationships
177         getVnfRelationships(execution)
178         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
179     }
180
181
182     private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
183         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
184         List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
185         Map<String, Object> nSsai= new LinkedHashMap<>()
186         nSsai.put("sNssai", instanceParamsvalues)
187         String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
188         //SupportedNssai
189         Map<String, Object> supportedNssai= new LinkedHashMap<>()
190         supportedNssai.put("supportedNssai", supportedsNssaiJson)
191         logger.debug("****  supportedsNssaiJson**** "+supportedNssai)
192         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
193         return supportedNssai
194     }
195
196     private void getServiceInstanceRelationships(DelegateExecution execution) {
197         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
198         String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
199         logger.debug("**** serviceInstanceId :: getServiceInstanceRelationships  :: "+serviceInstanceId)
200         String errorMsg = "query Network Service Instance from AAI failed"
201         AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
202         Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
203
204         String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
205         execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
206         if(si.isPresent()) {
207             List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
208             for (Relationship relationship : relationshipList) {
209                 String relatedTo = relationship.getRelatedTo()
210                 if (relatedTo == "owning-entity") {
211                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
212                     for (RelationshipData relationshipData : relationshipDataList) {
213                         if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
214                             execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
215                         }
216                     }
217                 } else if (relatedTo == "generic-vnf") {
218                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
219                     List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
220
221                     //Get VnfId
222                     for (RelationshipData relationshipData : relationshipDataList) {
223                         if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
224                             execution.setVariable("vnfId", relationshipData.getRelationshipValue())
225                             String vnfId = relationshipData.getRelationshipValue()
226                             logger.debug("vnfId   :"+vnfId)
227                         }
228                     }
229                 } else if (relatedTo == "project") {
230                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
231                     for (RelationshipData relationshipData : relationshipDataList) {
232                         if (relationshipData.getRelationshipKey() == "project.project-name") {
233                             execution.setVariable("projectName", relationshipData.getRelationshipValue())
234                         }
235                     }
236                 }
237             }
238             logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
239         }
240     }
241
242     private void getVnfRelationships(DelegateExecution execution) {
243
244         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getVnfRelationships ****")
245         String msg = "query Generic Vnf from AAI failed"
246         try {
247             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
248             if (!getAAIClient().exists(uri)) {
249                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
250             }
251             AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
252             Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
253             if(vnf.isPresent()) {
254                 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
255                 for (Relationship relationship : relationshipList) {
256                     String relatedTo = relationship.getRelatedTo()
257                     if (relatedTo == "tenant") {
258                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
259                         for (RelationshipData relationshipData : relationshipDataList) {
260                             if (relationshipData.getRelationshipKey() == "tenant.tenant-id") {
261                                 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
262                             }
263                         }
264                     } else if (relatedTo == "cloud-region") {
265                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
266
267                         for (RelationshipData relationshipData : relationshipDataList) {
268                             if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
269                                 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
270                             } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
271                                 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
272                             }
273                         }
274                     } else if (relatedTo == "platform") {
275                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
276                         for (RelationshipData relationshipData : relationshipDataList) {
277                             if (relationshipData.getRelationshipKey() == "platform.platform-name") {
278                                 execution.setVariable("platformName", relationshipData.getRelationshipValue())
279                             }
280                         }
281                     } else if (relatedTo == "line-of-business") {
282                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
283                         for (RelationshipData relationshipData : relationshipDataList) {
284                             if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
285                                 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
286                             }
287                         }
288                     }
289                 }
290             }
291         } catch(BpmnError e){
292             throw e
293         } catch (Exception ex){
294             msg = "Exception in getVnfRelationships " + ex.getMessage()
295             logger.debug(msg)
296             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
297         }
298         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getVnfRelationships ****")
299     }
300
301
302     /**
303      * query AAI
304      * @param execution
305      * @param aaiObjectType
306      * @param instanceId
307      * @return AAIResultWrapper
308      */
309     private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
310         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: queryAAI ****")
311
312         String globalSubscriberId = execution.getVariable("globalSubscriberId")
313         String serviceType = execution.getVariable("serviceType")
314
315         AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
316         if (!getAAIClient().exists(resourceUri)) {
317             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
318         }
319         AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
320
321         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: queryAAI ****")
322         return wrapper
323     }
324
325     public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
326         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
327
328         String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
329
330         try{
331             CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
332             String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
333             logger.debug("***** JSON IS: "+json)
334
335             String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
336             String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
337
338
339             execution.setVariable("serviceVnfs",serviceVnfs)
340             execution.setVariable("serviceModelInfo", serviceModelInfo)
341             logger.debug(Prefix +" ***** serviceVnfs is: "+ serviceVnfs)
342         }catch(BpmnError e){
343             throw e
344         } catch (Exception ex){
345             String msg = "Exception in getServiceVNFAndVFsFromCatalogDB " + ex.getMessage()
346             logger.debug(msg)
347             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
348         }
349         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
350     }
351
352     public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
353         logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
354         String json = execution.getVariable("serviceVnfs")
355         logger.debug(">>>> json "+json)
356         List<Object> vnfList = mapper.readValue(json, List.class);
357         logger.debug("vnfList:  "+vnfList)
358         Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
359         ModelInfo serviceModelInfo = new ModelInfo()
360         serviceModelInfo.setModelType(ModelType.service)
361         serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
362         serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
363         serviceModelInfo.setModelName(serviceMap.get("modelName"))
364         serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
365
366         logger.debug("serviceModelInfo:  "+serviceModelInfo)
367         //List of Vnfs
368         List<Object> vnfModelInfoList = new ArrayList<>()
369
370         Map vnfMap = vnfList.get(0)
371         ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
372         logger.debug("vnfModelInfo "+vnfModelInfo)
373
374         //List of VFModules
375         List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
376         logger.debug("vfModuleList "+vfModuleList)
377
378         //List of VfModules
379         List<ModelInfo> vfModelInfoList = new ArrayList<>()
380
381         //Traverse VFModules List and add in vfModelInfoList
382         for (vfModule in vfModuleList) {
383             ModelInfo vfModelInfo = vfModule.get("modelInfo")
384             logger.debug("vfModelInfo "+vfModelInfo)
385             vfModelInfoList.add(vfModelInfo)
386         }
387
388         //RequestInfo
389         RequestInfo requestInfo = new RequestInfo()
390
391         //Dummy Product FamilyId
392         requestInfo.setProductFamilyId("test1234")
393         requestInfo.setSource("VID")
394         requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
395         requestInfo.setSuppressRollback(false)
396         requestInfo.setRequestorId("NBI")
397
398         //Service Level InstanceParams
399         List<Map<String, Object>> serviceParams = new ArrayList<>()
400         Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
401         serviceParams.add(serviceParamsValues)
402
403         //Cloud Configuration
404         CloudConfiguration cloudConfiguration = new CloudConfiguration()
405         cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
406         cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
407         cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
408
409         //VFModules List
410         List<Map<String, Object>> vfModules = new ArrayList<>()
411         for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
412             //Individual VFModule List
413             Map<String, Object> vfModuleValues = new LinkedHashMap<>()
414             vfModuleValues.put("modelInfo", vfModuleModelInfo)
415             vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
416
417             //VFModule InstanceParams should be empty or this field should not be there?
418             List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
419             vfModuleValues.put("instanceParams", vfModuleInstanceParams)
420         }
421
422         //Vnf intsanceParams
423         ObjectMapper objectMapper = new ObjectMapper();
424         Map<String, Object> sliceProfile = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class);
425
426         List vnfInstanceParamsList = new ArrayList<>()
427         String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
428         vnfInstanceParamsList.add(supportedsNssaiJson)
429
430         Platform platform = new Platform()
431         platform.setPlatformName(execution.getVariable("platform"))
432
433         LineOfBusiness lineOfbusiness = new LineOfBusiness()
434         lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
435
436         //Vnf Values
437         Map<String, Object> vnfValues = new LinkedHashMap<>()
438         vnfValues.put("lineOfBusiness", lineOfbusiness)
439         vnfValues.put("platform", platform)
440         vnfValues.put("productFamilyId", "test1234")
441         vnfValues.put("cloudConfiguration", cloudConfiguration)
442         vnfValues.put("vfModules", vfModules)
443         vnfValues.put("modelInfo", vnfModelInfo)
444         vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
445         vnfValues.put("instanceParams",vnfInstanceParamsList)
446
447         vnfModelInfoList.add(vnfValues)
448         //Service Level Resources
449         Map<String, Object> serviceResources = new LinkedHashMap<>()
450         serviceResources.put("vnfs", vnfModelInfoList)
451
452         //Service Values
453         Map<String, Object> serviceValues = new LinkedHashMap<>()
454         serviceValues.put("modelInfo", serviceModelInfo)
455         serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
456         serviceValues.put("resources", serviceResources)
457         serviceValues.put("instanceParams", serviceParams)
458
459         //UserParams Values
460         Map<String, Object> userParamsValues = new LinkedHashMap<>()
461
462         Map<String, Object> homingSolution = new LinkedHashMap<>()
463         homingSolution.put("Homing_Solution", "none")
464
465         userParamsValues.put("service", serviceValues)
466
467         //UserParams
468         List<Map<String, Object>> userParams = new ArrayList<>()
469         userParams.add(homingSolution)
470         userParams.add(userParamsValues)
471
472         //Request Parameters
473         RequestParameters requestParameters = new RequestParameters()
474         requestParameters.setaLaCarte(false)
475         requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
476         requestParameters.setUserParams(userParams)
477
478         //SubscriberInfo
479         SubscriberInfo subscriberInfo = new SubscriberInfo()
480         subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
481
482         //Owning Entity
483         OwningEntity owningEntity = new OwningEntity()
484         owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
485
486         //Project
487         Project project = new Project()
488         project.setProjectName(execution.getVariable("projectName"))
489
490         RequestDetails requestDetails = new RequestDetails()
491         requestDetails.setModelInfo(serviceModelInfo)
492         requestDetails.setSubscriberInfo(subscriberInfo)
493         requestDetails.setRequestInfo(requestInfo)
494         requestDetails.setRequestParameters(requestParameters)
495         requestDetails.setCloudConfiguration(cloudConfiguration)
496         requestDetails.setOwningEntity(owningEntity)
497         requestDetails.setProject(project)
498
499         Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
500         requestDetailsMap.put("requestDetails", requestDetails)
501         String requestPayload = objectMapper.writeValueAsString(requestDetailsMap)
502
503         logger.debug("requestDetails "+requestPayload)
504         execution.setVariable("requestPayload", requestPayload)
505
506         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
507     }
508
509     public void sendPutRequestToSOMacro(DelegateExecution execution) {
510
511         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
512         try {
513             String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
514             String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
515             String requestBody = execution.getVariable("requestPayload")
516             String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
517             String basicAuth =  UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
518             String basicAuthValue = utils.encrypt(basicAuth, msoKey)
519             String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
520
521             HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
522             httpClient.addAdditionalHeader("Authorization", encodeString)
523             httpClient.addAdditionalHeader("Accept", "application/json")
524             Response httpResponse = httpClient.put(requestBody)
525             handleSOResponse(httpResponse, execution)
526
527         } catch (BpmnError e) {
528             throw e
529         } catch (any) {
530             String msg = "Exception in DoActivateCoreNSSSI " + any.getCause()
531             logger.error(msg)
532             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
533         }
534         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: sendPostRequestToSOMacro ****")
535     }
536
537     /**
538      * Handle SO Response for PUT and prepare update operation status
539      * @param execution
540      */
541     private void handleSOResponse(Response httpResponse, DelegateExecution execution){
542         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: handleSOResponse ****")
543
544         int soResponseCode = httpResponse.getStatus()
545         logger.debug("soResponseCode : "+soResponseCode)
546
547         if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
548             String soResponse = httpResponse.readEntity(String.class)
549             String operationId = execution.getVariable("operationId")
550             def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
551             execution.setVariable("macroOperationId", macroOperationId)
552             execution.setVariable("isSOTimeOut", "no")
553             execution.setVariable("isSOResponseSucceed","yes")
554         }
555         else
556         {
557             String serviceName = execution.getVariable("serviceInstanceName")
558             execution.setVariable("isSOResponseSucceed","no")
559             prepareFailedOperationStatusUpdate(execution)
560         }
561
562         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
563     }
564
565     /**
566      * prepare to call sub process CheckProcessStatus
567      * @param execution
568      */
569     void prepareCallCheckProcessStatus(DelegateExecution execution){
570         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
571         def successConditions = new ArrayList<>()
572         successConditions.add("finished")
573         execution.setVariable("successConditions", successConditions)
574         def errorConditions = new ArrayList<>()
575         errorConditions.add("error")
576         execution.setVariable("errorConditions", errorConditions)
577         execution.setVariable("processServiceType", "Network service")
578         execution.setVariable("subOperationType", "PUT")
579         execution.setVariable("initProgress", 20)
580         execution.setVariable("endProgress",90)
581         execution.setVariable("timeOut", TIMEOUT)
582         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
583     }
584
585     void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
586
587         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
588
589         String nssiOperationId = execution.getVariable("nssiOperationId")
590         execution.setVariable("operationId", nssiOperationId)
591         //Prepare Update Status for PUT failure and success
592         if(execution.getVariable("isTimeOut").equals("YES")) {
593             logger.debug("TIMEOUT - SO PUT Failure")
594             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
595         }
596         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
597     }
598
599     void updateSliceProfileOrchestrationStatus(DelegateExecution execution) {
600
601         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
602
603         String globalCustId = execution.getVariable("globalSubscriberId")
604         String serviceType = execution.getVariable("serviceType")
605         String oStatus = execution.getVariable("oStatus")
606
607         ServiceInstance si = execution.getVariable("sliceProfileServiceInstance")
608         String sliceProfileInstanceId = si.getServiceInstanceId()
609         si.setOrchestrationStatus(oStatus)
610
611         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstanceId))
612         try {
613
614             Response response = getAAIClient().update(uri, si)
615
616             if(response.getStatus()!=200 || response.getStatus()!=201 || response.getStatus()!=202) {
617                 exceptionUtil.buildAndThrowWorkflowException(execution, response.getStatus(), "AAI failed to update sliceProlie service Instance orchestration status")
618             } else {
619                 setResourceOperationStatus(execution)
620             }
621         } catch (Exception e) {
622             logger.info("Update OrchestrationStatus in AAI failed")
623             String msg = "Update OrchestrationStatus in AAI failed, " + e.getMessage()
624             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
625         }
626
627         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
628     }
629
630     /**
631      * prepare ResourceOperation status
632      * @param execution
633      * @param operationType
634      */
635     private void setResourceOperationStatus(DelegateExecution execution) {
636
637         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: setResourceOperationStatus ****")
638
639         String serviceId = execution.getVariable("nssiId")
640         String jobId = execution.getVariable("jobId")
641         String nsiId = execution.getVariable("nsiId")
642         String operationType = execution.getVariable("operationType")
643         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
644         resourceOperationStatus.setServiceId(serviceId)
645         resourceOperationStatus.setOperationId(jobId)
646         resourceOperationStatus.setResourceTemplateUUID(nsiId)
647         resourceOperationStatus.setOperType(operationType)
648         resourceOperationStatus.setStatus("finished")
649         resourceOperationStatus.setProgress("100")
650         resourceOperationStatus.setStatusDescription("Core Activation Successful")
651         requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
652
653         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: setResourceOperationStatus ****")
654     }
655
656     void prepareFailedOperationStatusUpdate(DelegateExecution execution){
657         logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
658
659         String serviceId = execution.getVariable("nssiId")
660         String jobId = execution.getVariable("jobId")
661         String nsiId = execution.getVariable("nsiId")
662         String operationType = execution.getVariable("operationType")
663
664         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
665         resourceOperationStatus.setServiceId(serviceId)
666         resourceOperationStatus.setOperationId(jobId)
667         resourceOperationStatus.setResourceTemplateUUID(nsiId)
668         resourceOperationStatus.setOperType(operationType)
669         resourceOperationStatus.setProgress(0)
670         resourceOperationStatus.setStatus("failed")
671         resourceOperationStatus.setStatusDescription("Core NSSI Activation Failed")
672         requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
673
674         logger.debug(Prefix + " **** Exit DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
675     }
676
677 }