c25d752cc4967a4def92c1da4b02eecb49036f08
[so.git] /
1 package org.onap.so.adapters.tasks.orchestration;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.StringReader;
5 import java.util.HashMap;
6 import java.util.Map;
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;
25
26 @Component
27 public class RollbackService extends ExternalTaskUtils {
28
29     private static final Logger logger = LoggerFactory.getLogger(RollbackService.class);
30
31     @Autowired
32     private MsoVnfAdapterImpl vnfAdapterImpl;
33
34     @Autowired
35     private MsoNetworkAdapterImpl networkAdapterImpl;
36
37     @Autowired
38     private AuditMDCSetup mdcSetup;
39
40     public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
41         mdcSetup.setupMDC(externalTask);
42         logger.debug("Starting External Task Rollback Service");
43         Map<String, Object> variables = new HashMap<>();
44         boolean success = false;
45         boolean pollRollbackStatus = false;
46         try {
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;
57                     success = 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;
66                     success = 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,
73                             false);
74                     pollRollbackStatus = true;
75                     success = true;
76                 }
77             }
78         } catch (Exception e) {
79             logger.error("Error during External Task Rollback Service", e);
80         }
81         variables.put("OpenstackRollbackSuccess", success);
82         variables.put("rollbackPerformed", true);
83         variables.put("PollRollbackStatus", pollRollbackStatus);
84         if (success) {
85             externalTaskService.complete(externalTask, variables);
86             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
87         } else {
88             logger.debug("The External Task Id: {}  Failed. Not Retrying", externalTask.getId());
89             externalTaskService.complete(externalTask, variables);
90         }
91     }
92
93     protected Optional<String> findRequestType(String xmlString) {
94         try {
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();
103         }
104     }
105
106 }