c302293169001853de2ad5bbed83d8b31a386429
[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.vnf.MsoVnfAdapterImpl;
15 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
16 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
17 import org.onap.so.logging.tasks.AuditMDCSetup;
18 import org.onap.so.utils.ExternalTaskUtils;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Component;
23
24 @Component
25 public class RollbackService extends ExternalTaskUtils {
26
27     private static final Logger logger = LoggerFactory.getLogger(RollbackService.class);
28
29     @Autowired
30     private MsoVnfAdapterImpl vnfAdapterImpl;
31
32     @Autowired
33     private AuditMDCSetup mdcSetup;
34
35     public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
36         mdcSetup.setupMDC(externalTask);
37         logger.trace("Executing External Task Rollback Service");
38         Map<String, Object> variables = new HashMap<>();
39         boolean success = false;
40         boolean pollRollbackStatus = false;
41         try {
42             String xmlRequest = externalTask.getVariable("vnfAdapterTaskRequest");
43             if (xmlRequest != null) {
44                 Optional<String> requestType = findRequestType(xmlRequest);
45                 if ("createVolumeGroupRequest".equals(requestType.get())) {
46                     logger.debug("Executing External Task Rollback Service for Create Volume Group");
47                     CreateVolumeGroupRequest req =
48                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVolumeGroupRequest.class);
49                     vnfAdapterImpl.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
50                             req.getVolumeGroupName(), req.getMsoRequest(), false);
51                     pollRollbackStatus = true;
52                     success = true;
53                 } else if ("createVfModuleRequest".equals(requestType.get())) {
54                     logger.debug("Executing External Task Rollback Service for Create Vf Module");
55                     CreateVfModuleRequest req =
56                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVfModuleRequest.class);
57                     vnfAdapterImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
58                             req.getVfModuleName(), req.getVnfId(), req.getVfModuleId(), req.getModelCustomizationUuid(),
59                             req.getMsoRequest(), new Holder<>());
60                     pollRollbackStatus = true;
61                     success = true;
62                 }
63             }
64         } catch (Exception e) {
65             logger.error("Error during External Task Rollback Service", e);
66         }
67         variables.put("OpenstackRollbackSuccess", success);
68         variables.put("rollbackPerformed", true);
69         variables.put("PollRollbackStatus", pollRollbackStatus);
70         if (success) {
71             externalTaskService.complete(externalTask, variables);
72             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
73         } else {
74             logger.debug("The External Task Id: {}  Failed. Not Retrying", externalTask.getId());
75             externalTaskService.complete(externalTask, variables);
76         }
77     }
78
79     protected Optional<String> findRequestType(String xmlString) {
80         try {
81             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
82             DocumentBuilder builder = factory.newDocumentBuilder();
83             org.w3c.dom.Document doc;
84             doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
85             return Optional.of(doc.getDocumentElement().getNodeName());
86         } catch (Exception e) {
87             logger.error("Error Finding Request Type", e);
88             return Optional.empty();
89         }
90     }
91
92 }