move network adapter to an external client task
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / adapter / network / tasks / NetworkAdapterImpl.java
1 package org.onap.so.bpmn.infrastructure.adapter.network.tasks;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.StringReader;
5 import java.util.Optional;
6 import javax.xml.bind.JAXBContext;
7 import javax.xml.bind.JAXBException;
8 import javax.xml.bind.Unmarshaller;
9 import javax.xml.parsers.DocumentBuilder;
10 import javax.xml.parsers.DocumentBuilderFactory;
11 import org.camunda.bpm.engine.delegate.DelegateExecution;
12 import org.onap.so.adapters.nwrest.CreateNetworkError;
13 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
14 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
15 import org.onap.so.adapters.nwrest.DeleteNetworkError;
16 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
17 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
18 import org.onap.so.adapters.nwrest.UpdateNetworkError;
19 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
20 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
21 import org.onap.so.bpmn.common.BuildingBlockExecution;
22 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
23 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
24 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
25 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
26 import org.onap.so.client.exception.ExceptionBuilder;
27 import org.onap.so.utils.Components;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30 import org.springframework.beans.factory.annotation.Autowired;
31 import org.springframework.stereotype.Component;
32
33 @Component
34 public class NetworkAdapterImpl {
35
36     private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterImpl.class);
37
38     @Autowired
39     private ExtractPojosForBB extractPojosForBB;
40
41     @Autowired
42     private ExceptionBuilder exceptionUtil;
43
44     public void preProcessNetworkAdapter(BuildingBlockExecution execution) {
45         try {
46             GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
47             ServiceInstance serviceInstance =
48                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
49             execution.setVariable("mso-request-id", gBBInput.getRequestContext().getMsoRequestId());
50             execution.setVariable("mso-service-instance-id", serviceInstance.getServiceInstanceId());
51         } catch (Exception ex) {
52             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
53         }
54     }
55
56     public void postProcessNetworkAdapter(BuildingBlockExecution execution) {
57         try {
58             String workflowResponse = (String) execution.getVariable("WorkflowResponse");
59             if (workflowResponse != null) {
60                 Optional<String> responseType = findResponseType(workflowResponse);
61                 if ("createNetworkResponse".equals(responseType.get())) {
62                     CreateNetworkResponse createNetworkResponse =
63                             (CreateNetworkResponse) unmarshalXml(workflowResponse, CreateNetworkResponse.class);
64                     execution.setVariable("createNetworkResponse", createNetworkResponse);
65                 } else if ("deleteNetworkResponse".equals(responseType.get())) {
66                     DeleteNetworkResponse deleteNetworkResponse =
67                             (DeleteNetworkResponse) unmarshalXml(workflowResponse, DeleteNetworkResponse.class);
68                     execution.setVariable("deleteNetworkResponse", deleteNetworkResponse);
69                 } else if ("updateNetworkResponse".equals(responseType.get())) {
70                     UpdateNetworkResponse updateNetworkResponse =
71                             (UpdateNetworkResponse) unmarshalXml(workflowResponse, UpdateNetworkResponse.class);
72                     execution.setVariable("updateNetworkResponse", updateNetworkResponse);
73                 } else {
74                     logger.warn("Unable to determine network response type");
75                 }
76             }
77         } catch (Exception e) {
78             logger.error("Error Network Adapter post process", e);
79             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e.getMessage(), Components.OPENSTACK);
80         }
81     }
82
83     protected <T> Object unmarshalXml(String xmlString, Class<T> resultClass) throws JAXBException {
84         StringReader reader = new StringReader(xmlString);
85         JAXBContext context = JAXBContext.newInstance(resultClass);
86         Unmarshaller unmarshaller = context.createUnmarshaller();
87         return unmarshaller.unmarshal(reader);
88     }
89
90     protected Optional<String> findResponseType(String xmlString) {
91         try {
92             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
93             DocumentBuilder builder = factory.newDocumentBuilder();
94             org.w3c.dom.Document doc;
95             doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
96             return Optional.of(doc.getDocumentElement().getNodeName());
97         } catch (Exception e) {
98             logger.error("Error Finding Response Type", e);
99             return Optional.empty();
100         }
101     }
102
103 }