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