2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.vid.mso.rest;
23 import com.google.common.collect.ImmutableMap;
24 import io.joshworks.restclient.http.HttpResponse;
25 import io.joshworks.restclient.http.JsonNode;
26 import java.text.DateFormat;
27 import java.text.SimpleDateFormat;
28 import java.util.Date;
29 import java.util.HashMap;
31 import javax.ws.rs.core.HttpHeaders;
32 import javax.ws.rs.core.MediaType;
33 import org.apache.commons.codec.binary.Base64;
34 import org.eclipse.jetty.util.security.Password;
35 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
36 import org.onap.portalsdk.core.util.SystemProperties;
37 import org.onap.vid.aai.util.HttpsAuthClient;
38 import org.onap.vid.changeManagement.MsoRequestDetails;
39 import org.onap.vid.changeManagement.RequestDetailsWrapper;
40 import org.onap.vid.changeManagement.WorkflowRequestDetail;
41 import org.onap.vid.client.SyncRestClient;
42 import org.onap.vid.model.RequestReferencesContainer;
43 import org.onap.vid.mso.MsoInterface;
44 import org.onap.vid.mso.MsoProperties;
45 import org.onap.vid.mso.MsoResponseWrapper;
46 import org.onap.vid.mso.MsoResponseWrapperInterface;
47 import org.onap.vid.mso.MsoUtil;
48 import org.onap.vid.mso.RestMsoImplementation;
49 import org.onap.vid.mso.RestObject;
50 import org.onap.vid.utils.Logging;
54 * Created by pickjonathan on 21/06/2017.
56 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
59 * The Constant dateFormat.
61 public static final String X_FROM_APP_ID = "X-FromAppId";
62 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
63 private static final String START = " start";
64 private final SyncRestClient client;
65 private final String baseUrl;
66 private final Map<String, String> commonHeaders;
70 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
72 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient) {
75 this.baseUrl = baseUrl;
76 this.commonHeaders = initCommonHeaders();
80 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
81 String methodName = "createSvcInstance ";
82 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
83 String path = baseUrl + endpoint;
85 return createInstance(requestDetails, path);
89 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
90 String methodName = "createE2eSvcInstance ";
91 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
92 String path = baseUrl + endpoint;
94 return createInstance(requestDetails, path);
98 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
100 String methodName = "createVnf";
101 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
102 String path = baseUrl + endpoint;
104 return createInstance(requestDetails, path);
108 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
110 String methodName = "createNwInstance";
111 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
112 String path = baseUrl + endpoint;
114 return createInstance(requestDetails, path);
118 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
119 String methodName = "createVolumeGroupInstance";
120 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
121 String path = baseUrl + endpoint;
123 return createInstance(requestDetails, path);
127 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
128 String methodName = "createVfModuleInstance";
129 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
130 String path = baseUrl + endpoint;
132 return createInstance(requestDetails, path);
136 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
137 String methodName = "scaleOutVFModuleInstance";
138 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
139 String path = baseUrl + endpoint;
140 return createInstance(requestDetailsWrapper, path);
144 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
145 String methodName = "createConfigurationInstance";
146 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
147 String path = baseUrl + endpoint;
149 return createInstance(requestDetailsWrapper, path);
153 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
154 String methodName = "deleteE2eSvcInstance";
155 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
156 String path = baseUrl + endpoint;
157 return deleteInstance(requestDetails, path);
161 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
162 String methodName = "deleteSvcInstance";
163 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
164 String path = baseUrl + endpoint;
165 return deleteInstance(requestDetails, path);
169 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
170 String methodName = "unassignSvcInstance";
171 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
172 String path = baseUrl + endpoint;
174 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
175 return MsoUtil.wrapResponse(response);
179 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
180 String methodName = "deleteVnf";
181 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
182 String path = baseUrl + endpoint;
184 return deleteInstance(requestDetails, path);
188 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
189 String methodName = "deleteVfModule";
190 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
191 String path = baseUrl + endpoint;
193 return deleteInstance(requestDetails, path);
197 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
198 String methodName = "deleteVolumeGroupInstance";
199 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
200 String path = baseUrl + endpoint;
202 return deleteInstance(requestDetails, path);
206 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
207 String methodName = "deleteNwInstance";
208 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
209 String path = baseUrl + endpoint;
211 return deleteInstance(requestDetails, path);
215 public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
216 String path = baseUrl + endpoint;
218 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
219 return MsoUtil.wrapResponse(response);
223 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
224 String path = baseUrl + endpoint;
226 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
227 return MsoUtil.wrapResponse(response);
231 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
232 String methodName = "getManualTasksByRequestId";
233 logger.debug(methodName + START);
236 String path = baseUrl + endpoint;
238 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
239 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
241 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
244 } catch (Exception e) {
245 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
246 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
252 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
253 String methodName = "completeManualTask";
254 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
256 String path = baseUrl + endpoint;
258 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
259 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
261 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
264 } catch (Exception e) {
265 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
266 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
272 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
273 String methodName = "replaceVnf";
274 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
275 String path = baseUrl + endpoint;
276 return replaceInstance(requestDetails, path);
280 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
281 String methodName = "deleteConfiguration";
282 logger.debug(EELFLoggerDelegate.debugLogger,
284 String path = baseUrl + pmc_endpoint;
286 return deleteInstance(requestDetailsWrapper, path);
290 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
291 String methodName = "setConfigurationActiveStatus";
292 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
295 String path = baseUrl + endpoint;
297 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
298 + methodName + " calling change configuration active status, path =[" + path + "]");
299 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
300 return MsoUtil.wrapResponse(response);
301 } catch (Exception e) {
302 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
303 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
309 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
310 String methodName = "setPortOnConfigurationStatus";
311 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
314 String path = baseUrl + endpoint;
315 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
316 + methodName + " calling change port configuration status, path =[" + path + "]");
317 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
318 return MsoUtil.wrapResponse(response);
319 } catch (Exception e) {
320 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
321 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
327 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
328 String path = baseUrl + endpoint;
329 HttpResponse<RequestReferencesContainer> response = client.post(path, commonHeaders, requestDetails, RequestReferencesContainer.class);
330 return MsoUtil.wrapResponse(response);
333 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
334 String methodName = "replaceInstance";
335 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
338 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
339 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
340 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
342 HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
343 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
344 int status = msoResponseWrapperObject.getStatus();
346 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
347 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
349 logger.error(EELFLoggerDelegate.debugLogger, methodName +
350 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
353 return msoResponseWrapperObject;
355 } catch (Exception e) {
356 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
357 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
364 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
365 String methodName = "updateVnf";
366 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
367 String path = baseUrl + endpoint;
369 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
370 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
371 return updateInstance(requestDetails, path);
374 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
375 String methodName = "updateInstance";
376 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
379 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
381 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
382 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
383 HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
384 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
386 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
389 } catch (Exception e) {
390 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
391 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
397 public void setServiceInstanceStatus(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject<String> restObject) {
398 String methodName = "activateServiceInstance";
399 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
401 String path = baseUrl + endpoint;
402 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
403 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
404 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
406 } catch (Exception e) {
407 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
408 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
414 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
415 String methodName = "removeRelationshipFromServiceInstance";
416 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
419 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
420 String path = baseUrl + endpoint;
421 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
422 return MsoUtil.wrapResponse(response);
423 } catch (Exception e) {
424 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
425 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
431 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
432 String methodName = "addRelationshipToServiceInstance";
433 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
436 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
437 String path = baseUrl + addRelationshipsPath;
439 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
440 return MsoUtil.wrapResponse(response);
441 } catch (Exception e) {
442 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
443 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
449 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
450 String path = baseUrl + invokeWorkflowsPath;
451 Map<String, String> finalHeader = new HashMap<>();
453 finalHeader.putAll(commonHeaders);
454 finalHeader.putAll(extraHeaders);
456 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
458 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
459 return MsoUtil.wrapResponse(response);
463 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
464 String path = baseUrl + endpoint;
465 return client.get(path, commonHeaders, new HashMap<>(), responseClass);
469 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
470 String path = baseUrl + endpoint;
472 return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
476 private MsoResponseWrapper createInstance(Object request, String path) {
477 String methodName = "createInstance";
478 logger.debug(methodName + START);
481 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
482 return MsoUtil.wrapResponse(response);
483 } catch (Exception e) {
484 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
485 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
493 * @param request the request
494 * @param path the path
495 * @return the mso response wrapper
496 * @throws Exception the exception
498 private MsoResponseWrapper deleteInstance(Object request, String path) {
499 String methodName = "deleteInstance";
500 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
503 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
505 HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
506 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
508 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
511 } catch (Exception e) {
512 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
513 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
519 private Map<String, String> initCommonHeaders() {
520 String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME);
521 String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD);
522 String decrypted_password = Password.deobfuscate(password);
524 String authString = username + ":" + decrypted_password;
526 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
527 String authStringEnc = new String(authEncBytes);
529 Map<String, String> map = new HashMap<>();
530 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
531 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
532 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
533 map.put(X_FROM_APP_ID, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
534 map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
535 return ImmutableMap.copyOf(map);