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.utils.Logging.ONAP_REQUEST_ID_HEADER_KEY;
25 import com.google.common.collect.ImmutableMap;
26 import com.google.common.collect.Maps;
27 import io.joshworks.restclient.http.HttpResponse;
28 import io.joshworks.restclient.http.JsonNode;
29 import java.text.DateFormat;
30 import java.text.SimpleDateFormat;
31 import java.util.Date;
32 import java.util.HashMap;
34 import javax.ws.rs.core.HttpHeaders;
35 import javax.ws.rs.core.MediaType;
36 import org.apache.commons.codec.binary.Base64;
37 import org.eclipse.jetty.util.security.Password;
38 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
39 import org.onap.portalsdk.core.util.SystemProperties;
40 import org.onap.vid.aai.HttpResponseWithRequestInfo;
41 import org.onap.vid.aai.util.HttpsAuthClient;
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.model.RequestReferencesContainer;
47 import org.onap.vid.model.SOWorkflowList;
48 import org.onap.vid.mso.MsoInterface;
49 import org.onap.vid.mso.MsoProperties;
50 import org.onap.vid.mso.MsoResponseWrapper;
51 import org.onap.vid.mso.MsoResponseWrapperInterface;
52 import org.onap.vid.mso.MsoUtil;
53 import org.onap.vid.mso.RestMsoImplementation;
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 extends RestMsoImplementation implements MsoInterface {
66 * The Constant dateFormat.
68 public static final String X_FROM_APP_ID = "X-FromAppId";
69 public static final String X_ONAP_PARTNER_NAME = "X-ONAP-PartnerName";
70 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
71 private static final String START = " start";
72 private final SyncRestClient client;
73 private final String baseUrl;
74 private final Map<String, String> commonHeaders;
78 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
80 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient, SystemPropertiesWrapper systemPropertiesWrapper) {
81 super(authClient,systemPropertiesWrapper);
83 this.baseUrl = baseUrl;
84 this.commonHeaders = initCommonHeaders();
88 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
89 String methodName = "createSvcInstance ";
90 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
91 String path = baseUrl + endpoint;
93 return createInstance(requestDetails, path);
97 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
98 String methodName = "createE2eSvcInstance ";
99 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
100 String path = baseUrl + endpoint;
102 return createInstance(requestDetails, path);
106 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
108 String methodName = "createVnf";
109 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
110 String path = baseUrl + endpoint;
112 return createInstance(requestDetails, path);
116 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
118 String methodName = "createNwInstance";
119 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
120 String path = baseUrl + endpoint;
122 return createInstance(requestDetails, path);
126 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
127 String methodName = "createVolumeGroupInstance";
128 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
129 String path = baseUrl + endpoint;
131 return createInstance(requestDetails, path);
135 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
136 String methodName = "createVfModuleInstance";
137 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
138 String path = baseUrl + endpoint;
140 return createInstance(requestDetails, path);
144 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
145 String methodName = "scaleOutVFModuleInstance";
146 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
147 String path = baseUrl + endpoint;
148 return createInstance(requestDetailsWrapper, path);
152 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
153 String methodName = "createConfigurationInstance";
154 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
155 String path = baseUrl + endpoint;
157 return createInstance(requestDetailsWrapper, path);
161 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
162 String methodName = "deleteE2eSvcInstance";
163 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
164 String path = baseUrl + endpoint;
165 return deleteInstance(requestDetails, path);
169 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
170 String methodName = "deleteSvcInstance";
171 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
172 String path = baseUrl + endpoint;
173 return deleteInstance(requestDetails, path);
177 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
178 String methodName = "unassignSvcInstance";
179 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
180 String path = baseUrl + endpoint;
182 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
183 return MsoUtil.wrapResponse(response);
187 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
188 String methodName = "deleteVnf";
189 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
190 String path = baseUrl + endpoint;
192 return deleteInstance(requestDetails, path);
196 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
197 String methodName = "deleteVfModule";
198 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
199 String path = baseUrl + endpoint;
201 return deleteInstance(requestDetails, path);
205 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
206 String methodName = "deleteVolumeGroupInstance";
207 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
208 String path = baseUrl + endpoint;
210 return deleteInstance(requestDetails, path);
214 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
215 String methodName = "deleteNwInstance";
216 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
217 String path = baseUrl + endpoint;
219 return deleteInstance(requestDetails, path);
223 public HttpResponseWithRequestInfo<String> getOrchestrationRequest(String endpoint, boolean warpException) {
224 String path = baseUrl + endpoint;
226 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
227 return new HttpResponseWithRequestInfo<>(response, path, HttpMethod.GET);
231 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
232 String path = baseUrl + endpoint;
234 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
235 return MsoUtil.wrapResponse(response);
239 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
240 String methodName = "getManualTasksByRequestId";
241 logger.debug(methodName + START);
244 String path = baseUrl + endpoint;
246 HttpResponse<String> response = client.get(path, getHeaders(), new HashMap<>(), String.class);
247 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
249 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
252 } catch (Exception e) {
253 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
254 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
260 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
261 String methodName = "completeManualTask";
262 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
264 String path = baseUrl + endpoint;
266 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
267 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
269 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
272 } catch (Exception e) {
273 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
274 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
280 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
281 String methodName = "replaceVnf";
282 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
283 String path = baseUrl + endpoint;
284 return replaceInstance(requestDetails, path);
288 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
289 String methodName = "deleteConfiguration";
290 logger.debug(EELFLoggerDelegate.debugLogger,
292 String path = baseUrl + pmc_endpoint;
294 return deleteInstance(requestDetailsWrapper, path);
298 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
299 String methodName = "setConfigurationActiveStatus";
300 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
303 String path = baseUrl + endpoint;
305 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
306 + methodName + " calling change configuration active status, path =[" + path + "]");
307 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
308 return MsoUtil.wrapResponse(response);
309 } catch (Exception e) {
310 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
311 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
317 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
318 String methodName = "setPortOnConfigurationStatus";
319 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
322 String path = baseUrl + endpoint;
323 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
324 + methodName + " calling change port configuration status, path =[" + path + "]");
325 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
326 return MsoUtil.wrapResponse(response);
327 } catch (Exception e) {
328 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
329 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
335 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
336 String path = baseUrl + endpoint;
337 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
338 return MsoUtil.wrapResponse2(response, RequestReferencesContainer.class);
341 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
342 String methodName = "replaceInstance";
343 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
346 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
347 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
348 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
350 HttpResponse<String> response = client.post(path, getHeaders(), requestDetailsWrapper, String.class);
351 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
352 int status = msoResponseWrapperObject.getStatus();
354 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
355 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
357 logger.error(EELFLoggerDelegate.debugLogger, methodName +
358 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
361 return msoResponseWrapperObject;
363 } catch (Exception e) {
364 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
365 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
372 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
373 String methodName = "updateVnf";
374 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
375 String path = baseUrl + endpoint;
377 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
378 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
379 return updateInstance(requestDetails, path);
382 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
383 String methodName = "updateInstance";
384 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
387 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
389 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
390 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
391 HttpResponse<String> response = client.put(path, getHeaders(), requestDetailsWrapper, String.class);
392 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
394 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
397 } catch (Exception e) {
398 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
399 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
405 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
407 String methodName = "activateServiceInstance";
408 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
410 String path = baseUrl + endpoint;
411 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
412 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
413 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
416 } catch (Exception e) {
417 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
418 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
424 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
425 String methodName = "removeRelationshipFromServiceInstance";
426 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
429 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
430 String path = baseUrl + endpoint;
431 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
432 return MsoUtil.wrapResponse(response);
433 } catch (Exception e) {
434 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
435 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
441 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
442 String methodName = "addRelationshipToServiceInstance";
443 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
446 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
447 String path = baseUrl + addRelationshipsPath;
449 HttpResponse<String> response = client.post(path, getHeaders(), requestDetails, String.class);
450 return MsoUtil.wrapResponse(response);
451 } catch (Exception e) {
452 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
453 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
459 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
460 String path = baseUrl + invokeWorkflowsPath;
461 Map<String, String> finalHeader = new HashMap<>();
463 finalHeader.putAll(getHeaders());
464 finalHeader.putAll(extraHeaders);
466 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
468 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
469 return MsoUtil.wrapResponse(response);
473 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
474 String path = baseUrl + endpoint;
475 return client.get(path, getHeaders(), new HashMap<>(), responseClass);
479 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
480 String path = baseUrl + endpoint;
482 return client.post(path, getHeaders(), requestDetailsWrapper, responseClass);
486 public <T> HttpResponse<T> post(String endpoint, RequestDetails requestDetails, Class<T> responseClass) {
487 String path = baseUrl + endpoint;
489 return client.post(path, getHeaders(), requestDetails, responseClass);
493 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
494 String path = baseUrl + endpoint;
496 return client.get(path, getHeaders(), Maps.newHashMap(), SOWorkflowList.class);
499 protected MsoResponseWrapper createInstance(Object request, String path) {
500 String methodName = "createInstance";
501 logger.debug(methodName + START);
504 HttpResponse<String> response = client.post(path, getHeaders(), request, String.class);
505 return MsoUtil.wrapResponse(response);
506 } catch (Exception e) {
507 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
508 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
516 * @param request the request
517 * @param path the path
518 * @return the mso response wrapper
519 * @throws Exception the exception
521 private MsoResponseWrapper deleteInstance(Object request, String path) {
522 String methodName = "deleteInstance";
523 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
526 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
528 HttpResponse<String> response = client.delete(path, getHeaders(), request, String.class);
529 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
531 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
534 } catch (Exception e) {
535 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
536 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
542 private Map<String, String> getHeaders() {
543 Map<String, String> map = new HashMap<>();
544 map.putAll(commonHeaders);
545 String requestIdValue = Logging.extractOrGenerateRequestId();
546 map.put(SystemProperties.ECOMP_REQUEST_ID, requestIdValue);
547 map.put(ONAP_REQUEST_ID_HEADER_KEY, requestIdValue);
551 private Map<String, String> initCommonHeaders() {
552 String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
553 String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
554 String decrypted_password = Password.deobfuscate(password);
556 String authString = username + ":" + decrypted_password;
558 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
559 String authStringEnc = new String(authEncBytes);
561 Map<String, String> map = new HashMap<>();
562 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
563 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
564 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
565 map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
566 map.put(X_ONAP_PARTNER_NAME, "VID");
567 return ImmutableMap.copyOf(map);