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