2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2018 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=========================================================
 
  22 package org.onap.so.bpmn.infrastructure.scripts
 
  25 import static org.apache.commons.lang3.StringUtils.*;
 
  27 import org.apache.commons.lang3.*
 
  28 import org.camunda.bpm.engine.delegate.BpmnError
 
  29 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  30 import org.onap.so.bpmn.common.scripts.AaiUtil
 
  31 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  32 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  33 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  34 import org.onap.so.bpmn.core.WorkflowException
 
  35 import org.onap.aaiclient.client.aai.AAIObjectType
 
  36 import org.onap.aaiclient.client.aai.AAIResourcesClient
 
  37 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 
  38 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  39 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  40 import org.slf4j.Logger
 
  41 import org.slf4j.LoggerFactory
 
  42 import org.onap.so.bpmn.common.scripts.ExceptionUtil;
 
  44 import org.onap.so.bpmn.common.scripts.AaiUtil;
 
  47  * This groovy class supports the <class>DoUpdateE2EServiceInstanceRollback.bpmn</class> process.
 
  50  * @param - msoRequestId
 
  51  * @param - rollbackData with
 
  53  *                      subscriptionServiceType
 
  62  * @param - rollbackError
 
  63  * @param - rolledBack (no localRB->null, localRB F->false, localRB S->true)
 
  66 public class DoUpdateE2EServiceInstanceRollback extends AbstractServiceTaskProcessor{
 
  67     private static final Logger logger = LoggerFactory.getLogger( DoUpdateE2EServiceInstanceRollback.class);
 
  70         String Prefix="DUPDSIRB_"
 
  71         ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  73         public void preProcessRequest(DelegateExecution execution) {
 
  74                 execution.setVariable("prefix",Prefix)
 
  76                 logger.trace("preProcessRequest ")
 
  77                 execution.setVariable("rollbackAAI",false)
 
  78                 execution.setVariable("rollbackAdded",false)
 
  79                 execution.setVariable("rollbackDeleted",false)
 
  81                 List addResourceList = execution.getVariable("addResourceList")
 
  82         List delResourceList = execution.getVariable("delResourceList")
 
  83         execution.setVariable("addResourceList_o",  addResourceList)
 
  84         execution.setVariable("delResourceList_o",  delResourceList)
 
  85         //exchange add and delete resource list
 
  86         execution.setVariable("addResourceList",  delResourceList)
 
  87         execution.setVariable("delResourceList",  addResourceList)
 
  90                         def rollbackData = execution.getVariable("rollbackData")
 
  91                         logger.debug("RollbackData:" + rollbackData)
 
  93                         if (rollbackData != null) {
 
  94                                 if (rollbackData.hasType("SERVICEINSTANCE")) {
 
  96                                         def serviceInstanceId = rollbackData.get("SERVICEINSTANCE", "serviceInstanceId")
 
  97                                         execution.setVariable("serviceInstanceId", serviceInstanceId)
 
  99                                         def subscriptionServiceType = rollbackData.get("SERVICEINSTANCE", "subscriptionServiceType")
 
 100                                         execution.setVariable("subscriptionServiceType", subscriptionServiceType)
 
 102                                         def globalSubscriberId  = rollbackData.get("SERVICEINSTANCE", "globalSubscriberId")
 
 103                                         execution.setVariable("globalSubscriberId", globalSubscriberId)
 
 105                                         def rollbackAAI = rollbackData.get("SERVICEINSTANCE", "rollbackAAI")
 
 106                                         if ("true".equals(rollbackAAI))
 
 108                                                 execution.setVariable("rollbackAAI",true)
 
 111                                         def rollbackAdded = rollbackData.get("SERVICEINSTANCE", "rollbackAdded")
 
 112                                         if ("true".equals(rollbackAdded))
 
 114                                                 execution.setVariable("rollbackAdded", true)
 
 117                                         def rollbackDeleted = rollbackData.get("SERVICEINSTANCE", "rollbackDeleted")
 
 118                                         if ("true".equals(rollbackDeleted))
 
 120                                                 execution.setVariable("rollbackDeleted", true)
 
 123                                         if (execution.getVariable("rollbackAAI") != true && execution.getVariable("rollbackAdded") != true
 
 124                                           && execution.getVariable("rollbackDeleted") != true)
 
 126                                                 execution.setVariable("skipRollback", true)
 
 131                                         execution.setVariable("skipRollback", true)
 
 135                                 execution.setVariable("skipRollback", true)
 
 137                         if (execution.getVariable("disableRollback").equals("true" ))
 
 139                                 execution.setVariable("skipRollback", true)
 
 142                 } catch (BpmnError e) {
 
 144                 } catch (Exception ex){
 
 145                         msg = "Exception in Update ServiceInstance Rollback preProcessRequest " + ex.getMessage()
 
 147                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 149                 logger.trace("Exit preProcessRequest ")
 
 152         public void postProcessRequest(DelegateExecution execution) {
 
 153                 logger.trace("postProcessRequest ")
 
 156                         execution.setVariable("rollbackData", null)
 
 157                         String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 158                         boolean rollbackAAI = execution.getVariable("rollbackAAI")
 
 159                         boolean rollbackAdded = execution.getVariable("rollbackAdded")
 
 160                         boolean rollbackDeleted = execution.getVariable("rollbackDeleted")
 
 162                         List addResourceList = execution.getVariable("addResourceList_o")
 
 163                         List delResourceList = execution.getVariable("delResourceList_o")
 
 164                         execution.setVariable("addResourceList",  addResourceList)
 
 165                         execution.setVariable("delResourceList",  delResourceList)
 
 167                         if (rollbackAAI || rollbackAdded || rollbackDeleted)
 
 169                                 execution.setVariable("rolledBack", true)
 
 173                                 boolean succInAAI = execution.getVariable("GENDS_SuccessIndicator")
 
 175                                         execution.setVariable("rolledBack", false) //both sdnc and aai must be successful to declare rollback Succesful
 
 176                                         execution.setVariable("rollbackError", "Error deleting service-instance in AAI for rollback")
 
 177                                         logger.debug("Error deleting service-instance in AAI for rollback", + serviceInstanceId)
 
 180                         logger.trace("Exit postProcessRequest ")
 
 182                 } catch (BpmnError e) {
 
 183                         msg = "Exception in Create ServiceInstance Rollback postProcessRequest. " + e.getMessage()
 
 185                 } catch (Exception ex) {
 
 186                         msg = "Exception in Create ServiceInstance Rollback postProcessRequest. " + ex.getMessage()
 
 192     public void preProcessForAddResource(DelegateExecution execution) {
 
 195     public void postProcessForAddResource(DelegateExecution execution) {
 
 198     public void preProcessForDeleteResource(DelegateExecution execution) {
 
 201     public void postProcessForDeleteResource(DelegateExecution execution) {
 
 204         public void preProcessAAIPUT(DelegateExecution execution) {
 
 205                 def method = getClass().getSimpleName() + '.preProcessRequest(' +'execution=' + execution.getId() +')'
 
 206                 logger.info("Entered " + method)
 
 208                 logger.trace("preProcessAAIPUT ")
 
 210                 String serviceInstanceVersion = execution.getVariable("serviceInstanceVersion_n")
 
 211 //              execution.setVariable("GENPS_serviceResourceVersion", serviceInstanceVersion)
 
 213                 //requestDetails.modelInfo.for AAI PUT servieInstanceData
 
 214                 //requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData
 
 215                 String serviceInstanceName = execution.getVariable("serviceInstanceName")
 
 216                 String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 217                 //aai serviceType and Role can be setted as fixed value now.
 
 218                 String aaiServiceType = "E2E Service"
 
 219                 String aaiServiceRole = "E2E Service"
 
 220                 String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
 
 221                 String modelUuid = execution.getVariable("model-version-id-original")
 
 223                 org.onap.aai.domain.yang.ServiceInstance si = new org.onap.aai.domain.yang.ServiceInstance()
 
 224                 si.setServiceInstanceId(serviceInstanceId)
 
 225                 si.setServiceInstanceName(serviceInstanceName)
 
 226                 si.setServiceType(aaiServiceType)
 
 227                 si.setServiceRole(aaiServiceRole)
 
 228                 si.setModelInvariantId(modelInvariantUuid)
 
 229                 si.setModelVersionId(modelUuid)
 
 231                 execution.setVariable("serviceInstanceData", si)
 
 233                 logger.info("Exited " + method)
 
 236         public void updateServiceInstance(DelegateExecution execution) {
 
 237                 logger.trace("updateServiceInstance ")
 
 240                         String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 241                         org.onap.aai.domain.yang.ServiceInstance si = execution.getVariable("serviceInstanceData")
 
 243                         AAIResourcesClient client = new AAIResourcesClient()
 
 244                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
 
 245                         client.update(uri, si)
 
 247                 } catch (BpmnError e) {
 
 249                 } catch (Exception ex) {
 
 250                         msg = "Exception in DoCreateServiceInstance.updateServiceInstance. " + ex.getMessage()
 
 252                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 254                 logger.trace("Exit updateServiceInstance ")
 
 257         public void processRollbackException(DelegateExecution execution){
 
 258                 logger.trace("processRollbackException ")
 
 260                         logger.debug("Caught an Exception in DoUpdateE2EServiceInstanceRollback")
 
 261                         execution.setVariable("rollbackData", null)
 
 262                         execution.setVariable("rollbackError", "Caught exception in ServiceInstance Update Rollback")
 
 263                         execution.setVariable("WorkflowException", null)
 
 266                         logger.debug("BPMN Error during processRollbackExceptions Method: ")
 
 268                         logger.debug("Caught Exception during processRollbackExceptions Method: " + e.getMessage())
 
 271                 logger.debug(" Exit processRollbackException")
 
 274         public void processRollbackJavaException(DelegateExecution execution){
 
 275                 logger.trace("processRollbackJavaException ")
 
 277                         execution.setVariable("rollbackData", null)
 
 278                         execution.setVariable("rollbackError", "Caught Java exception in ServiceInstance Update Rollback")
 
 279                         logger.debug("Caught Exception in processRollbackJavaException")
 
 282                         logger.debug("Caught Exception in processRollbackJavaException " + e.getMessage())
 
 284                 logger.trace("Exit processRollbackJavaException ")