Merge "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 MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
401         String endpoint) {
402         String methodName = "activateServiceInstance";
403         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
404         try {
405             String path = baseUrl + endpoint;
406             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
407             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
408             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
409             return w;
410
411         } catch (Exception e) {
412             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
413             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
414             throw e;
415         }
416     }
417
418     @Override
419     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
420         String methodName = "removeRelationshipFromServiceInstance";
421         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
422
423         try {
424             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
425             String path = baseUrl + endpoint;
426             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
427             return MsoUtil.wrapResponse(response);
428         } catch (Exception e) {
429             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
430             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
431             throw e;
432         }
433     }
434
435     @Override
436     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
437         String methodName = "addRelationshipToServiceInstance";
438         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
439
440         try {
441             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
442             String path = baseUrl + addRelationshipsPath;
443
444             HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
445             return MsoUtil.wrapResponse(response);
446         } catch (Exception e) {
447             logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
448             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
449             throw e;
450         }
451     }
452
453     @Override
454     public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
455         String path = baseUrl + invokeWorkflowsPath;
456         Map<String, String> finalHeader = new HashMap<>();
457
458         finalHeader.putAll(commonHeaders);
459         finalHeader.putAll(extraHeaders);
460
461         RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
462
463         HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
464         return MsoUtil.wrapResponse(response);
465     }
466
467     @Override
468     public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
469         String path = baseUrl + endpoint;
470         return client.get(path, commonHeaders, new HashMap<>(), responseClass);
471     }
472
473     @Override
474     public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
475         String path = baseUrl + endpoint;
476
477         return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
478     }
479
480
481     public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
482         String path = baseUrl + endpoint;
483
484         return client.get(path, commonHeaders, Maps.newHashMap(), SOWorkflowList.class);
485     }
486
487     private MsoResponseWrapper createInstance(Object request, String path) {
488         String methodName = "createInstance";
489         logger.debug(methodName + START);
490
491         try {
492             HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
493             return MsoUtil.wrapResponse(response);
494         } catch (Exception e) {
495             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
496             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
497             throw e;
498         }
499     }
500
501     /**
502      * Delete instance.
503      *
504      * @param request the request
505      * @param path    the path
506      * @return the mso response wrapper
507      * @throws Exception the exception
508      */
509     private MsoResponseWrapper deleteInstance(Object request, String path) {
510         String methodName = "deleteInstance";
511         logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
512
513         try {
514             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
515
516             HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
517             MsoResponseWrapper w = MsoUtil.wrapResponse(response);
518
519             logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
520             return w;
521
522         } catch (Exception e) {
523             logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
524             logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
525             throw e;
526         }
527
528     }
529
530     private Map<String, String> initCommonHeaders() {
531         String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
532         String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
533         String decrypted_password = Password.deobfuscate(password);
534
535         String authString = username + ":" + decrypted_password;
536
537         byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
538         String authStringEnc = new String(authEncBytes);
539
540         Map<String, String> map = new HashMap<>();
541         map.put(HttpHeaders.AUTHORIZATION,  "Basic " + authStringEnc);
542         map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
543         map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
544         map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
545         map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
546         return ImmutableMap.copyOf(map);
547     }
548
549 }