1 package org.onap.so.adapters.tasks.orchestration;
 
   3 import java.io.ByteArrayInputStream;
 
   4 import java.io.StringReader;
 
   5 import java.util.HashMap;
 
   7 import java.util.Optional;
 
   8 import javax.xml.bind.JAXB;
 
   9 import javax.xml.parsers.DocumentBuilder;
 
  10 import javax.xml.parsers.DocumentBuilderFactory;
 
  11 import javax.xml.ws.Holder;
 
  12 import org.camunda.bpm.client.task.ExternalTask;
 
  13 import org.camunda.bpm.client.task.ExternalTaskService;
 
  14 import org.onap.so.adapters.network.MsoNetworkAdapterImpl;
 
  15 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
 
  16 import org.onap.so.adapters.vnf.MsoVnfAdapterImpl;
 
  17 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
 
  18 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
 
  19 import org.onap.so.logging.tasks.AuditMDCSetup;
 
  20 import org.onap.so.utils.ExternalTaskUtils;
 
  21 import org.slf4j.Logger;
 
  22 import org.slf4j.LoggerFactory;
 
  23 import org.springframework.beans.factory.annotation.Autowired;
 
  24 import org.springframework.stereotype.Component;
 
  27 public class RollbackService extends ExternalTaskUtils {
 
  29     private static final Logger logger = LoggerFactory.getLogger(RollbackService.class);
 
  32     private MsoVnfAdapterImpl vnfAdapterImpl;
 
  35     private MsoNetworkAdapterImpl networkAdapterImpl;
 
  38     private AuditMDCSetup mdcSetup;
 
  40     public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
 
  41         mdcSetup.setupMDC(externalTask);
 
  42         logger.trace("Executing External Task Rollback Service");
 
  43         Map<String, Object> variables = new HashMap<>();
 
  44         boolean success = false;
 
  45         boolean pollRollbackStatus = false;
 
  47             String xmlRequest = externalTask.getVariable("openstackAdapterTaskRequest");
 
  48             if (xmlRequest != null) {
 
  49                 Optional<String> requestType = findRequestType(xmlRequest);
 
  50                 if ("createVolumeGroupRequest".equals(requestType.get())) {
 
  51                     logger.debug("Executing External Task Rollback Service for Create Volume Group");
 
  52                     CreateVolumeGroupRequest req =
 
  53                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVolumeGroupRequest.class);
 
  54                     vnfAdapterImpl.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
 
  55                             req.getVolumeGroupName(), req.getMsoRequest(), false);
 
  56                     pollRollbackStatus = true;
 
  58                 } else if ("createVfModuleRequest".equals(requestType.get())) {
 
  59                     logger.debug("Executing External Task Rollback Service for Create Vf Module");
 
  60                     CreateVfModuleRequest req =
 
  61                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVfModuleRequest.class);
 
  62                     vnfAdapterImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
 
  63                             req.getVfModuleName(), req.getVnfId(), req.getVfModuleId(), req.getModelCustomizationUuid(),
 
  64                             req.getMsoRequest(), new Holder<>());
 
  65                     pollRollbackStatus = true;
 
  67                 } else if ("createNetworkRequest".equals(requestType.get())) {
 
  68                     logger.debug("Executing External Task Rollback Service for Create Network");
 
  69                     Holder<Boolean> networkDeleted = new Holder<>();
 
  70                     CreateNetworkRequest req = JAXB.unmarshal(new StringReader(xmlRequest), CreateNetworkRequest.class);
 
  71                     networkAdapterImpl.deleteNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(),
 
  72                             req.getModelCustomizationUuid(), req.getNetworkName(), req.getMsoRequest(), networkDeleted,
 
  74                     pollRollbackStatus = true;
 
  78         } catch (Exception e) {
 
  79             logger.error("Error during External Task Rollback Service", e);
 
  81         variables.put("OpenstackRollbackSuccess", success);
 
  82         variables.put("rollbackPerformed", true);
 
  83         variables.put("PollRollbackStatus", pollRollbackStatus);
 
  85             externalTaskService.complete(externalTask, variables);
 
  86             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
 
  88             logger.debug("The External Task Id: {}  Failed. Not Retrying", externalTask.getId());
 
  89             externalTaskService.complete(externalTask, variables);
 
  93     protected Optional<String> findRequestType(String xmlString) {
 
  95             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 
  96             DocumentBuilder builder = factory.newDocumentBuilder();
 
  97             org.w3c.dom.Document doc;
 
  98             doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
 
  99             return Optional.of(doc.getDocumentElement().getNodeName());
 
 100         } catch (Exception e) {
 
 101             logger.error("Error Finding Request Type", e);
 
 102             return Optional.empty();