2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import org.apache.commons.lang3.*
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.json.JSONObject
28 import org.onap.aai.domain.yang.ServiceInstance
29 import org.onap.aai.domain.yang.ServiceInstances
30 import org.onap.so.bpmn.common.recipe.ResourceInput
31 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
32 import org.onap.so.bpmn.common.scripts.AaiUtil
33 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
34 import org.onap.so.bpmn.common.scripts.ExceptionUtil
35 import org.onap.so.bpmn.common.scripts.MsoUtils
36 import org.onap.so.bpmn.core.json.JsonUtils
37 import org.onap.so.bpmn.core.UrnPropertiesReader
38 import org.onap.so.client.aai.AAIObjectPlurals
39 import org.onap.so.client.aai.AAIResourcesClient
40 import org.onap.so.client.aai.entities.uri.AAIResourceUri
41 import org.onap.so.client.aai.entities.uri.AAIUriFactory
42 import org.onap.so.logger.MsoLogger
44 import static org.apache.commons.lang3.StringUtils.*
47 * This groovy class supports the <class>CreateSDNCCNetworkResource.bpmn</class> process.
48 * flow for SDNC Network Resource Create
50 public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor {
52 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CreateSDNCNetworkResource.class);
53 String Prefix="CRESDNCRES_"
55 ExceptionUtil exceptionUtil = new ExceptionUtil()
57 JsonUtils jsonUtil = new JsonUtils()
59 MsoUtils msoUtils = new MsoUtils()
61 public void preProcessRequest(DelegateExecution execution){
63 msoLogger.info(" ***** Started preProcessRequest *****")
66 //get bpmn inputs from resource request.
67 String requestId = execution.getVariable("mso-request-id")
68 String requestAction = execution.getVariable("requestAction")
69 msoLogger.info("The requestAction is: " + requestAction)
70 String recipeParamsFromRequest = execution.getVariable("recipeParams")
71 msoLogger.info("The recipeParams is: " + recipeParamsFromRequest)
72 String resourceInput = execution.getVariable("resourceInput")
73 msoLogger.info("The resourceInput is: " + resourceInput)
74 //Get ResourceInput Object
75 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
76 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
78 //Deal with recipeParams
79 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
80 String resourceName = resourceInputObj.getResourceInstanceName()
81 //For sdnc requestAction default is "createNetworkInstance"
82 String operationType = "Network"
83 if(!StringUtils.isBlank(recipeParamsFromRequest)){
84 //the operationType from worflow(first node) is second priority.
85 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
87 if(!StringUtils.isBlank(recipeParamsFromWf)){
88 //the operationType from worflow(first node) is highest priority.
89 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
93 //For sdnc, generate svc_action and request_action
94 String sdnc_svcAction = "create"
95 switch (resourceInputObj.getResourceInstanceName()) {
97 case ~/[\w\s\W]*overlay[\w\s\W]*/ :
98 //This will be resolved in R3.
99 sdnc_svcAction ="activate"
100 operationType = "NCINetwork"
103 case ~/[\w\s\W]*underlay[\w\s\W]*/ :
104 //This will be resolved in R3.
105 operationType ="Network"
108 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/ :
109 operationType = "SOTNConnectivity"
110 execution.setVariable("isActivateRequired", "true")
113 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
114 operationType = "SOTNAttachment"
115 execution.setVariable("isActivateRequired", "true")
118 case ~/[\w\s\W]*SiteVF[\w\s\W]*/ :
119 operationType = "Site"
120 execution.setVariable("isActivateRequired", "true")
123 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
124 operationType = "SDWANDevice"
125 execution.setVariable("isActivateRequired", "true")
128 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
129 operationType = "SDWANPort"
130 execution.setVariable("isActivateRequired", "true")
133 case ~/[\w\s\W]*SDWANConnectivity[\w\s\W]*/ :
134 operationType = "SDWANConnectivity"
135 execution.setVariable("isActivateRequired", "true")
138 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
139 operationType = "SDWANAttachment"
140 execution.setVariable("isActivateRequired", "true")
143 case ~/[\w\s\W]*wanconnection[\w\s\W]*/ :
144 execution.setVariable("isActivateRequired", "true")
151 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType +"Instance"
152 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
153 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
154 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
155 execution.setVariable("mso-request-id", requestId)
156 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
157 } catch (BpmnError e) {
159 } catch (Exception ex){
160 msg = "Exception in preProcessRequest " + ex.getMessage()
162 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
166 String customizeResourceParam(String networkInputParametersJson) {
167 List<Map<String, Object>> paramList = new ArrayList();
168 JSONObject jsonObject = new JSONObject(networkInputParametersJson);
169 Iterator iterator = jsonObject.keys();
170 while (iterator.hasNext()) {
171 String key = iterator.next();
172 HashMap<String, String> hashMap = new HashMap();
173 hashMap.put("name", key);
174 hashMap.put("value", jsonObject.get(key))
175 paramList.add(hashMap)
177 Map<String, List<Map<String, Object>>> paramMap = new HashMap();
178 paramMap.put("param", paramList);
180 return new JSONObject(paramMap).toString();
184 * This method updates the resource input by collecting required info from AAI
187 public void updateResourceInput(DelegateExecution execution) {
188 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
189 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
192 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/:
194 def resourceInput = resourceInputObj.getResourceParameters()
195 String incomingRequest = resourceInputObj.getRequestsInputs()
196 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
197 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
198 JSONObject inputParameters = new JSONObject(requestInputs)
199 if(inputParameters.has("local-access-provider-id")) {
200 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.access-provider-id", inputParameters.get("local-access-provider-id"))
201 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-client-id", inputParameters.get("local-access-client-id"))
202 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-topology-id", inputParameters.get("local-access-topology-id"))
203 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-ltp-id", inputParameters.get("local-access-ltp-id"))
204 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-node-id", inputParameters.get("local-access-node-id"))
205 resourceInputObj.setResourceParameters(uResourceInput)
206 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
211 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
212 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
213 // fill attachment TP in networkInputParamJson
214 String customer = resourceInputObj.getGlobalSubscriberId()
215 String serviceType = resourceInputObj.getServiceType()
217 def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName"
218 String parentServiceName = jsonUtil.getJsonValueForKey(resourceInputObj.getRequestsInputs(), vpnName)
220 AAIResourcesClient client = new AAIResourcesClient()
221 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SERVICE_INSTANCE, customer, serviceType).queryParam("service-instance-name", parentServiceName)
222 ServiceInstances sis = client.get(uri).asBean(ServiceInstances.class).get()
223 ServiceInstance si = sis.getServiceInstance().get(0)
225 def parentServiceInstanceId = si.getServiceInstanceId()
226 execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
235 * Pre Process the BPMN Flow Request
237 * generate the nsOperationKey
238 * generate the nsParameters
240 public void prepareSDNCRequest (DelegateExecution execution) {
241 msoLogger.info(" ***** Started prepareSDNCRequest *****")
245 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
246 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
247 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
248 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
250 String parentServiceInstanceId = execution.getVariable("parentServiceInstanceId")
251 String hdrRequestId = execution.getVariable("mso-request-id")
252 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
253 String source = execution.getVariable("source")
254 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
255 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
256 String serviceType = resourceInputObj.getServiceType()
257 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
258 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
259 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
260 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
261 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
262 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
263 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
264 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
265 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
266 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
267 String resourceInputPrameters = resourceInputObj.getResourceParameters()
268 String networkInputParametersJson = jsonUtil.getJsonValue(resourceInputPrameters, "requestInputs")
269 //here convert json string to xml string
270 String netowrkInputParameters = XML.toString(new JSONObject(customizeResourceParam(networkInputParametersJson)))
271 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
272 String sdncTopologyCreateRequest = ""
275 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
276 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
277 case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
278 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
279 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
280 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
281 <sdncadapter:RequestHeader>
282 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
283 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
284 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
285 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
286 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
287 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
288 </sdncadapter:RequestHeader>
289 <sdncadapterworkflow:SDNCRequestData>
290 <request-information>
291 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
292 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
293 <source>${msoUtils.xmlEscape(source)}</source>
294 <notification-url></notification-url>
295 <order-number></order-number>
296 <order-version></order-version>
297 </request-information>
298 <service-information>
299 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
300 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
301 <onap-model-information>
302 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
303 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
304 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
305 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
306 </onap-model-information>
307 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
308 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
309 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
310 </service-information>
313 <vnf-type></vnf-type>
314 <onap-model-information>
315 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
316 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
317 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
318 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
319 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
320 </onap-model-information>
323 <vnf-input-parameters>
324 $netowrkInputParameters
325 </vnf-input-parameters>
326 <request-version></request-version>
327 <vnf-name></vnf-name>
331 </sdncadapterworkflow:SDNCRequestData>
332 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
335 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
336 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
337 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
338 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
339 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
340 <sdncadapter:RequestHeader>
341 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
342 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
343 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
344 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
345 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
346 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
347 </sdncadapter:RequestHeader>
348 <sdncadapterworkflow:SDNCRequestData>
349 <request-information>
350 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
351 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
352 <source>${msoUtils.xmlEscape(source)}</source>
353 <notification-url></notification-url>
354 <order-number></order-number>
355 <order-version></order-version>
356 </request-information>
357 <service-information>
358 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
359 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
360 <onap-model-information>
361 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
362 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
363 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
364 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
365 </onap-model-information>
366 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
367 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
368 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
369 </service-information>
370 <allotted-resource-information>
371 <!-- TODO: to be filled as per the request input -->
372 <allotted-resource-id></allotted-resource-id>
373 <allotted-resource-type></allotted-resource-type>
374 <parent-service-instance-id>$parentServiceInstanceId</parent-service-instance-id>
375 <onap-model-information>
376 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
377 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
378 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
379 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
380 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
381 </onap-model-information>
382 </allotted-resource-information>
383 <connection-attachment-request-input>
384 $netowrkInputParameters
385 </connection-attachment-request-input>
386 </sdncadapterworkflow:SDNCRequestData>
387 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
390 // for SDWANConnectivity and SOTNConnectivity:
392 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
393 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
394 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
395 <sdncadapter:RequestHeader>
396 <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
397 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
398 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
399 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
400 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
401 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
402 </sdncadapter:RequestHeader>
403 <sdncadapterworkflow:SDNCRequestData>
404 <request-information>
405 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
406 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
407 <source>${msoUtils.xmlEscape(source)}</source>
408 <notification-url></notification-url>
409 <order-number></order-number>
410 <order-version></order-version>
411 </request-information>
412 <service-information>
413 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
414 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
415 <onap-model-information>
416 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
417 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
418 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
419 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
420 </onap-model-information>
421 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
422 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
423 </service-information>
424 <network-information>
425 <onap-model-information>
426 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
427 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
428 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
429 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
430 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
431 </onap-model-information>
432 </network-information>
433 <network-request-input>
434 <network-input-parameters>$netowrkInputParameters</network-input-parameters>
435 </network-request-input>
436 </sdncadapterworkflow:SDNCRequestData>
437 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
440 String sndcTopologyCreateRequesAsString = utils.formatXml(sdncTopologyCreateRequest)
441 utils.logAudit(sndcTopologyCreateRequesAsString)
442 execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyCreateRequesAsString)
443 msoLogger.debug("sdncAdapterWorkflowRequest - " + "\n" + sndcTopologyCreateRequesAsString)
445 } catch (Exception ex) {
446 String exceptionMessage = " Bpmn error encountered in CreateSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
447 msoLogger.debug(exceptionMessage)
448 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
451 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
454 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
455 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
456 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
457 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
460 public void prepareUpdateBeforeCreateSDNCResource(DelegateExecution execution) {
461 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
462 String operType = resourceInputObj.getOperationType()
463 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
464 String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
465 String operationId = resourceInputObj.getOperationId()
466 String progress = "20"
467 String status = "processing"
468 String statusDescription = "SDCN resource creation invoked"
470 execution.getVariable("operationId")
473 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
474 xmlns:ns="http://org.onap.so/requestsdb">
477 <ns:updateResourceOperationStatus>
478 <operType>${msoUtils.xmlEscape(operType)}</operType>
479 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
480 <progress>${msoUtils.xmlEscape(progress)}</progress>
481 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
482 <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
483 <status>${msoUtils.xmlEscape(status)}</status>
484 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
485 </ns:updateResourceOperationStatus>
487 </soapenv:Envelope>""";
489 setProgressUpdateVariables(execution, body)
493 public void prepareUpdateAfterCreateSDNCResource(execution) {
494 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
495 String operType = resourceInputObj.getOperationType()
496 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
497 String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
498 String operationId = resourceInputObj.getOperationId()
499 String progress = "100"
500 String status = "finished"
501 String statusDescription = "SDCN resource creation and activation completed"
503 execution.getVariable("operationId")
506 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
507 xmlns:ns="http://org.onap.so/requestsdb">
510 <ns:updateResourceOperationStatus>
511 <operType>${msoUtils.xmlEscape(operType)}</operType>
512 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
513 <progress>${msoUtils.xmlEscape(progress)}</progress>
514 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
515 <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
516 <status>${msoUtils.xmlEscape(status)}</status>
517 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
518 </ns:updateResourceOperationStatus>
520 </soapenv:Envelope>""";
522 setProgressUpdateVariables(execution, body)
525 public void afterCreateSDNCCall(DelegateExecution execution){
526 msoLogger.info(" ***** Started prepareSDNCRequest *****")
527 String responseCode = execution.getVariable(Prefix + "sdncCreateReturnCode")
528 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
530 def isActivateRequried = execution.getVariable("isActivateRequired")
531 if (StringUtils.equalsIgnoreCase(isActivateRequried, "true")) {
532 def instnaceId = getInstnaceId(execution)
533 execution.setVariable("networkInstanceId", instnaceId)
536 msoLogger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
537 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
540 private def getInstnaceId(DelegateExecution execution) {
541 def response = new XmlSlurper().parseText(execution.getVariable("CRENWKI_createSDNCResponse"))
542 def data = response.toString()
543 data = data.substring(data.indexOf("<"))
545 def resp = new XmlSlurper().parseText(data)
546 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
547 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
551 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
552 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
553 case ~/[\w\s\W]*Site[\w\s\W]*/:
554 val = resp."vnf-response-information"."instance-id"
557 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
558 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/:
559 val = resp."connection-attachment-response-information"."instance-id"
562 // for SDWANConnectivity and SOTNConnectivity and default:
564 val = resp."network-response-information"."instance-id"
568 return val.toString()
571 public void sendSyncResponse (DelegateExecution execution) {
572 msoLogger.debug(" *** sendSyncResponse *** ")
575 String operationStatus = "finished"
576 // RESTResponse for main flow
577 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
578 msoLogger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
579 sendWorkflowResponse(execution, 202, resourceOperationResp)
580 execution.setVariable("sentSyncResponse", true)
582 } catch (Exception ex) {
583 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
585 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
587 msoLogger.debug(" ***** Exit sendSyncResponse *****")