2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts
25 import org.apache.commons.lang3.*
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.json.JSONObject
30 import org.onap.aai.domain.yang.ServiceInstance
31 import org.onap.aai.domain.yang.ServiceInstances
32 import org.onap.so.bpmn.common.recipe.ResourceInput
33 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
34 import org.onap.so.bpmn.common.scripts.AaiUtil
35 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
36 import org.onap.so.bpmn.common.scripts.ExceptionUtil
37 import org.onap.so.bpmn.common.scripts.MsoUtils
38 import org.onap.so.bpmn.core.json.JsonUtils
39 import org.onap.so.bpmn.core.UrnPropertiesReader
40 import org.onap.so.client.aai.AAIObjectPlurals
41 import org.onap.so.client.aai.AAIResourcesClient
42 import org.onap.so.client.aai.entities.uri.AAIResourceUri
43 import org.onap.so.client.aai.entities.uri.AAIUriFactory
44 import org.slf4j.Logger
45 import org.slf4j.LoggerFactory
47 import static org.apache.commons.lang3.StringUtils.*
50 * This groovy class supports the <class>CreateSDNCCNetworkResource.bpmn</class> process.
51 * flow for SDNC Network Resource Create
53 public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor {
55 private static final Logger logger = LoggerFactory.getLogger( CreateSDNCNetworkResource.class);
56 String Prefix="CRESDNCRES_"
58 ExceptionUtil exceptionUtil = new ExceptionUtil()
60 JsonUtils jsonUtil = new JsonUtils()
62 MsoUtils msoUtils = new MsoUtils()
64 public void preProcessRequest(DelegateExecution execution){
66 logger.info(" ***** Started preProcessRequest *****")
69 //get bpmn inputs from resource request.
70 String requestId = execution.getVariable("mso-request-id")
71 String requestAction = execution.getVariable("requestAction")
72 logger.info("The requestAction is: " + requestAction)
73 String recipeParamsFromRequest = execution.getVariable("recipeParams")
74 logger.info("The recipeParams is: " + recipeParamsFromRequest)
75 String resourceInput = execution.getVariable("resourceInput")
76 logger.info("The resourceInput is: " + resourceInput)
77 //Get ResourceInput Object
78 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
79 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
81 //Deal with recipeParams
82 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
83 String resourceName = resourceInputObj.getResourceInstanceName()
84 //For sdnc requestAction default is "createNetworkInstance"
85 String operationType = "Network"
86 if(!StringUtils.isBlank(recipeParamsFromRequest)){
87 //the operationType from worflow(first node) is second priority.
88 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
90 if(!StringUtils.isBlank(recipeParamsFromWf)){
91 //the operationType from worflow(first node) is highest priority.
92 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
96 //For sdnc, generate svc_action and request_action
97 String sdnc_svcAction = "create"
98 switch (resourceInputObj.getResourceInstanceName()) {
100 case ~/[\w\s\W]*overlay[\w\s\W]*/ :
101 //This will be resolved in R3.
102 sdnc_svcAction ="activate"
103 operationType = "NCINetwork"
106 case ~/[\w\s\W]*underlay[\w\s\W]*/ :
107 //This will be resolved in R3.
108 operationType ="Network"
111 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/ :
112 operationType = "SOTNConnectivity"
113 execution.setVariable("isActivateRequired", "true")
116 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
117 operationType = "SOTNAttachment"
118 execution.setVariable("isActivateRequired", "true")
121 case ~/[\w\s\W]*SiteVF[\w\s\W]*/ :
122 operationType = "Site"
123 execution.setVariable("isActivateRequired", "true")
126 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
127 operationType = "SDWANDevice"
128 execution.setVariable("isActivateRequired", "true")
131 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
132 operationType = "SDWANPort"
133 execution.setVariable("isActivateRequired", "true")
136 case ~/[\w\s\W]*SDWANConnectivity[\w\s\W]*/ :
137 operationType = "SDWANConnectivity"
138 execution.setVariable("isActivateRequired", "true")
141 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
142 operationType = "SDWANAttachment"
143 execution.setVariable("isActivateRequired", "true")
146 case ~/[\w\s\W]*wanconnection[\w\s\W]*/ :
147 execution.setVariable("isActivateRequired", "true")
154 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType +"Instance"
155 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
156 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
157 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
158 execution.setVariable("mso-request-id", requestId)
159 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
160 } catch (BpmnError e) {
162 } catch (Exception ex){
163 msg = "Exception in preProcessRequest " + ex.getMessage()
165 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
169 String customizeResourceParam(String networkInputParametersJson) {
170 List<Map<String, Object>> paramList = new ArrayList();
171 JSONObject jsonObject = new JSONObject(networkInputParametersJson);
172 Iterator iterator = jsonObject.keys();
173 while (iterator.hasNext()) {
174 String key = iterator.next();
175 HashMap<String, String> hashMap = new HashMap();
176 hashMap.put("name", key);
177 hashMap.put("value", jsonObject.get(key))
178 paramList.add(hashMap)
180 Map<String, List<Map<String, Object>>> paramMap = new HashMap();
181 paramMap.put("param", paramList);
183 return new JSONObject(paramMap).toString();
187 * This method updates the resource input by collecting required info from AAI
190 public void updateResourceInput(DelegateExecution execution) {
191 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
192 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
195 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/:
197 def resourceInput = resourceInputObj.getResourceParameters()
198 String incomingRequest = resourceInputObj.getRequestsInputs()
199 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
200 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
201 JSONObject inputParameters = new JSONObject(requestInputs)
202 if(inputParameters.has("local-access-provider-id")) {
203 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.access-provider-id", inputParameters.get("local-access-provider-id"))
204 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-client-id", inputParameters.get("local-access-client-id"))
205 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-topology-id", inputParameters.get("local-access-topology-id"))
206 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-ltp-id", inputParameters.get("local-access-ltp-id"))
207 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-node-id", inputParameters.get("local-access-node-id"))
208 resourceInputObj.setResourceParameters(uResourceInput)
209 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
214 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
215 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
216 // fill attachment TP in networkInputParamJson
217 String customer = resourceInputObj.getGlobalSubscriberId()
218 String serviceType = resourceInputObj.getServiceType()
220 def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName"
221 String parentServiceName = jsonUtil.getJsonValueForKey(resourceInputObj.getRequestsInputs(), vpnName)
223 AAIResourcesClient client = new AAIResourcesClient()
224 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SERVICE_INSTANCE, customer, serviceType).queryParam("service-instance-name", parentServiceName)
225 ServiceInstances sis = client.get(uri).asBean(ServiceInstances.class).get()
226 ServiceInstance si = sis.getServiceInstance().get(0)
228 def parentServiceInstanceId = si.getServiceInstanceId()
229 execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
238 * Pre Process the BPMN Flow Request
240 * generate the nsOperationKey
241 * generate the nsParameters
243 public void prepareSDNCRequest (DelegateExecution execution) {
244 logger.info(" ***** Started prepareSDNCRequest *****")
248 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
249 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
250 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
251 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
253 String parentServiceInstanceId = execution.getVariable("parentServiceInstanceId")
254 String hdrRequestId = execution.getVariable("mso-request-id")
255 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
256 String source = execution.getVariable("source")
257 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
258 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
259 String serviceType = resourceInputObj.getServiceType()
260 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
261 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
262 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
263 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
264 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
265 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
266 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
267 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
268 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
269 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
270 String resourceInputPrameters = resourceInputObj.getResourceParameters()
271 String networkInputParametersJson = jsonUtil.getJsonValue(resourceInputPrameters, "requestInputs")
272 //here convert json string to xml string
273 String netowrkInputParameters = XML.toString(new JSONObject(customizeResourceParam(networkInputParametersJson)))
274 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
275 String sdncTopologyCreateRequest = ""
278 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
279 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
280 case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
281 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
282 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
283 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
284 <sdncadapter:RequestHeader>
285 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
286 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
287 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
288 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
289 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
290 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
291 </sdncadapter:RequestHeader>
292 <sdncadapterworkflow:SDNCRequestData>
293 <request-information>
294 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
295 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
296 <source>${msoUtils.xmlEscape(source)}</source>
297 <notification-url></notification-url>
298 <order-number></order-number>
299 <order-version></order-version>
300 </request-information>
301 <service-information>
302 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
303 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
304 <onap-model-information>
305 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
306 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
307 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
308 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
309 </onap-model-information>
310 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
311 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
312 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
313 </service-information>
316 <vnf-type></vnf-type>
317 <onap-model-information>
318 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
319 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
320 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
321 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
322 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
323 </onap-model-information>
326 <vnf-input-parameters>
327 $netowrkInputParameters
328 </vnf-input-parameters>
329 <request-version></request-version>
330 <vnf-name></vnf-name>
334 </sdncadapterworkflow:SDNCRequestData>
335 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
338 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
339 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
340 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
341 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
342 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
343 <sdncadapter:RequestHeader>
344 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
345 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
346 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
347 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
348 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
349 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
350 </sdncadapter:RequestHeader>
351 <sdncadapterworkflow:SDNCRequestData>
352 <request-information>
353 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
354 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
355 <source>${msoUtils.xmlEscape(source)}</source>
356 <notification-url></notification-url>
357 <order-number></order-number>
358 <order-version></order-version>
359 </request-information>
360 <service-information>
361 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
362 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
363 <onap-model-information>
364 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
365 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
366 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
367 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
368 </onap-model-information>
369 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
370 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
371 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
372 </service-information>
373 <allotted-resource-information>
374 <!-- TODO: to be filled as per the request input -->
375 <allotted-resource-id></allotted-resource-id>
376 <allotted-resource-type></allotted-resource-type>
377 <parent-service-instance-id>$parentServiceInstanceId</parent-service-instance-id>
378 <onap-model-information>
379 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
380 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
381 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
382 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
383 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
384 </onap-model-information>
385 </allotted-resource-information>
386 <connection-attachment-request-input>
387 $netowrkInputParameters
388 </connection-attachment-request-input>
389 </sdncadapterworkflow:SDNCRequestData>
390 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
393 // for SDWANConnectivity and SOTNConnectivity:
395 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
396 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
397 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
398 <sdncadapter:RequestHeader>
399 <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
400 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
401 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
402 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
403 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
404 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
405 </sdncadapter:RequestHeader>
406 <sdncadapterworkflow:SDNCRequestData>
407 <request-information>
408 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
409 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
410 <source>${msoUtils.xmlEscape(source)}</source>
411 <notification-url></notification-url>
412 <order-number></order-number>
413 <order-version></order-version>
414 </request-information>
415 <service-information>
416 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
417 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
418 <onap-model-information>
419 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
420 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
421 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
422 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
423 </onap-model-information>
424 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
425 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
426 </service-information>
427 <network-information>
428 <onap-model-information>
429 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
430 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
431 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
432 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
433 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
434 </onap-model-information>
435 </network-information>
436 <network-request-input>
437 <network-input-parameters>$netowrkInputParameters</network-input-parameters>
438 </network-request-input>
439 </sdncadapterworkflow:SDNCRequestData>
440 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
443 String sndcTopologyCreateRequesAsString = utils.formatXml(sdncTopologyCreateRequest)
444 execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyCreateRequesAsString)
445 logger.debug("sdncAdapterWorkflowRequest - " + "\n" + sndcTopologyCreateRequesAsString)
447 } catch (Exception ex) {
448 String exceptionMessage = " Bpmn error encountered in CreateSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
449 logger.debug(exceptionMessage)
450 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
453 logger.info(" ***** Exit prepareSDNCRequest *****")
456 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
457 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
458 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
459 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
462 public void prepareUpdateBeforeCreateSDNCResource(DelegateExecution execution) {
463 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
464 String operType = resourceInputObj.getOperationType()
465 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
466 String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
467 String operationId = resourceInputObj.getOperationId()
468 String progress = "20"
469 String status = "processing"
470 String statusDescription = "SDCN resource creation invoked"
472 execution.getVariable("operationId")
475 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
476 xmlns:ns="http://org.onap.so/requestsdb">
479 <ns:updateResourceOperationStatus>
480 <operType>${msoUtils.xmlEscape(operType)}</operType>
481 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
482 <progress>${msoUtils.xmlEscape(progress)}</progress>
483 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
484 <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
485 <status>${msoUtils.xmlEscape(status)}</status>
486 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
487 </ns:updateResourceOperationStatus>
489 </soapenv:Envelope>""";
491 setProgressUpdateVariables(execution, body)
495 public void prepareUpdateAfterCreateSDNCResource(execution) {
496 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
497 String operType = resourceInputObj.getOperationType()
498 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
499 String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
500 String operationId = resourceInputObj.getOperationId()
501 String progress = "100"
502 String status = "finished"
503 String statusDescription = "SDCN resource creation and activation completed"
505 execution.getVariable("operationId")
508 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
509 xmlns:ns="http://org.onap.so/requestsdb">
512 <ns:updateResourceOperationStatus>
513 <operType>${msoUtils.xmlEscape(operType)}</operType>
514 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
515 <progress>${msoUtils.xmlEscape(progress)}</progress>
516 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
517 <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
518 <status>${msoUtils.xmlEscape(status)}</status>
519 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
520 </ns:updateResourceOperationStatus>
522 </soapenv:Envelope>""";
524 setProgressUpdateVariables(execution, body)
527 public void afterCreateSDNCCall(DelegateExecution execution){
528 logger.info(" ***** Started prepareSDNCRequest *****")
529 String responseCode = execution.getVariable(Prefix + "sdncCreateReturnCode")
530 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
532 def isActivateRequried = execution.getVariable("isActivateRequired")
533 if (StringUtils.equalsIgnoreCase(isActivateRequried, "true")) {
534 def instnaceId = getInstnaceId(execution)
535 execution.setVariable("networkInstanceId", instnaceId)
538 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
539 logger.info(" ***** Exit prepareSDNCRequest *****")
542 private def getInstnaceId(DelegateExecution execution) {
543 def response = new XmlSlurper().parseText(execution.getVariable("CRENWKI_createSDNCResponse"))
545 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
546 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
550 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
551 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
552 case ~/[\w\s\W]*Site[\w\s\W]*/:
553 val = response."response-data"."RequestData"."output"."vnf-response-information"."instance-id"
556 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
557 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/:
558 val = response."response-data"."RequestData"."output"."connection-attachment-response-information"."instance-id"
561 // for SDWANConnectivity and SOTNConnectivity and default:
563 val = response."response-data"."RequestData"."output"."network-response-information"."instance-id"
567 return val.toString()
570 public void sendSyncResponse (DelegateExecution execution) {
571 logger.debug(" *** sendSyncResponse *** ")
574 String operationStatus = "finished"
575 // RESTResponse for main flow
576 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
577 logger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
578 sendWorkflowResponse(execution, 202, resourceOperationResp)
579 execution.setVariable("sentSyncResponse", true)
581 } catch (Exception ex) {
582 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
584 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
586 logger.debug(" ***** Exit sendSyncResponse *****")