fec7e8456ffdbd89d7863684270b09214ae9fac0
[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
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                                 }
79                                 if(response.isPresent()) {
80                                         String statusCode = Integer.toString(response.get().getStatus());
81                                         String responseString = "";
82                                         if(response.get().getEntity() != null) {
83                                                 responseString = (String) response.get().getEntity();
84                                         }
85                                         execution.setVariable(NETWORK_SYNC_CODE, statusCode);
86                                         execution.setVariable(NETWORK_SYNC_RESPONSE, responseString);
87                                 } else {
88                                         throw new Exception("No Ack response from Openstack Adapter");
89                                 }
90                         } else {
91                                 throw new Exception("No Network Request was created. networkAdapterRequest was null.");
92                         }
93                 } catch (Exception ex) {
94                         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, ex);
95                 }
96         }
97         
98         public void processCallback (DelegateExecution execution) {
99                 try {
100                         Object networkAdapterRequest = execution.getVariable(NETWORK_REQUEST);
101                         String callback = (String) execution.getVariable(NETWORK_MESSAGE);
102                         String logCallbackMessage = "Callback from OpenstackAdapter: " + callback;
103                         logger.debug(logCallbackMessage);
104                         if (networkAdapterRequest != null) {
105                                 if (networkAdapterRequest instanceof CreateNetworkRequest) {
106                                         if(callback.contains("createNetworkError")) {
107                                                 CreateNetworkError createNetworkError = (CreateNetworkError) unmarshalXml(callback, CreateNetworkError.class);
108                                                 throw new Exception(createNetworkError.getMessage());
109                                         } else {
110                                                 CreateNetworkResponse createNetworkResponse = (CreateNetworkResponse) unmarshalXml(callback, CreateNetworkResponse.class);
111                                                 execution.setVariable("createNetworkResponse", createNetworkResponse);
112                                         }
113                                 } else if (networkAdapterRequest instanceof DeleteNetworkRequest) {
114                                         if(callback.contains("deleteNetworkError")) {
115                                                 DeleteNetworkError deleteNetworkError = (DeleteNetworkError) unmarshalXml(callback, DeleteNetworkError.class);
116                                                 throw new Exception(deleteNetworkError.getMessage());
117                                         } else {
118                                                 DeleteNetworkResponse deleteNetworkResponse = (DeleteNetworkResponse) unmarshalXml(callback, DeleteNetworkResponse.class);
119                                                 execution.setVariable("deleteNetworkResponse", deleteNetworkResponse);
120                                         }
121                                 } else if (networkAdapterRequest instanceof UpdateNetworkRequest) {
122                                         if (callback.contains("updateNetworkError")) {
123                                                 UpdateNetworkError updateNetworkError = (UpdateNetworkError) unmarshalXml(callback, UpdateNetworkError.class);
124                                                 throw new Exception(updateNetworkError.getMessage());
125                                         } else {
126                                                 UpdateNetworkResponse updateNetworkResponse = (UpdateNetworkResponse) unmarshalXml(callback, UpdateNetworkResponse.class);
127                                                 execution.setVariable("updateNetworkResponse", updateNetworkResponse);
128                                         }
129                                 }
130                         }
131                 } catch (Exception e) {
132                         logger.error("Error in Openstack Adapter callback", e);
133                         exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, e.getMessage());
134                 }
135         }
136         
137         protected <T> Object unmarshalXml(String xmlString, Class<T> resultClass) throws JAXBException {
138                 StringReader reader = new StringReader(xmlString);
139                 JAXBContext context = JAXBContext.newInstance(resultClass);
140                 Unmarshaller unmarshaller = context.createUnmarshaller();
141                 return unmarshaller.unmarshal(reader);
142         }
143         
144         public void handleTimeOutException (DelegateExecution execution) {              
145                 exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, "Error timed out waiting on Openstack Async-Response");
146         }
147         
148         public void handleSyncError (DelegateExecution execution) {
149                 String statusCode = (String) execution.getVariable(NETWORK_SYNC_CODE);
150                 String responseString = (String) execution.getVariable(NETWORK_SYNC_RESPONSE);
151                 String errorMessage = "Error with Openstack Adapter Sync Request: StatusCode = " + statusCode + " Response = " + responseString;
152                 exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, errorMessage);
153         }
154 }