486125783387646c9bd060ff0f47f9a05aa8a4cd
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / adapter / network / tasks / NetworkAdapterRestV1.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.adapter.network.tasks;
22
23 import java.io.StringReader;
24 import java.util.Optional;
25
26 import javax.ws.rs.core.Response;
27 import javax.xml.bind.JAXBContext;
28 import javax.xml.bind.JAXBException;
29 import javax.xml.bind.Unmarshaller;
30
31 import org.camunda.bpm.engine.delegate.DelegateExecution;
32 import org.onap.so.adapters.nwrest.CreateNetworkError;
33 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
34 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
35 import org.onap.so.adapters.nwrest.DeleteNetworkError;
36 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
37 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
38 import org.onap.so.adapters.nwrest.UpdateNetworkError;
39 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
40 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
41 import org.onap.so.client.exception.ExceptionBuilder;
42 import org.onap.so.client.orchestration.NetworkAdapterResources;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.stereotype.Component;
47
48 @Component
49 public class NetworkAdapterRestV1 {
50
51         private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterRestV1.class);
52         
53         private static final String NETWORK_REQUEST = "networkAdapterRequest";
54         private static final String NETWORK_MESSAGE = "NetworkAResponse_MESSAGE";
55         private static final String NETWORK_SYNC_CODE = "NETWORKREST_networkAdapterStatusCode";
56         private static final String NETWORK_SYNC_RESPONSE = "NETWORKREST_networkAdapterResponse";
57         private static final String NETWORK_CORRELATOR = "NetworkAResponse_CORRELATOR";
58         
59         @Autowired
60         private ExceptionBuilder exceptionBuilder;
61
62         @Autowired
63         private NetworkAdapterResources networkAdapterResources;
64         
65         public void callNetworkAdapter (DelegateExecution execution) {
66                 try {
67                         Object networkAdapterRequest = execution.getVariable(NETWORK_REQUEST);
68                         if (networkAdapterRequest != null) {
69                                 Optional<Response> response = Optional.empty();
70                                 if (networkAdapterRequest instanceof CreateNetworkRequest) {
71                                         CreateNetworkRequest createNetworkRequest = (CreateNetworkRequest) networkAdapterRequest;
72                                         execution.setVariable(NETWORK_CORRELATOR, createNetworkRequest.getMessageId());
73                                         response = networkAdapterResources.createNetworkAsync(createNetworkRequest);
74                                 } else if (networkAdapterRequest instanceof DeleteNetworkRequest) {
75                                         DeleteNetworkRequest deleteNetworkRequest = (DeleteNetworkRequest) networkAdapterRequest;
76                                         execution.setVariable(NETWORK_CORRELATOR, deleteNetworkRequest.getMessageId());
77                                         response = networkAdapterResources.deleteNetworkAsync(deleteNetworkRequest);
78                                 } else if (networkAdapterRequest instanceof UpdateNetworkRequest) {
79                                         UpdateNetworkRequest updateNetworkRequest = (UpdateNetworkRequest) networkAdapterRequest;
80                                         execution.setVariable(NETWORK_CORRELATOR, updateNetworkRequest.getMessageId());
81                                         response = networkAdapterResources.updateNetworkAsync(updateNetworkRequest);
82                                 }
83                                 if(response.isPresent()) {
84                                         String statusCode = Integer.toString(response.get().getStatus());
85                                         String responseString = "";
86                                         if(response.get().getEntity() != null) {
87                                                 responseString = (String) response.get().getEntity();
88                                         }
89                                         execution.setVariable(NETWORK_SYNC_CODE, statusCode);
90                                         execution.setVariable(NETWORK_SYNC_RESPONSE, responseString);
91                                 } else {
92                                         throw new Exception("No Ack response from Openstack Adapter");
93                                 }
94                         } else {
95                                 throw new Exception("No Network Request was created. networkAdapterRequest was null.");
96                         }
97                 } catch (Exception ex) {
98                         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex);
99                 }
100         }
101         
102         public void processCallback (DelegateExecution execution) {
103                 try {
104                         Object networkAdapterRequest = execution.getVariable(NETWORK_REQUEST);
105                         String callback = (String) execution.getVariable(NETWORK_MESSAGE);
106                         String logCallbackMessage = "Callback from OpenstackAdapter: " + callback;
107                         logger.debug(logCallbackMessage);
108                         if (networkAdapterRequest != null) {
109                                 if (networkAdapterRequest instanceof CreateNetworkRequest) {
110                                         if(callback.contains("createNetworkError")) {
111                                                 CreateNetworkError createNetworkError = (CreateNetworkError) unmarshalXml(callback, CreateNetworkError.class);
112                                                 throw new Exception(createNetworkError.getMessage());
113                                         } else {
114                                                 CreateNetworkResponse createNetworkResponse = (CreateNetworkResponse) unmarshalXml(callback, CreateNetworkResponse.class);
115                                                 execution.setVariable("createNetworkResponse", createNetworkResponse);
116                                         }
117                                 } else if (networkAdapterRequest instanceof DeleteNetworkRequest) {
118                                         if(callback.contains("deleteNetworkError")) {
119                                                 DeleteNetworkError deleteNetworkError = (DeleteNetworkError) unmarshalXml(callback, DeleteNetworkError.class);
120                                                 throw new Exception(deleteNetworkError.getMessage());
121                                         } else {
122                                                 DeleteNetworkResponse deleteNetworkResponse = (DeleteNetworkResponse) unmarshalXml(callback, DeleteNetworkResponse.class);
123                                                 execution.setVariable("deleteNetworkResponse", deleteNetworkResponse);
124                                         }
125                                 } else if (networkAdapterRequest instanceof UpdateNetworkRequest) {
126                                         if (callback.contains("updateNetworkError")) {
127                                                 UpdateNetworkError updateNetworkError = (UpdateNetworkError) unmarshalXml(callback, UpdateNetworkError.class);
128                                                 throw new Exception(updateNetworkError.getMessage());
129                                         } else {
130                                                 UpdateNetworkResponse updateNetworkResponse = (UpdateNetworkResponse) unmarshalXml(callback, UpdateNetworkResponse.class);
131                                                 execution.setVariable("updateNetworkResponse", updateNetworkResponse);
132                                         }
133                                 }
134                         }
135                 } catch (Exception e) {
136                         logger.error("Error in Openstack Adapter callback", e);
137                         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage());
138                 }
139         }
140         
141         protected <T> Object unmarshalXml(String xmlString, Class<T> resultClass) throws JAXBException {
142                 StringReader reader = new StringReader(xmlString);
143                 JAXBContext context = JAXBContext.newInstance(resultClass);
144                 Unmarshaller unmarshaller = context.createUnmarshaller();
145                 return unmarshaller.unmarshal(reader);
146         }
147         
148         public void handleTimeOutException (DelegateExecution execution) {              
149                 exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "Error timed out waiting on Openstack Async-Response");
150         }
151         
152         public void handleSyncError (DelegateExecution execution) {
153                 String statusCode = (String) execution.getVariable(NETWORK_SYNC_CODE);
154                 String responseString = (String) execution.getVariable(NETWORK_SYNC_RESPONSE);
155                 String errorMessage = "Error with Openstack Adapter Sync Request: StatusCode = " + statusCode + " Response = " + responseString;
156                 exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, errorMessage);
157         }
158 }