2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 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.onap.so.logger.LoggingAnchor
 
  26 import org.onap.so.client.HttpClientFactory
 
  27 import org.onap.so.client.aai.AAIObjectType
 
  28 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 
  29 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 
  30 import org.camunda.bpm.engine.delegate.BpmnError
 
  31 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  34 import org.onap.so.bpmn.core.json.JsonUtils
 
  35 import org.onap.so.client.HttpClient
 
  36 import org.onap.so.logger.ErrorCode
 
  37 import org.onap.so.logger.MessageEnum
 
  38 import org.slf4j.Logger
 
  39 import org.slf4j.LoggerFactory
 
  40 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  42 import org.onap.so.utils.TargetEntity
 
  44 import javax.ws.rs.core.Response
 
  47  * This groovy class supports the <class>DoCreateVFCNetworkServiceInstance.bpmn</class> process.
 
  48  * flow for VFC Network Service Create
 
  50 public class DoCreateVFCNetworkServiceInstance extends AbstractServiceTaskProcessor {
 
  51     private static final Logger logger = LoggerFactory.getLogger( DoCreateVFCNetworkServiceInstance.class);
 
  54     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  56     JsonUtils jsonUtil = new JsonUtils()
 
  59      * Pre Process the BPMN Flow Request
 
  61      * generate the nsOperationKey
 
  62      * generate the nsParameters
 
  64     void preProcessRequest (DelegateExecution execution) {
 
  66        logger.trace("preProcessRequest()")
 
  68            //deal with nsName and Description
 
  69            String nsServiceName = execution.getVariable("nsServiceName")
 
  70            String nsServiceDescription = execution.getVariable("nsServiceDescription")
 
  71            logger.debug("nsServiceName:" + nsServiceName + " nsServiceDescription:" + nsServiceDescription)
 
  72            //deal with operation key
 
  73            String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
  74            logger.debug("globalSubscriberId:" + globalSubscriberId)
 
  75            String serviceType = execution.getVariable("serviceType")
 
  76            logger.debug("serviceType:" + serviceType)
 
  77            String serviceId = execution.getVariable("serviceId")
 
  78            logger.debug("serviceId:" + serviceId)
 
  79            String operationId = execution.getVariable("operationId")
 
  80            logger.debug("serviceType:" + serviceType)
 
  81            String nodeTemplateUUID = execution.getVariable("resourceUUID")
 
  82            logger.debug("nodeTemplateUUID:" + nodeTemplateUUID)
 
  84             * segmentInformation needed as a object of segment
 
  87             *     "nodeTemplateName":"",
 
  90             *       //this is the nsParameters sent to VF-C
 
  94            String nsParameters = execution.getVariable("resourceParameters")
 
  95            logger.debug("nsParameters:" + nsParameters)
 
  96            String nsOperationKey = """{
 
  97                    "globalSubscriberId":"${globalSubscriberId}",
 
  98                    "serviceType":"${serviceType}",
 
  99                    "serviceId":"${serviceId}",
 
 100                    "operationId":"${operationId}",
 
 101                    "nodeTemplateUUID":"${nodeTemplateUUID}"
 
 103            execution.setVariable("nsOperationKey", nsOperationKey);
 
 104            execution.setVariable("nsParameters", nsParameters)
 
 106            String vfcAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.vfc.rest.endpoint", execution)
 
 108            if (vfcAdapterUrl == null || vfcAdapterUrl.isEmpty()) {
 
 109                msg = getProcessKey(execution) + ': mso:adapters:vfcc:rest:endpoint URN mapping is not defined'
 
 113            while (vfcAdapterUrl.endsWith('/')) {
 
 114                vfcAdapterUrl = vfcAdapterUrl.substring(0, vfcAdapterUrl.length()-1)
 
 117            execution.setVariable("vfcAdapterUrl", vfcAdapterUrl)
 
 120        } catch (BpmnError e) {
 
 122        } catch (Exception ex){
 
 123            msg = "Exception in preProcessRequest " + ex.getMessage()
 
 125            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 127        logger.trace("Exit preProcessRequest")
 
 133     void createNetworkService(DelegateExecution execution) {
 
 134         logger.trace("createNetworkService")
 
 135         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 136         String nsOperationKey = execution.getVariable("nsOperationKey");
 
 137         String nsParameters = execution.getVariable("nsParameters");
 
 138         String nsServiceName = execution.getVariable("nsServiceName")
 
 139         String nsServiceDescription = execution.getVariable("nsServiceDescription")
 
 141                 "nsServiceName":"${nsServiceName}",
 
 142                 "nsServiceDescription":"${nsServiceDescription}",
 
 143                 "nsOperationKey":${nsOperationKey},
 
 144                 "nsParameters":${nsParameters}
 
 146         Response apiResponse = postRequest(execution, vfcAdapterUrl + "/ns", reqBody)
 
 147         String returnCode = apiResponse.getStatus()
 
 148         String aaiResponseAsString = apiResponse.readEntity(String.class)
 
 149         String nsInstanceId = "";
 
 150         if(returnCode== "200" || returnCode == "201"){
 
 151             nsInstanceId =  jsonUtil.getJsonValue(aaiResponseAsString, "nsInstanceId")
 
 153         execution.setVariable("nsInstanceId", nsInstanceId)
 
 154         logger.trace("Exit  createNetworkService")
 
 158      * instantiate NS task
 
 160     void instantiateNetworkService(DelegateExecution execution) {
 
 161         logger.trace("instantiateNetworkService")
 
 162         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 163         String nsOperationKey = execution.getVariable("nsOperationKey");
 
 164         String nsParameters = execution.getVariable("nsParameters");
 
 165         String nsServiceName = execution.getVariable("nsServiceName")
 
 166         String nsServiceDescription = execution.getVariable("nsServiceDescription")
 
 168         "nsServiceName":"${nsServiceName}",
 
 169         "nsServiceDescription":"${nsServiceDescription}",
 
 170         "nsOperationKey":${nsOperationKey},
 
 171         "nsParameters":${nsParameters}
 
 173         String nsInstanceId = execution.getVariable("nsInstanceId")
 
 174         String url = vfcAdapterUrl + "/ns/" +nsInstanceId + "/instantiate"
 
 175         Response apiResponse = postRequest(execution, url, reqBody)
 
 176         String returnCode = apiResponse.getStatus()
 
 177         String aaiResponseAsString = apiResponse.readEntity(String.class)
 
 179         if(returnCode== "200"|| returnCode == "201"){
 
 180             jobId =  jsonUtil.getJsonValue(aaiResponseAsString, "jobId")
 
 182         execution.setVariable("jobId", jobId)
 
 183         logger.trace("Exit  instantiateNetworkService")
 
 189     void queryNSProgress(DelegateExecution execution) {
 
 190         logger.trace("queryNSProgress")
 
 191         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 192         String jobId = execution.getVariable("jobId")
 
 193         String nsOperationKey = execution.getVariable("nsOperationKey");
 
 194         String url = vfcAdapterUrl + "/jobs/" + jobId
 
 195         Response apiResponse = postRequest(execution, url, nsOperationKey)
 
 196         String returnCode = apiResponse.getStatus()
 
 197         String aaiResponseAsString = apiResponse.readEntity(String.class)
 
 198         String operationStatus = "error"
 
 199         if(returnCode== "200"|| returnCode == "201"){
 
 200             operationStatus = jsonUtil.getJsonValue(aaiResponseAsString, "responseDescriptor.status")
 
 202         execution.setVariable("operationStatus", operationStatus)
 
 203         logger.trace("Exit  queryNSProgress")
 
 209     void timeDelay(DelegateExecution execution) {
 
 212         } catch(InterruptedException e) {
 
 213            logger.debug("Time Delay exception" + e )
 
 220     void addNSRelationship(DelegateExecution execution) {
 
 221         logger.trace("addNSRelationship")
 
 222         String nsInstanceId = execution.getVariable("nsInstanceId")
 
 223         if(nsInstanceId == null || nsInstanceId == ""){
 
 224             logger.debug(" create NS failed, so do not need to add relationship")
 
 227         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 228         String serviceType = execution.getVariable("serviceType")
 
 229         String serviceId = execution.getVariable("serviceId")
 
 231         AAIResourceUri nsUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,globalSubscriberId,serviceType,nsInstanceId)
 
 232         AAIResourceUri relatedServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,globalSubscriberId,serviceType,serviceId)
 
 235             getAAIClient().connect(nsUri,relatedServiceUri)
 
 236             logger.info("NS relationship to Service added successfully")
 
 238             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 239                     "Exception occured while executing AAI Put Call", "BPMN",
 
 240                     ErrorCode.UnknownError.getValue(), "Exception is:\n" + e);
 
 241             throw new BpmnError("MSOWorkflowException")
 
 247      * url: the url of the request
 
 248      * requestBody: the body of the request
 
 250     private Response postRequest(DelegateExecution execution, String urlString, String requestBody){
 
 251         logger.trace("Started Execute VFC adapter Post Process")
 
 252         logger.debug("url:"+urlString +"\nrequestBody:"+ requestBody)
 
 253         Response apiResponse = null
 
 256                         URL url = new URL(urlString);
 
 258             // Get the Basic Auth credentials for the VFCAdapter, username is 'bpel', auth is '07a7159d3bf51a0e53be7a8f89699be7'
 
 259             // user 'bepl' authHeader is the same with mso.db.auth
 
 260             String basicAuthValuedb =  UrnPropertiesReader.getVariable("mso.db.auth", execution)
 
 261             HttpClient httpClient = new HttpClientFactory().newJsonClient(url, TargetEntity.VNF_ADAPTER)
 
 262             httpClient.addAdditionalHeader("Accept", "application/json")
 
 263             httpClient.addAdditionalHeader("Authorization", basicAuthValuedb)
 
 265             apiResponse = httpClient.post(requestBody)
 
 267             logger.debug("response code:"+ apiResponse.getStatus() +"\nresponse body:"+ apiResponse.readEntity(String.class))
 
 268             logger.trace("Completed Execute VF-C adapter Post Process")
 
 270                         logger.error("Exception occured while executing VFC Adapter Post Call"  + e.getMessage ());
 
 271             throw new BpmnError("MSOWorkflowException")