1 package org.onap.so.bpmn.infrastructure.adapter.network.tasks;
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.onap.so.adapters.nwrest.CreateNetworkResponse;
12 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
13 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
14 import org.onap.so.bpmn.common.BuildingBlockExecution;
15 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
16 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
17 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
18 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
19 import org.onap.so.client.exception.ExceptionBuilder;
20 import org.onap.so.utils.Components;
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 NetworkAdapterImpl {
29 private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterImpl.class);
32 private ExtractPojosForBB extractPojosForBB;
35 private ExceptionBuilder exceptionUtil;
37 public void preProcessNetworkAdapter(BuildingBlockExecution execution) {
39 GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
40 ServiceInstance serviceInstance =
41 extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
42 execution.setVariable("mso-request-id", gBBInput.getRequestContext().getMsoRequestId());
43 execution.setVariable("mso-service-instance-id", serviceInstance.getServiceInstanceId());
44 } catch (Exception ex) {
45 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
49 public void postProcessNetworkAdapter(BuildingBlockExecution execution) {
51 String workflowResponse = (String) execution.getVariable("WorkflowResponse");
52 if (workflowResponse != null) {
53 Optional<String> responseType = findResponseType(workflowResponse);
54 if ("createNetworkResponse".equals(responseType.get())) {
55 CreateNetworkResponse createNetworkResponse =
56 (CreateNetworkResponse) unmarshalXml(workflowResponse, CreateNetworkResponse.class);
57 execution.setVariable("createNetworkResponse", createNetworkResponse);
58 } else if ("deleteNetworkResponse".equals(responseType.get())) {
59 DeleteNetworkResponse deleteNetworkResponse =
60 (DeleteNetworkResponse) unmarshalXml(workflowResponse, DeleteNetworkResponse.class);
61 execution.setVariable("deleteNetworkResponse", deleteNetworkResponse);
62 } else if ("updateNetworkResponse".equals(responseType.get())) {
63 UpdateNetworkResponse updateNetworkResponse =
64 (UpdateNetworkResponse) unmarshalXml(workflowResponse, UpdateNetworkResponse.class);
65 execution.setVariable("updateNetworkResponse", updateNetworkResponse);
67 logger.warn("Unable to determine network response type");
70 } catch (Exception e) {
71 logger.error("Error Network Adapter post process", e);
72 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e.getMessage(), Components.OPENSTACK);
76 protected <T> Object unmarshalXml(String xmlString, Class<T> resultClass) throws JAXBException {
77 StringReader reader = new StringReader(xmlString);
78 JAXBContext context = JAXBContext.newInstance(resultClass);
79 Unmarshaller unmarshaller = context.createUnmarshaller();
80 return unmarshaller.unmarshal(reader);
83 protected Optional<String> findResponseType(String xmlString) {
85 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
86 DocumentBuilder builder = factory.newDocumentBuilder();
87 org.w3c.dom.Document doc;
88 doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
89 return Optional.of(doc.getDocumentElement().getNodeName());
90 } catch (Exception e) {
91 logger.error("Error Finding Response Type", e);
92 return Optional.empty();