/*- * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ # Copyright (c) 2019, CMCC Technologies Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License") # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. * ============LICENSE_END========================================================= */ package org.onap.so.bpmn.infrastructure.scripts import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.delegate.DelegateExecution import org.onap.aai.domain.yang.CommunicationServiceProfile import org.onap.aai.domain.yang.ServiceInstance import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor import org.onap.so.bpmn.common.scripts.ExceptionUtil import org.onap.so.bpmn.core.json.JsonUtils import org.onap.aaiclient.client.aai.AAIObjectType import org.onap.aaiclient.client.aai.AAIResourcesClient import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types import org.slf4j.Logger import org.slf4j.LoggerFactory import static org.apache.commons.lang3.StringUtils.isBlank /** * This groovy class supports the DoCreateCommunicationService.bpmn process. * AlaCarte flow for 1702 ServiceInstance Create * */ class DoCreateCommunicationService extends AbstractServiceTaskProcessor{ String Prefix="DCCS_" ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() AAIResourcesClient client = new AAIResourcesClient() private static final Logger logger = LoggerFactory.getLogger( DoCreateCommunicationService.class) @Override void preProcessRequest(DelegateExecution execution) { logger.trace("start preProcessRequest") execution.setVariable("prefix", Prefix) String msg = "" try { String serviceInstanceId = execution.getVariable("serviceInstanceId") if (isBlank(serviceInstanceId)) { msg = "Input serviceInstanceId' is null" exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } String globalSubscriberId = execution.getVariable("globalSubscriberId") if (isBlank(globalSubscriberId)) { msg = "Input globalSubscriberId' is null" exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } String subscriptionServiceType = execution.getVariable("subscriptionServiceType") if (isBlank(subscriptionServiceType)) { msg = "Input subscriptionServiceType' is null" exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } } catch(BpmnError e) { throw e } catch(Exception ex) { msg = "Exception in preProcessRequest " + ex.getMessage() logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } logger.trace("Exit preProcessRequest") } /** * create communication service, generate S-NSSAI Id and communication service profile * 1.create communication service profile * */ def createCommunicationServiceProfile = { DelegateExecution execution -> logger.trace("createCSandServiceProfile") String msg = "" String serviceInstanceId = execution.getVariable("serviceInstanceId") String globalSubscriberId = execution.getVariable("globalSubscriberId") String subscriptionServiceType = execution.getVariable("subscriptionServiceType") try { // String sNSSAI_id = execution.getVariable("sNSSAI_id") // create communication service profile String profileId = UUID.randomUUID().toString() execution.setVariable("communicationProfileId", profileId) def csInputMap = execution.getVariable("csInputMap") as Map Integer latency = csInputMap.get("latency") as Integer Integer maxNumberOfUEs = csInputMap.get("maxNumberofUEs") as Integer Integer expDataRateDL = csInputMap.get("expDataRateDL") as Integer Integer expDataRateUL = csInputMap.get("expDataRateUL") as Integer String coverageArea = csInputMap.get("coverageAreaTAList") String uEMobilityLevel = csInputMap.get("uEMobilityLevel") String resourceSharingLevel = csInputMap.get("resourceSharingLevel") CommunicationServiceProfile csp = new CommunicationServiceProfile() csp.setProfileId(profileId) csp.setLatency(latency) csp.setMaxNumberOfUEs(maxNumberOfUEs) csp.setUeMobilityLevel(uEMobilityLevel) csp.setResourceSharingLevel(resourceSharingLevel) csp.setExpDataRateDL(expDataRateDL) csp.setExpDataRateUL(expDataRateUL) csp.setCoverageAreaList(coverageArea) execution.setVariable("communicationServiceInstanceProfile", csp) AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId).communicationServiceProfile(profileId)) client.create(uri, csp) } catch (BpmnError e) { throw e } catch (Exception ex) { msg = "Exception in createCSandServiceProfile " + ex.getMessage() logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } logger.trace("exit createCSandServiceProfile") } /** * create communication service, generate S-NSSAI Id * 1.generate S-NSSAI Id * 2.create communication service * */ def createCommunicationService = { DelegateExecution execution -> logger.trace("create communication service") String msg String serviceInstanceId = execution.getVariable("serviceInstanceId") try { //generate S-NSSAI Id and communication service profile String sNSSAI_id = generateNSSAI(serviceInstanceId) execution.setVariable("sNSSAI_id", sNSSAI_id) // create communication service String serviceInstanceName = execution.getVariable("serviceInstanceName") String subscriptionServiceType = execution.getVariable("subscriptionServiceType") String csServiceType = execution.getVariable("csServiceType") String aaiServiceRole = "communication-service" String oStatus = "processing" String uuiRequest = execution.getVariable("uuiRequest") String modelInvariantUuid = execution.getVariable("modelInvariantUuid") String modelUuid = execution.getVariable("modelUuid") String useInterval = execution.getVariable("useInterval") String globalSubscriberId = execution.getVariable("globalSubscriberId") // create service ServiceInstance csi = new ServiceInstance() csi.setServiceInstanceName(serviceInstanceName) csi.setServiceType(csServiceType) csi.setServiceRole(aaiServiceRole) csi.setOrchestrationStatus(oStatus) csi.setModelInvariantId(modelInvariantUuid) csi.setModelVersionId(modelUuid) csi.setInputParameters(uuiRequest) csi.setWorkloadContext(useInterval) csi.setEnvironmentContext(sNSSAI_id) //timestamp format YYYY-MM-DD hh:mm:ss csi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault())) execution.setVariable("communicationServiceInstance", csi) AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId)) client.create(uri, csi) } catch (BpmnError e) { throw e } catch (Exception ex) { msg = "Exception in communication service " + ex.getMessage() logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } logger.trace("exit communication service") } private static generateNSSAI = { final String instanceId -> int h, res res = (instanceId == null) ? 0 : (h = instanceId.hashCode()) ^ (h >>> 16) res = res >>> 1 return "01-" + Integer.toHexString(res).toUpperCase() } }