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