859db11037583049812d214c2fe5af75e93ea2c3
[so.git] /
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 import javax.ws.rs.core.Response;
26 import javax.xml.bind.JAXBContext;
27 import javax.xml.bind.JAXBException;
28 import javax.xml.bind.Unmarshaller;
29 import org.camunda.bpm.engine.delegate.DelegateExecution;
30 import org.onap.so.adapters.nwrest.CreateNetworkError;
31 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
32 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
33 import org.onap.so.adapters.nwrest.DeleteNetworkError;
34 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
35 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
36 import org.onap.so.adapters.nwrest.UpdateNetworkError;
37 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
38 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
39 import org.onap.so.client.exception.ExceptionBuilder;
40 import org.onap.so.client.orchestration.NetworkAdapterResources;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.stereotype.Component;
45
46 @Component
47 public class NetworkAdapterRestV1 {
48
49     private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterRestV1.class);
50
51     private static final String NETWORK_REQUEST = "networkAdapterRequest";
52     private static final String NETWORK_MESSAGE = "NetworkAResponse_MESSAGE";
53     private static final String NETWORK_SYNC_CODE = "NETWORKREST_networkAdapterStatusCode";
54     private static final String NETWORK_SYNC_RESPONSE = "NETWORKREST_networkAdapterResponse";
55     private static final String NETWORK_CORRELATOR = "NetworkAResponse_CORRELATOR";
56
57     @Autowired
58     private ExceptionBuilder exceptionBuilder;
59
60     @Autowired
61     private NetworkAdapterResources networkAdapterResources;
62
63     public void callNetworkAdapter(DelegateExecution execution) {
64         try {
65             Object networkAdapterRequest = execution.getVariable(NETWORK_REQUEST);
66             if (networkAdapterRequest != null) {
67                 Optional<Response> response = Optional.empty();
68                 if (networkAdapterRequest instanceof CreateNetworkRequest) {
69                     CreateNetworkRequest createNetworkRequest = (CreateNetworkRequest) networkAdapterRequest;
70                     execution.setVariable(NETWORK_CORRELATOR, createNetworkRequest.getMessageId());
71                     response = networkAdapterResources.createNetworkAsync(createNetworkRequest);
72                 } else if (networkAdapterRequest instanceof DeleteNetworkRequest) {
73                     DeleteNetworkRequest deleteNetworkRequest = (DeleteNetworkRequest) networkAdapterRequest;
74                     execution.setVariable(NETWORK_CORRELATOR, deleteNetworkRequest.getMessageId());
75                     response = networkAdapterResources.deleteNetworkAsync(deleteNetworkRequest);
76                 } else if (networkAdapterRequest instanceof UpdateNetworkRequest) {
77                     UpdateNetworkRequest updateNetworkRequest = (UpdateNetworkRequest) networkAdapterRequest;
78                     execution.setVariable(NETWORK_CORRELATOR, updateNetworkRequest.getMessageId());
79                     response = networkAdapterResources.updateNetworkAsync(updateNetworkRequest);
80                 }
81                 if (response.isPresent()) {
82                     String statusCode = Integer.toString(response.get().getStatus());
83                     String responseString = "";
84                     if (response.get().getEntity() != null) {
85                         responseString = (String) response.get().getEntity();
86                     }
87                     execution.setVariable(NETWORK_SYNC_CODE, statusCode);
88                     execution.setVariable(NETWORK_SYNC_RESPONSE, responseString);
89                 } else {
90                     throw new Exception("No Ack response from Openstack Adapter");
91                 }
92             } else {
93                 throw new Exception("No Network Request was created. networkAdapterRequest was null.");
94             }
95         } catch (Exception ex) {
96             exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex);
97         }
98     }
99
100     public void processCallback(DelegateExecution execution) {
101         try {
102             Object networkAdapterRequest = execution.getVariable(NETWORK_REQUEST);
103             String callback = (String) execution.getVariable(NETWORK_MESSAGE);
104             String logCallbackMessage = "Callback from OpenstackAdapter: " + callback;
105             logger.debug(logCallbackMessage);
106             if (networkAdapterRequest != null) {
107                 if (networkAdapterRequest instanceof CreateNetworkRequest) {
108                     if (callback.contains("createNetworkError")) {
109                         CreateNetworkError createNetworkError =
110                                 (CreateNetworkError) unmarshalXml(callback, CreateNetworkError.class);
111                         throw new Exception(createNetworkError.getMessage());
112                     } else {
113                         CreateNetworkResponse createNetworkResponse =
114                                 (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 =
120                                 (DeleteNetworkError) unmarshalXml(callback, DeleteNetworkError.class);
121                         throw new Exception(deleteNetworkError.getMessage());
122                     } else {
123                         DeleteNetworkResponse deleteNetworkResponse =
124                                 (DeleteNetworkResponse) unmarshalXml(callback, DeleteNetworkResponse.class);
125                         execution.setVariable("deleteNetworkResponse", deleteNetworkResponse);
126                     }
127                 } else if (networkAdapterRequest instanceof UpdateNetworkRequest) {
128                     if (callback.contains("updateNetworkError")) {
129                         UpdateNetworkError updateNetworkError =
130                                 (UpdateNetworkError) unmarshalXml(callback, UpdateNetworkError.class);
131                         throw new Exception(updateNetworkError.getMessage());
132                     } else {
133                         UpdateNetworkResponse updateNetworkResponse =
134                                 (UpdateNetworkResponse) unmarshalXml(callback, UpdateNetworkResponse.class);
135                         execution.setVariable("updateNetworkResponse", updateNetworkResponse);
136                     }
137                 }
138             }
139         } catch (Exception e) {
140             logger.error("Error in Openstack Adapter callback", e);
141             exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage());
142         }
143     }
144
145     protected <T> Object unmarshalXml(String xmlString, Class<T> resultClass) throws JAXBException {
146         StringReader reader = new StringReader(xmlString);
147         JAXBContext context = JAXBContext.newInstance(resultClass);
148         Unmarshaller unmarshaller = context.createUnmarshaller();
149         return unmarshaller.unmarshal(reader);
150     }
151
152     public void handleTimeOutException(DelegateExecution execution) {
153         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000,
154                 "Error timed out waiting on Openstack Async-Response");
155     }
156
157     public void handleSyncError(DelegateExecution execution) {
158         String statusCode = (String) execution.getVariable(NETWORK_SYNC_CODE);
159         String responseString = (String) execution.getVariable(NETWORK_SYNC_RESPONSE);
160         String errorMessage = "Error with Openstack Adapter Sync Request: StatusCode = " + statusCode + " Response = "
161                 + responseString;
162         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, errorMessage);
163     }
164 }