2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 # Copyright (c) 2019, CMCC Technologies Co., Ltd.
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 groovy.json.JsonSlurper
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.json.JSONObject
27 import org.onap.aai.domain.yang.Relationship
28 import org.onap.aai.domain.yang.ServiceInstance
29 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
30 import org.onap.so.bpmn.common.scripts.ExceptionUtil
31 import org.onap.so.bpmn.common.scripts.MsoUtils
32 import org.onap.so.bpmn.common.scripts.RequestDBUtil
33 import org.onap.so.bpmn.core.UrnPropertiesReader
34 import org.onap.so.bpmn.core.WorkflowException
35 import org.onap.so.bpmn.core.domain.ServiceDecomposition
36 import org.onap.so.bpmn.core.domain.ServiceInfo
37 import org.onap.so.bpmn.core.domain.ServiceProxy
38 import org.onap.so.bpmn.core.json.JsonUtils
39 import org.onap.aaiclient.client.aai.AAIObjectType
40 import org.onap.aaiclient.client.aai.AAIResourcesClient
41 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
42 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
43 import org.onap.so.db.request.beans.OperationStatus
44 import org.slf4j.Logger
45 import org.slf4j.LoggerFactory
46 import org.springframework.web.util.UriUtils
48 import static org.apache.commons.lang3.StringUtils.isBlank
51 * This groovy class supports the <class>DoCreateCommunicationService.bpmn</class> process.
52 * AlaCarte flow for 1702 ServiceInstance Create
55 class CreateCommunicationService extends AbstractServiceTaskProcessor {
59 ExceptionUtil exceptionUtil = new ExceptionUtil()
61 RequestDBUtil requestDBUtil = new RequestDBUtil()
63 JsonUtils jsonUtil = new JsonUtils()
65 AAIResourcesClient client = getAAIClient()
67 private static final Logger logger = LoggerFactory.getLogger(CreateCommunicationService.class)
70 void preProcessRequest(DelegateExecution execution) {
71 logger.debug(Prefix + "preProcessRequest Start")
72 execution.setVariable("prefix", Prefix)
73 execution.setVariable("startTime", System.currentTimeMillis())
75 //execution.setVariable("bpmnRequest", InputString)
78 String siRequest = execution.getVariable("bpmnRequest")
79 logger.debug(siRequest)
81 //String requestId = execution.getVariable("mso-request-id")
82 String requestId = execution.getVariable("mso-request-id")
83 execution.setVariable("msoRequestId", requestId)
84 logger.debug("Input Request:" + siRequest + " reqId:" + requestId)
86 String serviceInstanceId = execution.getVariable("serviceInstanceId")
87 if (isBlank(serviceInstanceId)) {
88 serviceInstanceId = UUID.randomUUID().toString()
90 logger.debug("Generated new Service Instance:" + serviceInstanceId)
91 serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")
92 execution.setVariable("serviceInstanceId", serviceInstanceId)
95 String globalSubscriberId = jsonUtil.getJsonValue(siRequest, "requestDetails.subscriberInfo.globalSubscriberId")
96 if (isBlank(globalSubscriberId)) {
97 msg = "Input globalSubscriberId' is null"
98 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
100 execution.setVariable("globalSubscriberId", globalSubscriberId)
104 execution.setVariable("source", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.source"))
105 execution.setVariable("serviceInstanceName", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.instanceName"))
106 execution.setVariable("disableRollback", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.suppressRollback"))
107 String productFamilyId = jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.productFamilyId")
108 if (isBlank(productFamilyId))
110 msg = "Input productFamilyId is null"
112 //exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
114 execution.setVariable("productFamilyId", productFamilyId)
118 String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
119 if (isBlank(serviceModelInfo)) {
120 msg = "Input serviceModelInfo is null"
122 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
125 execution.setVariable("csServiceModelInfo", serviceModelInfo)
128 logger.debug("modelInfo: " + serviceModelInfo)
130 //requestParameters, subscriptionServiceType is 5G
131 String subscriptionServiceType = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.subscriptionServiceType")
132 if (isBlank(subscriptionServiceType)) {
133 msg = "Input subscriptionServiceType is null"
135 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
137 // todo: in create e2e interface, this value is write "MOG", so write it as "5G"
138 execution.setVariable("subscriptionServiceType", "5G")
143 * Extracting User Parameters from incoming Request and converting into a Map
145 def jsonSlurper = new JsonSlurper()
147 Map reqMap = jsonSlurper.parseText(siRequest) as Map
150 def userParamsList = reqMap.requestDetails?.requestParameters?.userParams
152 Map<String, String> inputMap = [:]
153 if (userParamsList) {
154 for (def i=0; i<userParamsList.size(); i++) {
155 def userParams1 = userParamsList.get(i)
156 userParams1.each { param -> inputMap.put(param.key, param.value)}
160 logger.debug("User Input Parameters map: " + inputMap.toString())
161 execution.setVariable("serviceInputParams", inputMap)
162 execution.setVariable("uuiRequest", inputMap.get("UUIRequest"))
163 execution.setVariable("isAllNSMFFinished", "false")
164 String operationId = UUID.randomUUID().toString()
165 execution.setVariable("operationId", operationId)
167 } catch(BpmnError e) {
169 } catch(Exception ex) {
170 msg = "Exception in CreateCommunicationService.preProcessRequest " + ex.getMessage()
172 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
174 logger.debug(Prefix + "preProcessRequest Exit")
179 * create operation status in request db
181 * Init the Operation Status
183 def prepareInitOperationStatus = { DelegateExecution execution ->
184 logger.debug(Prefix + "prepareInitOperationStatus Start")
186 String serviceId = execution.getVariable("serviceInstanceId")
187 //operationId is generated
188 String operationId = execution.getVariable("operationId")
189 logger.debug("Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId)
191 OperationStatus initStatus = new OperationStatus()
192 initStatus.setServiceId(serviceId)
193 initStatus.setOperationId(operationId)
194 initStatus.setOperation("CREATE")
195 initStatus.setUserId(execution.getVariable("globalSubscriberId") as String)
196 initStatus.setResult("processing")
197 initStatus.setProgress("0")
198 initStatus.setReason("")
199 initStatus.setOperationContent("communication service create operation start")
201 requestDBUtil.prepareUpdateOperationStatus(execution, initStatus)
203 logger.debug(Prefix + "prepareInitOperationStatus Exit")
208 * return sync response
210 def sendSyncResponse = { DelegateExecution execution ->
211 logger.debug(Prefix + "sendSyncResponse Start")
213 String operationId = execution.getVariable("operationId")
214 String serviceInstanceId = execution.getVariable("serviceInstanceId")
215 String createServiceRestRequest = """
218 "serviceId":"${serviceInstanceId}",
219 "operationId":"${operationId}"
222 """.trim().replaceAll(" ", "")
224 logger.debug("sendSyncResponse to APIH:" + "\n" + createServiceRestRequest)
225 sendWorkflowResponse(execution, 202, createServiceRestRequest)
227 execution.setVariable("sentSyncResponse", true)
228 } catch (Exception ex) {
229 String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
231 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
233 logger.debug(Prefix + "sendSyncResponse Exit")
241 def prepareDoComposeE2E = { DelegateExecution execution ->
242 logger.debug(Prefix + "prepareDoComposeE2E Start")
244 ServiceDecomposition serviceDecomposition = execution.getVariable(
245 "csServiceDecomposition") as ServiceDecomposition
247 logger.debug("serviceDecomposition is:" + serviceDecomposition.toJsonString())
249 List<ServiceProxy> serviceProxies = serviceDecomposition.getServiceProxy()
250 String sourceModelUuid = serviceProxies.get(0).getSourceModelUuid()
252 JSONObject queryJson = new JSONObject()
253 queryJson.put("modelUuid", sourceModelUuid)
255 execution.setVariable("e2eServiceModelInfo", queryJson.toString())
256 } catch (BpmnError e) {
258 } catch (Exception ex) {
259 String msg = "Exception in CreateCommunicationService.prepareDoComposeE2E. " + ex.getMessage()
261 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
264 logger.debug(Prefix + "prepareDoComposeE2E Exit")
269 * parse communication service params from request
272 def parseCSParamsFromReq = { DelegateExecution execution ->
273 logger.debug(Prefix + "parseCSParamsFromReq Start")
277 String modelInfo = execution.getVariable("csServiceModelInfo")
278 String modelInvariantUuid = jsonUtil.getJsonValue(modelInfo, "modelInvariantUuid")
279 String modelUuid = jsonUtil.getJsonValue(modelInfo, "modelUuid")
281 //String modelInvariantUuid = execution.getVariable("modelInvariantId")
282 //String modelUuid = execution.getVariable("modelUuid")
283 String uuiRequest = execution.getVariable("uuiRequest")
284 String useInterval = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.useInterval")
285 String csServiceName = jsonUtil.getJsonValue(uuiRequest, "service.name")
286 String csServiceDescription = jsonUtil.getJsonValue(uuiRequest, "service.description")
288 execution.setVariable("modelInvariantUuid", modelInvariantUuid)
289 execution.setVariable("modelUuid", modelUuid)
290 execution.setVariable("useInterval", useInterval)
291 execution.setVariable("csServiceName", csServiceName)
292 execution.setVariable("csServiceDescription", csServiceDescription)
296 Integer expDataRateDL = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.expDataRateDL") as Integer
297 Integer expDataRateUL = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.expDataRateUL") as Integer
298 Integer latency = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.latency") as Integer
299 Integer maxNumberOfUEs = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.maxNumberofUEs") as Integer
300 String uEMobilityLevel = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.uEMobilityLevel")
301 String resourceSharingLevel = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.resourceSharingLevel")
302 String coverageArea = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.coverageAreaList")
304 // from template construct input map
305 //String cstTemplate = execution.getVariable("cstTemplate")
306 ServiceDecomposition csServiceDecomposition = execution.getVariable(
307 "csServiceDecomposition") as ServiceDecomposition
308 //String csServiceType = jsonUtil.getJsonValue(cstTemplate, "serviceResources.serviceType")
309 String csServiceType = csServiceDecomposition.getServiceType()
310 execution.setVariable("csServiceType", csServiceType)
312 //String cstTemplateInfo = jsonUtil.getJsonValue(cstTemplate, "serviceResources.serviceInfo.serviceInput")
313 ServiceInfo csServiceInfo = csServiceDecomposition.getServiceInfo()
314 String cstTemplateInfo = csServiceInfo.getServiceProperties()
316 List<String> csInputs = jsonUtil.StringArrayToList(cstTemplateInfo)
318 Map<String, ?> csInputMap = new HashMap<>()
319 for (String csInput : csInputs) {
321 if (jsonUtil.getJsonValue(csInput, "type") == "integer") {
322 value = jsonUtil.getJsonValue(csInput, "default")
323 csInputMap.put(jsonUtil.getJsonValue(csInput, "name"), isBlank(value) ? 0 : (value as Integer))
324 } else if (jsonUtil.getJsonValue(csInput, "type") == "string") {
325 csInputMap.put(jsonUtil.getJsonValue(csInput, "name"),
326 jsonUtil.getJsonValue(csInput, "default"))
329 csInputMap.put("expDataRateDL", expDataRateDL)
330 csInputMap.put("expDataRateUL", expDataRateUL)
331 csInputMap.put("latency", latency)
332 csInputMap.put("maxNumberofUEs", maxNumberOfUEs)
333 csInputMap.put("uEMobilityLevel", uEMobilityLevel)
334 csInputMap.put("resourceSharingLevel", resourceSharingLevel)
335 csInputMap.put("coverageAreaTAList", coverageArea)
336 csInputMap.put("useInterval", useInterval)
338 execution.setVariable("csInputMap", csInputMap)
339 } catch (BpmnError e) {
341 } catch (Exception ex) {
342 String msg = "Exception in CreateCommunicationService.parseCSParamsFromReq. " + ex.getMessage()
344 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
346 logger.debug(Prefix + "parseCSParamsFromReq Exit")
351 * get E2EST id through CST id and change communication profile to E2E service profile
352 * 1. get E2EST id from cst
353 * 1.1 查source service id
355 * 1.3 source service input, init e2e profile
357 def generateE2EServiceProfile = { DelegateExecution execution ->
358 logger.debug(Prefix + "generateE2EServiceProfile Start")
360 ServiceDecomposition e2eServiceDecomposition = execution.getVariable(
361 "e2eServiceDecomposition") as ServiceDecomposition
362 String e2estTemplateInfo = e2eServiceDecomposition.getServiceInfo().getServiceProperties()
364 List<String> e2eInputs = jsonUtil.StringArrayToList(e2estTemplateInfo)
366 Map<String, ?> csInputMap = execution.getVariable("csInputMap") as Map
367 Map<String, ?> e2eInputMap = new HashMap<>()
372 for (String e2eInput in e2eInputs) {
373 key = jsonUtil.getJsonValue(e2eInput, "name")
374 String type = jsonUtil.getJsonValue(e2eInput, "type")
375 if (type == "integer") {
377 value = csInputMap.containsKey(key) ? csInputMap.getOrDefault(key, 0) : (isBlank(temp = jsonUtil.getJsonValue(e2eInput, "default")) ? 0 : temp)
379 e2eInputMap.put(key, value as Integer)
380 } else if(type == "string") {
381 e2eInputMap.put(key, csInputMap.containsKey(key)
382 ? csInputMap.getOrDefault(key, null) : (jsonUtil.getJsonValue(e2eInput, "default")))
388 e2eInputMap.put("sNSSAI", execution.getVariable("sNSSAI_id"))
389 e2eInputMap.put("sST", execution.getVariable("csServiceType"))
390 execution.setVariable("e2eInputMap", e2eInputMap)
391 execution.setVariable("e2eServiceType", e2eServiceDecomposition.getServiceType())
392 execution.setVariable("e2eModelInvariantUuid", e2eServiceDecomposition.getModelInfo().getModelInvariantUuid())
393 execution.setVariable("e2eModelUuid", e2eServiceDecomposition.getModelInfo().getModelUuid())
395 } catch (BpmnError e) {
397 } catch (Exception ex) {
398 String msg = "Exception in DoCreateE2EServiceInstance.createRelationShipInAAI. " + ex.getMessage()
400 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
403 logger.debug(Prefix + "generateE2EServiceProfile Exit")
408 * call createE2EService get operation id,
411 def preRequestSend2NSMF(DelegateExecution execution) {
412 logger.debug(Prefix + "preRequestSend2NSMF Start")
415 //String NSMF_endpoint = "/onap/so/infra/e2eServiceInstances/v3"
416 def NSMF_endpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
417 def url = NSMF_endpoint + "/e2eServiceInstances/v3"
418 execution.setVariable("NSMF_endpoint", url)
419 //get from model catalog inputs
423 "name": "${execution.getVariable("csServiceName")}",
424 "description": "e2eService of ${execution.getVariable("modelUuid")}",
425 "serviceInvariantUuid": "${execution.getVariable("e2eModelInvariantUuid")}",
426 "serviceUuid": "${execution.getVariable("e2eModelUuid")}",
427 "globalSubscriberId": "${execution.getVariable("globalSubscriberId")}",
428 "serviceType": "${execution.getVariable("subscriptionServiceType")}",
430 "requestInputs": ${execution.getVariable("e2eInputMap") as JSONObject}
435 execution.setVariable("CSMF_NSMFRequest", payload.replaceAll("\\s+", ""))
437 } catch (BpmnError e) {
439 } catch (Exception ex) {
440 String msg = "Exception in CreateCommunicationService.preRequestSend2NSMF. " + ex.getMessage()
442 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
445 logger.debug(Prefix + "preRequestSend2NSMF Exit")
449 def processNSMFResponse = { DelegateExecution execution ->
450 logger.debug(Prefix + "processNSMFResponse Start")
453 def CSMF_NSMFResponseCode = execution.getVariable("CSMF_NSMFResponseCode") as Integer
454 if (CSMF_NSMFResponseCode >= 200 && CSMF_NSMFResponseCode < 400) {
455 def CSMF_NSMFResponse = execution.getVariable("CSMF_NSMFResponse") as String
456 def e2eServiceInstanceId = jsonUtil.getJsonValue(CSMF_NSMFResponse, "service.serviceId")
457 def e2eOperationId = jsonUtil.getJsonValue(CSMF_NSMFResponse, "service.operationId")
459 execution.setVariable("e2eServiceInstanceId", e2eServiceInstanceId)
460 execution.setVariable("e2eOperationId", e2eOperationId)
461 execution.setVariable("ProcessNsmfSuccess", "OK")
463 execution.setVariable("ProcessNsmfSuccess", "ERROR")
464 execution.setVariable("operationStatus", "error")
465 execution.setVariable("operationContent",
466 "communication service create operation error: nsmf response fail")
467 execution.setVariable("orchestrationStatus", "error")
470 } catch (BpmnError e) {
472 } catch (Exception ex) {
473 String msg = "Exception in " + Prefix + "processOOFResponse. " + ex.getMessage()
475 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
477 logger.debug(Prefix + "processNSMFResponse Exit")
482 * create communication service and e2e service relationship
485 def createCSAndSSRelationship = { DelegateExecution execution ->
486 logger.debug(Prefix + "createCSAndSSRelationship Start")
489 def e2eServiceInstanceId = execution.getVariable("e2eServiceInstanceId")
490 String globalSubscriberId = execution.getVariable("globalSubscriberId")
491 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
493 Relationship relationship = new Relationship()
494 String relatedLink = "aai/v16/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${e2eServiceInstanceId}"
495 relationship.setRelatedLink(relatedLink)
497 // create CS and SS relationship in AAI
498 createRelationShipInAAI(execution, relationship)
500 } catch (BpmnError e) {
502 } catch (Exception ex) {
504 msg = "Exception in DoCreateE2EServiceInstance.createCustomRelationship. " + ex.getMessage()
506 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
508 logger.debug(Prefix + "createCSAndSSRelationship Exit")
513 * prepare update operation status to 50% after create relationship in aai
516 def prepareUpdateOperationStatus = { DelegateExecution execution ->
517 logger.debug(Prefix + "prepareUpdateOperationStatus Start")
518 // update status creating
519 OperationStatus status = new OperationStatus()
520 status.setServiceId(execution.getVariable("serviceInstanceId") as String)
521 status.setOperationId(execution.getVariable("operationId") as String)
522 status.setOperation("CREATE")
523 status.setResult("processing")
524 status.setProgress("20")
525 status.setOperationContent("communication service create operation processing: waiting nsmf service create finished")
526 status.setUserId(execution.getVariable("globalSubscriberId") as String)
528 requestDBUtil.prepareUpdateOperationStatus(execution, status)
529 logger.debug(Prefix + "prepareUpdateOperationStatus Exit")
534 * create relationship in AAI
536 private createRelationShipInAAI = { DelegateExecution execution, final Relationship relationship ->
537 logger.debug(Prefix + "createRelationShipInAAI Start")
540 String serviceInstanceId = execution.getVariable("serviceInstanceId")
541 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
542 execution.getVariable("globalSubscriberId"),
543 execution.getVariable("subscriptionServiceType"),
544 serviceInstanceId).relationshipAPI()
545 client.create(uri, relationship)
547 } catch (BpmnError e) {
549 } catch (Exception ex) {
550 msg = "Exception in CreateCommunicationService.createRelationShipInAAI. " + ex.getMessage()
552 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
554 logger.debug(Prefix + "createRelationShipInAAI Exit")
559 def prepareCallCheckProcessStatus = { DelegateExecution execution ->
560 logger.debug(Prefix + "prepareCallCheckProcessStatus Start")
562 def successConditions = new ArrayList<>()
563 successConditions.add("finished")
564 execution.setVariable("successConditions", successConditions)
566 def errorConditions = new ArrayList<>()
567 errorConditions.add("error")
568 execution.setVariable("errorConditions", errorConditions)
570 execution.setVariable("processServiceType", "communication service")
572 execution.setVariable("subOperationType", "CREATE")
574 execution.setVariable("timeOut", 3 * 60 * 60 * 1000)
576 def successParamMap = new HashMap<String, Object>()
577 successParamMap.put("orchestrationStatus", "deactivated")
579 execution.setVariable("successParamMap", successParamMap)
581 def errorParamMap = new HashMap<String, Object>()
582 errorParamMap.put("orchestrationStatus", "error")
584 execution.setVariable("errorParamMap", errorParamMap)
586 def timeOutParamMap = new HashMap<String, Object>()
587 timeOutParamMap.put("orchestrationStatus", "error")
589 execution.setVariable("timeOutParamMap", timeOutParamMap)
591 execution.setVariable("initProgress", 20)
592 execution.setVariable("endProgress", 90)
594 logger.debug(Prefix + "prepareCallCheckProcessStatus Exit")
599 * prepare update operation status to complete after NSMF process success
602 def prepareCompleteStatus = { DelegateExecution execution ->
603 logger.debug(Prefix + "prepareCompleteStatus Start")
604 OperationStatus status = new OperationStatus()
605 status.setServiceId(execution.getVariable("serviceInstanceId") as String)
606 status.setOperationId(execution.getVariable("operationId") as String)
607 status.setOperation("CREATE")
608 status.setResult(execution.getVariable("operationStatus") as String)
609 status.setProgress("100")
610 status.setOperationContent(execution.getVariable("operationContent") as String)
611 status.setUserId(execution.getVariable("globalSubscriberId") as String)
613 requestDBUtil.prepareUpdateOperationStatus(execution, status)
614 logger.debug("prepareCompleteStatus end, serviceInstanceId: " + execution.getVariable("serviceInstanceId")
615 + ", operationId: " + execution.getVariable("operationId"))
616 logger.debug(Prefix + "prepareCompleteStatus Exit")
621 * update NSMF complete status to AAI when the NSMF process finished
624 def updateFinishStatusInAAI = { DelegateExecution execution ->
625 logger.debug(Prefix + "updateFinishStatusInAAI Start")
629 String serviceInstanceId = execution.getVariable("serviceInstanceId")
630 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
631 String globalSubscriberId = execution.getVariable("globalSubscriberId")
632 String orchestrationStatus = execution.getVariable("orchestrationStatus")
634 ServiceInstance csi = new ServiceInstance()
635 csi.setOrchestrationStatus(orchestrationStatus)
636 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
637 globalSubscriberId, subscriptionServiceType, serviceInstanceId)
638 client.update(uri, csi)
639 logger.debug(Prefix + "updateFinishStatusInAAI update communication service status to deactivated")
641 } catch (BpmnError e) {
643 } catch (Exception ex) {
644 msg = "Exception in complete communication service " + ex.getMessage()
646 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
648 logger.debug(Prefix + "updateFinishStatusInAAI Exit")
652 public sendSyncError = { DelegateExecution execution ->
653 logger.debug("sendSyncError Start")
656 if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
657 WorkflowException wfe = execution.getVariable("WorkflowException") as WorkflowException
658 errorMessage = wfe.getErrorMessage()
660 errorMessage = "Sending Sync Error."
663 String buildWorkflowException =
664 """<aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
665 <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorMessage)}</aetgt:ErrorMessage>
666 <aetgt:ErrorCode>7000</aetgt:ErrorCode>
667 </aetgt:WorkflowException>"""
669 logger.debug(buildWorkflowException)
670 sendWorkflowResponse(execution, 500, buildWorkflowException)
672 } catch (Exception ex) {
673 logger.debug("Sending Sync Error Activity Failed. " + "\n" + ex.getMessage())
675 logger.debug(Prefix + "sendSyncError Exit")