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 static org.onap.vid.logging.Headers.PARTNER_NAME;
24 import static org.onap.vid.utils.Logging.ONAP_REQUEST_ID_HEADER_KEY;
26 import com.google.common.collect.ImmutableMap;
27 import com.google.common.collect.Maps;
28 import io.joshworks.restclient.http.HttpResponse;
29 import io.joshworks.restclient.http.JsonNode;
30 import java.text.DateFormat;
31 import java.text.SimpleDateFormat;
32 import java.util.Date;
33 import java.util.HashMap;
35 import javax.ws.rs.core.HttpHeaders;
36 import javax.ws.rs.core.MediaType;
37 import org.apache.commons.codec.binary.Base64;
38 import org.eclipse.jetty.util.security.Password;
39 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
40 import org.onap.portalsdk.core.util.SystemProperties;
41 import org.onap.vid.aai.HttpResponseWithRequestInfo;
42 import org.onap.vid.changeManagement.MsoRequestDetails;
43 import org.onap.vid.changeManagement.RequestDetailsWrapper;
44 import org.onap.vid.changeManagement.WorkflowRequestDetail;
45 import org.onap.vid.client.SyncRestClient;
46 import org.onap.vid.logging.Headers;
47 import org.onap.vid.model.RequestReferencesContainer;
48 import org.onap.vid.model.SOWorkflowList;
49 import org.onap.vid.mso.MsoInterface;
50 import org.onap.vid.mso.MsoProperties;
51 import org.onap.vid.mso.MsoResponseWrapper;
52 import org.onap.vid.mso.MsoResponseWrapperInterface;
53 import org.onap.vid.mso.MsoUtil;
54 import org.onap.vid.mso.RestObject;
55 import org.onap.vid.utils.Logging;
56 import org.onap.vid.utils.SystemPropertiesWrapper;
57 import org.springframework.http.HttpMethod;
61 * Created by pickjonathan on 21/06/2017.
63 public class MsoRestClientNew implements MsoInterface {
66 * The Constant dateFormat.
68 public static final String X_FROM_APP_ID = "X-FromAppId";
69 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
70 private static final String START = " start";
71 private final SyncRestClient client;
72 private final String baseUrl;
73 private final SystemPropertiesWrapper systemProperties;
74 private final Map<String, String> commonHeaders;
79 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
81 public MsoRestClientNew(SyncRestClient client, String baseUrl, SystemPropertiesWrapper systemPropertiesWrapper) {
83 this.baseUrl = baseUrl;
84 this.systemProperties = systemPropertiesWrapper;
85 this.commonHeaders = initCommonHeaders();
89 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
90 String methodName = "createSvcInstance ";
91 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
92 String path = baseUrl + endpoint;
94 return createInstance(requestDetails, path);
98 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
99 String methodName = "createE2eSvcInstance ";
100 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
101 String path = baseUrl + endpoint;
103 return createInstance(requestDetails, path);
107 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
109 String methodName = "createVnf";
110 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
111 String path = baseUrl + endpoint;
113 return createInstance(requestDetails, path);
117 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
119 String methodName = "createNwInstance";
120 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
121 String path = baseUrl + endpoint;
123 return createInstance(requestDetails, path);
127 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
128 String methodName = "createVolumeGroupInstance";
129 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
130 String path = baseUrl + endpoint;
132 return createInstance(requestDetails, path);
136 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
137 String methodName = "createVfModuleInstance";
138 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
139 String path = baseUrl + endpoint;
141 return createInstance(requestDetails, path);
145 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
146 String methodName = "scaleOutVFModuleInstance";
147 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
148 String path = baseUrl + endpoint;
149 return createInstance(requestDetailsWrapper, path);
153 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
154 String methodName = "createConfigurationInstance";
155 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
156 String path = baseUrl + endpoint;
158 return createInstance(requestDetailsWrapper, path);
162 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
163 String methodName = "deleteE2eSvcInstance";
164 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
165 String path = baseUrl + endpoint;
166 return deleteInstance(requestDetails, path);
170 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
171 String methodName = "deleteSvcInstance";
172 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
173 String path = baseUrl + endpoint;
174 return deleteInstance(requestDetails, path);
178 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
179 String methodName = "unassignSvcInstance";
180 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
181 String path = baseUrl + endpoint;
183 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
184 return MsoUtil.wrapResponse(response);
188 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
189 String methodName = "deleteVnf";
190 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
191 String path = baseUrl + endpoint;
193 return deleteInstance(requestDetails, path);
197 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
198 String methodName = "deleteVfModule";
199 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
200 String path = baseUrl + endpoint;
202 return deleteInstance(requestDetails, path);
206 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
207 String methodName = "deleteVolumeGroupInstance";
208 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
209 String path = baseUrl + endpoint;
211 return deleteInstance(requestDetails, path);
215 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
216 String methodName = "deleteNwInstance";
217 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
218 String path = baseUrl + endpoint;
220 return deleteInstance(requestDetails, path);
224 public HttpResponseWithRequestInfo<String> getOrchestrationRequest(String endpoint, boolean warpException) {
225 String path = baseUrl + endpoint;
227 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
228 return new HttpResponseWithRequestInfo<>(response, path, HttpMethod.GET);
232 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
233 String path = baseUrl + endpoint;
235 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
236 return MsoUtil.wrapResponse(response);
240 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
241 String methodName = "getManualTasksByRequestId";
242 logger.debug(methodName + START);
245 String path = baseUrl + endpoint;
247 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
248 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
250 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
253 } catch (Exception e) {
254 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
255 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
261 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
262 String methodName = "completeManualTask";
263 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
265 String path = baseUrl + endpoint;
267 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
268 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
270 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
273 } catch (Exception e) {
274 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
275 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
281 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
282 String methodName = "replaceVnf";
283 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
284 String path = baseUrl + endpoint;
285 return replaceInstance(requestDetails, path);
289 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
290 String methodName = "deleteConfiguration";
291 logger.debug(EELFLoggerDelegate.debugLogger,
293 String path = baseUrl + pmc_endpoint;
295 return deleteInstance(requestDetailsWrapper, path);
299 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
300 String methodName = "setConfigurationActiveStatus";
301 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
304 String path = baseUrl + endpoint;
306 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
307 + methodName + " calling change configuration active status, path =[" + path + "]");
308 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
309 return MsoUtil.wrapResponse(response);
310 } catch (Exception e) {
311 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
312 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
318 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
319 String methodName = "setPortOnConfigurationStatus";
320 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
323 String path = baseUrl + endpoint;
324 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
325 + methodName + " calling change port configuration status, path =[" + path + "]");
326 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
327 return MsoUtil.wrapResponse(response);
328 } catch (Exception e) {
329 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
330 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
336 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
337 String path = baseUrl + endpoint;
338 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
339 return MsoUtil.wrapResponse2(response, RequestReferencesContainer.class);
342 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
343 String methodName = "replaceInstance";
344 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
347 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
348 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
349 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
351 HttpResponse<String> response = client.post(path, getHeaders(), requestDetailsWrapper, String.class);
352 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
353 int status = msoResponseWrapperObject.getStatus();
355 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
356 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
358 logger.error(EELFLoggerDelegate.debugLogger, methodName +
359 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
362 return msoResponseWrapperObject;
364 } catch (Exception e) {
365 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
366 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
373 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
374 String methodName = "updateVnf";
375 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
376 String path = baseUrl + endpoint;
378 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
379 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
380 return updateInstance(requestDetails, path);
383 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
384 String methodName = "updateInstance";
385 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
388 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
390 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
391 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
392 HttpResponse<String> response = client.put(path, getHeaders(), requestDetailsWrapper, String.class);
393 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
395 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
398 } catch (Exception e) {
399 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
400 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
406 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
408 String methodName = "activateServiceInstance";
409 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
411 String path = baseUrl + endpoint;
412 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
413 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
414 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
417 } catch (Exception e) {
418 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
419 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
425 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
426 String methodName = "removeRelationshipFromServiceInstance";
427 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
430 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
431 String path = baseUrl + endpoint;
432 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
433 return MsoUtil.wrapResponse(response);
434 } catch (Exception e) {
435 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
436 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
442 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
443 String methodName = "addRelationshipToServiceInstance";
444 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
447 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
448 String path = baseUrl + addRelationshipsPath;
450 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
451 return MsoUtil.wrapResponse(response);
452 } catch (Exception e) {
453 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
454 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
460 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
461 String path = baseUrl + invokeWorkflowsPath;
462 Map<String, String> finalHeader = new HashMap<>();
464 finalHeader.putAll(getHeaders());
465 finalHeader.putAll(extraHeaders);
467 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
469 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
470 return MsoUtil.wrapResponse(response);
474 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
475 String path = baseUrl + endpoint;
476 return client.get(path, getHeaders(), new HashMap<>(), responseClass);
480 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
481 String path = baseUrl + endpoint;
483 return client.post(path, getHeaders(), requestDetailsWrapper, responseClass);
486 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
487 String path = baseUrl + endpoint;
489 return client.get(path, getHeaders(), Maps.newHashMap(), SOWorkflowList.class);
492 protected MsoResponseWrapper createInstance(Object request, String path) {
493 String methodName = "createInstance";
494 logger.debug(methodName + START);
497 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
498 return MsoUtil.wrapResponse(response);
499 } catch (Exception e) {
500 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
501 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
509 * @param request the request
510 * @param path the path
511 * @return the mso response wrapper
512 * @throws Exception the exception
514 private MsoResponseWrapper deleteInstance(Object request, String path) {
515 String methodName = "deleteInstance";
516 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
519 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
521 HttpResponse<String> response = client.delete(path, getHeaders(), request, String.class);
522 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
524 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
527 } catch (Exception e) {
528 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
529 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
535 private Map<String, String> getHeaders() {
536 Map<String, String> map = new HashMap<>();
537 map.putAll(commonHeaders);
538 String requestIdValue = Logging.extractOrGenerateRequestId();
539 map.put(SystemProperties.ECOMP_REQUEST_ID, requestIdValue);
540 map.put(ONAP_REQUEST_ID_HEADER_KEY, requestIdValue);
541 map.put(Headers.INVOCATION_ID.getHeaderName(), Headers.INVOCATION_ID.getHeaderValue());
545 private Map<String, String> initCommonHeaders() {
546 String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
547 String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
548 String decrypted_password = Password.deobfuscate(password);
550 String authString = username + ":" + decrypted_password;
552 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
553 String authStringEnc = new String(authEncBytes);
555 Map<String, String> map = new HashMap<>();
556 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
557 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
558 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
559 map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
560 map.put(PARTNER_NAME.getHeaderName(), PARTNER_NAME.getHeaderValue());
561 return ImmutableMap.copyOf(map);