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.camunda.bpm.engine.delegate.BpmnError
 
  26 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  28 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  29 import org.onap.so.bpmn.core.json.JsonUtils
 
  30 import org.onap.so.client.HttpClient
 
  31 import org.onap.so.client.HttpClientFactory
 
  32 import org.onap.aaiclient.client.aai.AAIObjectType
 
  33 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  34 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  35 import org.slf4j.Logger
 
  36 import org.slf4j.LoggerFactory
 
  37 import org.onap.logging.filter.base.ONAPComponents;
 
  38 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  40 import javax.ws.rs.core.Response
 
  42  * This groovy class supports the <class>DoDeleteVFCNetworkServiceInstance.bpmn</class> process.
 
  43  * flow for E2E ServiceInstance Delete
 
  45 public class DoDeleteVFCNetworkServiceInstance extends AbstractServiceTaskProcessor {
 
  46     private static final Logger logger = LoggerFactory.getLogger( DoDeleteVFCNetworkServiceInstance.class);
 
  48     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  50     JsonUtils jsonUtil = new JsonUtils()
 
  51     private final HttpClientFactory httpClientFactory = new HttpClientFactory()
 
  54      * Pre Process the BPMN Flow Request
 
  56      * generate the nsOperationKey
 
  58     public void preProcessRequest (DelegateExecution execution) {
 
  61         logger.trace("preProcessRequest() ")
 
  63             //deal with operation key
 
  64             String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
  65             logger.info("globalSubscriberId:" + globalSubscriberId)
 
  66             String serviceType = execution.getVariable("serviceType")
 
  67             logger.info("serviceType:" + serviceType)
 
  68             String serviceId = execution.getVariable("serviceId")
 
  69             logger.info("serviceId:" + serviceId)
 
  70             String operationId = execution.getVariable("operationId")
 
  71             logger.info("serviceType:" + serviceType)
 
  72             String nodeTemplateUUID = execution.getVariable("resourceTemplateId")
 
  73             logger.info("nodeTemplateUUID:" + nodeTemplateUUID)
 
  74             String nsInstanceId = execution.getVariable("resourceInstanceId")
 
  75             logger.info("nsInstanceId:" + nsInstanceId)
 
  76             execution.setVariable("nsInstanceId",nsInstanceId)
 
  77             String nsOperationKey = """{
 
  78             "globalSubscriberId":"${globalSubscriberId}",
 
  79             "serviceType":"${serviceType}",
 
  80             "serviceId":"${serviceId}",
 
  81             "operationId":"${operationId}",
 
  82             "nodeTemplateUUID":"${nodeTemplateUUID}"
 
  84             execution.setVariable("nsOperationKey", nsOperationKey);
 
  85             logger.info("nsOperationKey:" + nsOperationKey)
 
  87             String vfcAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.vfc.rest.endpoint", execution)
 
  89             if (vfcAdapterUrl == null || vfcAdapterUrl.isEmpty()) {
 
  90                 msg = getProcessKey(execution) + ': mso:adapters:vfcc:rest:endpoint URN mapping is not defined'
 
  94             while (vfcAdapterUrl.endsWith('/')) {
 
  95                 vfcAdapterUrl = vfcAdapterUrl.substring(0, vfcAdapterUrl.length()-1)
 
  98             execution.setVariable("vfcAdapterUrl", vfcAdapterUrl)
 
 100         } catch (BpmnError e) {
 
 102         } catch (Exception ex){
 
 103             msg = "Exception in preProcessRequest " + ex.getMessage()
 
 105             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 107         logger.trace("Exit preProcessRequest ")
 
 111      * unwind NS from AAI relationship
 
 113     public void deleteNSRelationship(DelegateExecution execution) {
 
 114         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 
 115         logger.info(" ***** deleteNSRelationship *****")
 
 116         String nsInstanceId = execution.getVariable("resourceInstanceId")
 
 117         if(nsInstanceId == null || nsInstanceId == ""){
 
 118             logger.info(" Delete NS failed")
 
 121         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 122         String serviceType = execution.getVariable("serviceType")
 
 123         String serviceId = execution.getVariable("serviceId")
 
 124         AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, serviceId)
 
 125         AAIResourceUri nsServiceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, nsInstanceId)
 
 127             getAAIClient().disconnect(serviceInstanceUri, nsServiceInstanceUri)
 
 129             exceptionUtil.buildAndThrowWorkflowException(execution,25000,"Exception occured while NS disconnect call: " + e.getMessage())
 
 131         logger.info(" *****Exit deleteNSRelationship *****")
 
 137     public void deleteNetworkService(DelegateExecution execution) {
 
 139         logger.trace("deleteNetworkService  start ")
 
 140         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 141         String nsOperationKey = execution.getVariable("nsOperationKey");
 
 142         String url = vfcAdapterUrl + "/ns/" + execution.getVariable("nsInstanceId")
 
 143         Response apiResponse = deleteRequest(execution, url, nsOperationKey)
 
 144         String returnCode = apiResponse.getStatus()
 
 145         String operationStatus = "error";
 
 146         if(returnCode== "200" || returnCode== "202"){
 
 147             operationStatus = "finished"
 
 149         execution.setVariable("operationStatus", operationStatus)
 
 151         logger.trace("deleteNetworkService  end ")
 
 157     public void terminateNetworkService(DelegateExecution execution) {
 
 159         logger.trace("terminateNetworkService  start ")
 
 160         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 161         String nsOperationKey = execution.getVariable("nsOperationKey")
 
 162         String url =  vfcAdapterUrl + "/ns/" + execution.getVariable("nsInstanceId") + "/terminate"
 
 163         Response apiResponse = postRequest(execution, url, nsOperationKey)
 
 164         String returnCode = apiResponse.getStatus()
 
 165         String aaiResponseAsString = apiResponse.readEntity(String.class)
 
 167         if(returnCode== "200" || returnCode== "202"){
 
 168             jobId =  jsonUtil.getJsonValue(aaiResponseAsString, "jobId")
 
 170         execution.setVariable("jobId", jobId)
 
 171         logger.trace("terminateNetworkService  end ")
 
 177     public void queryNSProgress(DelegateExecution execution) {
 
 179         logger.trace("queryNSProgress  start ")
 
 180         String vfcAdapterUrl = execution.getVariable("vfcAdapterUrl")
 
 181         String jobId = execution.getVariable("jobId")
 
 182         String nsOperationKey = execution.getVariable("nsOperationKey");
 
 183         String url =  vfcAdapterUrl + "/jobs/" +  execution.getVariable("jobId")
 
 184         Response apiResponse = postRequest(execution, url, nsOperationKey)
 
 185         String returnCode = apiResponse.getStatus()
 
 186         String apiResponseAsString = apiResponse.readEntity(String.class)
 
 187         String operationProgress = "100"
 
 188         if(returnCode== "200"){
 
 189             operationProgress = jsonUtil.getJsonValue(apiResponseAsString, "responseDescriptor.progress")
 
 191         execution.setVariable("operationProgress", operationProgress)
 
 192         logger.trace("queryNSProgress  end ")
 
 198     public void timeDelay(DelegateExecution execution) {
 
 201         } catch(InterruptedException e) {
 
 202             logger.info("Time Delay exception" + e)
 
 209     public void finishNSDelete(DelegateExecution execution) {
 
 210         //no need to do anything util now
 
 215      * url: the url of the request
 
 216      * requestBody: the body of the request
 
 218     private Response postRequest(DelegateExecution execution, String urlString, String requestBody){
 
 220                 logger.trace("Started Execute VFC adapter Post Process ")
 
 221                 logger.info("url:"+urlString +"\nrequestBody:"+ requestBody)
 
 222                 Response apiResponse = null
 
 224                         URL url = new URL(urlString);
 
 226                         // Get the Basic Auth credentials for the VFCAdapter, username is 'bpel', auth is '07a7159d3bf51a0e53be7a8f89699be7'
 
 227             // user 'bepl' authHeader is the same with mso.db.auth
 
 228             String basicAuthValuedb =  UrnPropertiesReader.getVariable("mso.db.auth", execution)
 
 229             HttpClient httpClient = httpClientFactory.newJsonClient(url, ONAPComponents.VNF_ADAPTER)
 
 230             httpClient.addAdditionalHeader("Accept", "application/json")
 
 231             httpClient.addAdditionalHeader("Authorization", basicAuthValuedb)
 
 233                         apiResponse = httpClient.post(requestBody)
 
 235                         logger.debug("response code:"+ apiResponse.getStatus() +"\nresponse body:"+ apiResponse.readEntity(String.class))
 
 237                         logger.trace("Completed Execute VF-C adapter Post Process ")
 
 239             logger.error("Exception occured while executing VF-C Post Call. Exception is: \n" + e.getMessage());
 
 240             throw new BpmnError("MSOWorkflowException")
 
 246      * url: the url of the request
 
 247      * requestBody: the body of the request
 
 249     private Response deleteRequest(DelegateExecution execution, String url, String requestBody){
 
 251         logger.trace("Started Execute VFC adapter Delete Process ")
 
 252         logger.info("url:"+url +"\nrequestBody:"+ requestBody)
 
 256                 URL Url = new URL(url)
 
 257             // Get the Basic Auth credentials for the VFCAdapter, username is 'bpel', auth is '07a7159d3bf51a0e53be7a8f89699be7'
 
 258             // user 'bepl' authHeader is the same with mso.db.auth
 
 259             String basicAuthValuedb =  UrnPropertiesReader.getVariable("mso.db.auth", execution)
 
 260             HttpClient httpClient = httpClientFactory.newJsonClient(url, ONAPComponents.VNF_ADAPTER)
 
 261             httpClient.addAdditionalHeader("Accept", "application/json")
 
 262             httpClient.addAdditionalHeader("Authorization", basicAuthValuedb)
 
 263             httpClient.addAdditionalHeader("Content-Type", "application/json")
 
 264             r = httpClient.delete(requestBody)
 
 266             logger.trace("Completed Execute VF-C adapter Delete Process ")
 
 268             logger.error("Exception occured while executing VF-C Post Call. Exception is: \n" + e.getMessage());
 
 269             throw new BpmnError("MSOWorkflowException")