Sending workflow data from UI to SO
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / rest / MsoRestClientNew.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2018 - 2019 Nokia. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.vid.mso.rest;
22
23 import com.google.common.collect.ImmutableMap;
24 import io.joshworks.restclient.http.HttpResponse;
25 import io.joshworks.restclient.http.JsonNode;
26 import java.text.DateFormat;
27 import java.text.SimpleDateFormat;
28 import java.util.Date;
29 import java.util.HashMap;
30 import java.util.Map;
31 import javax.ws.rs.core.HttpHeaders;
32 import javax.ws.rs.core.MediaType;
33 import org.apache.commons.codec.binary.Base64;
34 import org.eclipse.jetty.util.security.Password;
35 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
36 import org.onap.portalsdk.core.util.SystemProperties;
37 import org.onap.vid.aai.util.HttpsAuthClient;
38 import org.onap.vid.changeManagement.MsoRequestDetails;
39 import org.onap.vid.changeManagement.RequestDetailsWrapper;
40 import org.onap.vid.changeManagement.WorkflowRequestDetail;
41 import org.onap.vid.client.SyncRestClient;
42 import org.onap.vid.model.RequestReferencesContainer;
43 import org.onap.vid.mso.MsoInterface;
44 import org.onap.vid.mso.MsoProperties;
45 import org.onap.vid.mso.MsoResponseWrapper;
46 import org.onap.vid.mso.MsoResponseWrapperInterface;
47 import org.onap.vid.mso.MsoUtil;
48 import org.onap.vid.mso.RestMsoImplementation;
49 import org.onap.vid.mso.RestObject;
50 import org.onap.vid.utils.Logging;
51
52
53 /**
54  * Created by pickjonathan on 21/06/2017.
55  */
56 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
57
58     /**
59      * The Constant dateFormat.
60      */
61     public static final String X_FROM_APP_ID = "X-FromAppId";
62     final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
63     private static final String START = " start";
64     private final SyncRestClient client;
65     private final String baseUrl;
66     private final Map<String, String> commonHeaders;
67     /**
68      * The logger.
69      */
70     EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
71
72     public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient) {
73         super(authClient);
74         this.client = client;
75         this.baseUrl = baseUrl;
76         this.commonHeaders = initCommonHeaders();
77     }
78
79     @Override
80     public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
81         String methodName = "createSvcInstance ";
82         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
83         String path = baseUrl + endpoint;
84
85         return createInstance(requestDetails, path);
86     }
87     
88     @Override
89     public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
90         String methodName = "createE2eSvcInstance ";
91         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
92         String path = baseUrl + endpoint;
93
94         return createInstance(requestDetails, path);
95     }
96
97     @Override
98     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
99
100         String methodName = "createVnf";
101         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
102         String path = baseUrl + endpoint;
103
104         return createInstance(requestDetails, path);
105     }
106
107     @Override
108     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
109
110         String methodName = "createNwInstance";
111         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
112         String path = baseUrl + endpoint;
113
114         return createInstance(requestDetails, path);
115     }
116
117     @Override
118     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
119         String methodName = "createVolumeGroupInstance";
120         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
121         String path = baseUrl + endpoint;
122
123         return createInstance(requestDetails, path);
124     }
125
126     @Override
127     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
128         String methodName = "createVfModuleInstance";
129         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
130         String path = baseUrl + endpoint;
131
132         return createInstance(requestDetails, path);
133     }
134
135     @Override
136     public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
137         String methodName = "scaleOutVFModuleInstance";
138         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
139         String path = baseUrl + endpoint;
140         return createInstance(requestDetailsWrapper, path);
141     }
142
143     @Override
144     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
145         String methodName = "createConfigurationInstance";
146         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
147         String path = baseUrl + endpoint;
148
149         return createInstance(requestDetailsWrapper, path);
150     }
151
152     @Override
153     public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
154         String methodName = "deleteE2eSvcInstance";
155         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
156         String path = baseUrl + endpoint;
157         return deleteInstance(requestDetails, path);
158     }
159
160     @Override
161     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
162         String methodName = "deleteSvcInstance";
163         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
164         String path = baseUrl + endpoint;
165         return deleteInstance(requestDetails, path);
166     }
167
168     @Override
169     public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
170         String methodName = "unassignSvcInstance";
171         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
172         String path = baseUrl + endpoint;
173
174         HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
175         return MsoUtil.wrapResponse(response);
176     }
177
178     @Override
179     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
180         String methodName = "deleteVnf";
181         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
182         String path = baseUrl + endpoint;
183
184         return deleteInstance(requestDetails, path);
185     }
186
187     @Override
188     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
189         String methodName = "deleteVfModule";
190         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
191         String path = baseUrl + endpoint;
192
193         return deleteInstance(requestDetails, path);
194     }
195
196     @Override
197     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
198         String methodName = "deleteVolumeGroupInstance";
199         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
200         String path = baseUrl + endpoint;
201
202         return deleteInstance(requestDetails, path);
203     }
204
205     @Override
206     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
207         String methodName = "deleteNwInstance";
208         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
209         String path = baseUrl + endpoint;
210
211         return deleteInstance(requestDetails, path);
212     }
213
214     @Override
215     public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
216         String path = baseUrl + endpoint;
217
218         HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
219         return MsoUtil.wrapResponse(response);
220     }
221
222     @Override
223     public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
224         String path = baseUrl + endpoint;
225
226         HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
227         return MsoUtil.wrapResponse(response);
228     }
229
230     @Override
231     public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
232         String methodName = "getManualTasksByRequestId";
233         logger.debug(methodName + START);
234
235         try {
236             String path = baseUrl + endpoint;
237
238             HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
239             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
240
241             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
242             return w;
243
244         } catch (Exception e) {
245             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
246             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
247             throw e;
248         }
249     }
250
251     @Override
252     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
253         String methodName = "completeManualTask";
254         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
255         try {
256             String path = baseUrl + endpoint;
257
258             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
259             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
260
261             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
262             return w;
263
264         } catch (Exception e) {
265             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
266             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
267             throw e;
268         }
269     }
270
271     @Override
272     public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
273         String methodName = "replaceVnf";
274         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
275         String path = baseUrl + endpoint;
276         return replaceInstance(requestDetails, path);
277     }
278
279     @Override
280     public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
281         String methodName = "deleteConfiguration";
282         logger.debug(EELFLoggerDelegate.debugLogger,
283                 methodName + START);
284         String path = baseUrl + pmc_endpoint;
285
286         return deleteInstance(requestDetailsWrapper, path);
287     }
288
289     @Override
290     public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
291         String methodName = "setConfigurationActiveStatus";
292         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
293
294         try {
295             String path = baseUrl + endpoint;
296
297             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
298                   + methodName + " calling change configuration active status, path =[" + path + "]");
299             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
300             return MsoUtil.wrapResponse(response);
301         } catch (Exception e) {
302             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
303             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
304             throw e;
305         }
306     }
307
308     @Override
309     public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
310         String methodName = "setPortOnConfigurationStatus";
311         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
312
313         try {
314             String path = baseUrl + endpoint;
315             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
316                 + methodName + " calling change port configuration status, path =[" + path + "]");
317             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
318             return MsoUtil.wrapResponse(response);
319         } catch (Exception e) {
320             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
321             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
322             throw e;
323         }
324     }
325
326     @Override
327     public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
328         String path = baseUrl + endpoint;
329         HttpResponse<RequestReferencesContainer> response = client.post(path, commonHeaders, requestDetails, RequestReferencesContainer.class);
330         return MsoUtil.wrapResponse(response);
331     }
332
333     public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
334         String methodName = "replaceInstance";
335         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
336
337         try {
338             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
339             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
340             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
341
342             HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
343             MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
344             int status = msoResponseWrapperObject.getStatus();
345             if (status == 202) {
346                 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
347                         ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
348             } else {
349                 logger.error(EELFLoggerDelegate.debugLogger, methodName +
350                         ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
351
352             }
353             return msoResponseWrapperObject;
354
355         } catch (Exception e) {
356             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
357             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
358             throw e;
359         }
360
361     }
362
363     @Override
364     public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
365         String methodName = "updateVnf";
366         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
367         String path = baseUrl + endpoint;
368
369         RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
370         wrapper.requestDetails = new MsoRequestDetails(requestDetails);
371         return updateInstance(requestDetails, path);
372     }
373
374     public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
375         String methodName = "updateInstance";
376         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
377
378         try {
379             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
380
381             RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
382             requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
383             HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
384             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
385
386             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
387             return w;
388
389         } catch (Exception e) {
390             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
391             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
392             throw e;
393         }
394
395     }
396
397     public void setServiceInstanceStatus(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject<String> restObject) {
398         String methodName = "activateServiceInstance";
399         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
400         try {
401             String path = baseUrl + endpoint;
402             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
403             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
404             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
405
406         } catch (Exception e) {
407             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
408             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
409             throw e;
410         }
411     }
412
413     @Override
414     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
415         String methodName = "removeRelationshipFromServiceInstance";
416         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
417
418         try {
419             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
420             String path = baseUrl + endpoint;
421             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
422             return MsoUtil.wrapResponse(response);
423         } catch (Exception e) {
424             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
425             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
426             throw e;
427         }
428     }
429
430     @Override
431     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
432         String methodName = "addRelationshipToServiceInstance";
433         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
434
435         try {
436             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
437             String path = baseUrl + addRelationshipsPath;
438
439             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
440             return MsoUtil.wrapResponse(response);
441         } catch (Exception e) {
442             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
443             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
444             throw e;
445         }
446     }
447
448     @Override
449     public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
450         String path = baseUrl + invokeWorkflowsPath;
451         Map<String, String> finalHeader = new HashMap<>();
452
453         finalHeader.putAll(commonHeaders);
454         finalHeader.putAll(extraHeaders);
455
456         RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
457
458         HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
459         return MsoUtil.wrapResponse(response);
460     }
461
462     @Override
463     public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
464         String path = baseUrl + endpoint;
465         return client.get(path, commonHeaders, new HashMap<>(), responseClass);
466     }
467
468     @Override
469     public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
470         String path = baseUrl + endpoint;
471
472         return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
473     }
474
475
476     private MsoResponseWrapper createInstance(Object request, String path) {
477         String methodName = "createInstance";
478         logger.debug(methodName + START);
479
480         try {
481             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
482             return MsoUtil.wrapResponse(response);
483         } catch (Exception e) {
484             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
485             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
486             throw e;
487         }
488     }
489
490     /**
491      * Delete instance.
492      *
493      * @param request the request
494      * @param path    the path
495      * @return the mso response wrapper
496      * @throws Exception the exception
497      */
498     private MsoResponseWrapper deleteInstance(Object request, String path) {
499         String methodName = "deleteInstance";
500         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
501
502         try {
503             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
504
505             HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
506             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
507
508             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
509             return w;
510
511         } catch (Exception e) {
512             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
513             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
514             throw e;
515         }
516
517     }
518
519     private Map<String, String> initCommonHeaders() {
520         String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME);
521         String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD);
522         String decrypted_password = Password.deobfuscate(password);
523
524         String authString = username + ":" + decrypted_password;
525
526         byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
527         String authStringEnc = new String(authEncBytes);
528
529         Map<String, String> map = new HashMap<>();
530         map.put(HttpHeaders.AUTHORIZATION,  "Basic " + authStringEnc);
531         map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
532         map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
533         map.put(X_FROM_APP_ID, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
534         map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
535         return ImmutableMap.copyOf(map);
536     }
537
538 }