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