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 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;
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;
57 * Created by pickjonathan on 21/06/2017.
59 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
62 * The Constant dateFormat.
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;
73 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
75 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient, SystemPropertiesWrapper systemPropertiesWrapper) {
76 super(authClient,systemPropertiesWrapper);
78 this.baseUrl = baseUrl;
79 this.commonHeaders = initCommonHeaders();
83 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
84 String methodName = "createSvcInstance ";
85 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
86 String path = baseUrl + endpoint;
88 return createInstance(requestDetails, path);
92 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
93 String methodName = "createE2eSvcInstance ";
94 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
95 String path = baseUrl + endpoint;
97 return createInstance(requestDetails, path);
101 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
103 String methodName = "createVnf";
104 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
105 String path = baseUrl + endpoint;
107 return createInstance(requestDetails, path);
111 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
113 String methodName = "createNwInstance";
114 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
115 String path = baseUrl + endpoint;
117 return createInstance(requestDetails, path);
121 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
122 String methodName = "createVolumeGroupInstance";
123 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
124 String path = baseUrl + endpoint;
126 return createInstance(requestDetails, path);
130 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
131 String methodName = "createVfModuleInstance";
132 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
133 String path = baseUrl + endpoint;
135 return createInstance(requestDetails, path);
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);
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;
152 return createInstance(requestDetailsWrapper, path);
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);
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);
172 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
173 String methodName = "unassignSvcInstance";
174 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
175 String path = baseUrl + endpoint;
177 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
178 return MsoUtil.wrapResponse(response);
182 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
183 String methodName = "deleteVnf";
184 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
185 String path = baseUrl + endpoint;
187 return deleteInstance(requestDetails, path);
191 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
192 String methodName = "deleteVfModule";
193 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
194 String path = baseUrl + endpoint;
196 return deleteInstance(requestDetails, path);
200 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
201 String methodName = "deleteVolumeGroupInstance";
202 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
203 String path = baseUrl + endpoint;
205 return deleteInstance(requestDetails, path);
209 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
210 String methodName = "deleteNwInstance";
211 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
212 String path = baseUrl + endpoint;
214 return deleteInstance(requestDetails, path);
218 public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
219 String path = baseUrl + endpoint;
221 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
222 return MsoUtil.wrapResponse(response);
226 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
227 String path = baseUrl + endpoint;
229 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
230 return MsoUtil.wrapResponse(response);
234 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
235 String methodName = "getManualTasksByRequestId";
236 logger.debug(methodName + START);
239 String path = baseUrl + endpoint;
241 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
242 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
244 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
247 } catch (Exception e) {
248 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
249 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
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 ");
259 String path = baseUrl + endpoint;
261 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
262 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
264 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
267 } catch (Exception e) {
268 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
269 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
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);
283 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
284 String methodName = "deleteConfiguration";
285 logger.debug(EELFLoggerDelegate.debugLogger,
287 String path = baseUrl + pmc_endpoint;
289 return deleteInstance(requestDetailsWrapper, path);
293 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
294 String methodName = "setConfigurationActiveStatus";
295 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
298 String path = baseUrl + endpoint;
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());
312 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
313 String methodName = "setPortOnConfigurationStatus";
314 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
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());
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);
336 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
337 String methodName = "replaceInstance";
338 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
341 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
342 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
343 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
345 HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
346 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
347 int status = msoResponseWrapperObject.getStatus();
349 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
350 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
352 logger.error(EELFLoggerDelegate.debugLogger, methodName +
353 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
356 return msoResponseWrapperObject;
358 } catch (Exception e) {
359 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
360 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
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;
372 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
373 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
374 return updateInstance(requestDetails, path);
377 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
378 String methodName = "updateInstance";
379 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
382 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
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);
389 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
392 } catch (Exception e) {
393 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
394 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
400 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
402 String methodName = "activateServiceInstance";
403 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
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());
411 } catch (Exception e) {
412 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
413 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
419 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
420 String methodName = "removeRelationshipFromServiceInstance";
421 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
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());
436 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
437 String methodName = "addRelationshipToServiceInstance";
438 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
441 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
442 String path = baseUrl + addRelationshipsPath;
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());
454 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
455 String path = baseUrl + invokeWorkflowsPath;
456 Map<String, String> finalHeader = new HashMap<>();
458 finalHeader.putAll(commonHeaders);
459 finalHeader.putAll(extraHeaders);
461 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
463 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
464 return MsoUtil.wrapResponse(response);
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);
474 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
475 String path = baseUrl + endpoint;
477 return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
481 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
482 String path = baseUrl + endpoint;
484 return client.get(path, commonHeaders, Maps.newHashMap(), SOWorkflowList.class);
487 private MsoResponseWrapper createInstance(Object request, String path) {
488 String methodName = "createInstance";
489 logger.debug(methodName + START);
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());
504 * @param request the request
505 * @param path the path
506 * @return the mso response wrapper
507 * @throws Exception the exception
509 private MsoResponseWrapper deleteInstance(Object request, String path) {
510 String methodName = "deleteInstance";
511 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
514 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
516 HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
517 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
519 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
522 } catch (Exception e) {
523 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
524 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
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);
535 String authString = username + ":" + decrypted_password;
537 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
538 String authStringEnc = new String(authEncBytes);
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);