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 public static final String X_ONAP_PARTNER_NAME = "X-ONAP-PartnerName";
66 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
67 private static final String START = " start";
68 private final SyncRestClient client;
69 private final String baseUrl;
70 private final Map<String, String> commonHeaders;
74 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
76 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient, SystemPropertiesWrapper systemPropertiesWrapper) {
77 super(authClient,systemPropertiesWrapper);
79 this.baseUrl = baseUrl;
80 this.commonHeaders = initCommonHeaders();
84 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
85 String methodName = "createSvcInstance ";
86 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
87 String path = baseUrl + endpoint;
89 return createInstance(requestDetails, path);
93 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
94 String methodName = "createE2eSvcInstance ";
95 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
96 String path = baseUrl + endpoint;
98 return createInstance(requestDetails, path);
102 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
104 String methodName = "createVnf";
105 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
106 String path = baseUrl + endpoint;
108 return createInstance(requestDetails, path);
112 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
114 String methodName = "createNwInstance";
115 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
116 String path = baseUrl + endpoint;
118 return createInstance(requestDetails, path);
122 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
123 String methodName = "createVolumeGroupInstance";
124 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
125 String path = baseUrl + endpoint;
127 return createInstance(requestDetails, path);
131 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
132 String methodName = "createVfModuleInstance";
133 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
134 String path = baseUrl + endpoint;
136 return createInstance(requestDetails, path);
140 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
141 String methodName = "scaleOutVFModuleInstance";
142 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
143 String path = baseUrl + endpoint;
144 return createInstance(requestDetailsWrapper, path);
148 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
149 String methodName = "createConfigurationInstance";
150 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
151 String path = baseUrl + endpoint;
153 return createInstance(requestDetailsWrapper, path);
157 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
158 String methodName = "deleteE2eSvcInstance";
159 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
160 String path = baseUrl + endpoint;
161 return deleteInstance(requestDetails, path);
165 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
166 String methodName = "deleteSvcInstance";
167 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
168 String path = baseUrl + endpoint;
169 return deleteInstance(requestDetails, path);
173 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
174 String methodName = "unassignSvcInstance";
175 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
176 String path = baseUrl + endpoint;
178 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
179 return MsoUtil.wrapResponse(response);
183 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
184 String methodName = "deleteVnf";
185 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
186 String path = baseUrl + endpoint;
188 return deleteInstance(requestDetails, path);
192 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
193 String methodName = "deleteVfModule";
194 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
195 String path = baseUrl + endpoint;
197 return deleteInstance(requestDetails, path);
201 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
202 String methodName = "deleteVolumeGroupInstance";
203 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
204 String path = baseUrl + endpoint;
206 return deleteInstance(requestDetails, path);
210 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
211 String methodName = "deleteNwInstance";
212 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
213 String path = baseUrl + endpoint;
215 return deleteInstance(requestDetails, path);
219 public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
220 String path = baseUrl + endpoint;
222 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
223 return MsoUtil.wrapResponse(response);
227 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
228 String path = baseUrl + endpoint;
230 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
231 return MsoUtil.wrapResponse(response);
235 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
236 String methodName = "getManualTasksByRequestId";
237 logger.debug(methodName + START);
240 String path = baseUrl + endpoint;
242 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
243 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
245 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
248 } catch (Exception e) {
249 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
250 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
256 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
257 String methodName = "completeManualTask";
258 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
260 String path = baseUrl + endpoint;
262 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
263 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
265 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
268 } catch (Exception e) {
269 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
270 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
276 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
277 String methodName = "replaceVnf";
278 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
279 String path = baseUrl + endpoint;
280 return replaceInstance(requestDetails, path);
284 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
285 String methodName = "deleteConfiguration";
286 logger.debug(EELFLoggerDelegate.debugLogger,
288 String path = baseUrl + pmc_endpoint;
290 return deleteInstance(requestDetailsWrapper, path);
294 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
295 String methodName = "setConfigurationActiveStatus";
296 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
299 String path = baseUrl + endpoint;
301 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
302 + methodName + " calling change configuration active status, path =[" + path + "]");
303 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
304 return MsoUtil.wrapResponse(response);
305 } catch (Exception e) {
306 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
307 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
313 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
314 String methodName = "setPortOnConfigurationStatus";
315 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
318 String path = baseUrl + endpoint;
319 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
320 + methodName + " calling change port configuration status, path =[" + path + "]");
321 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
322 return MsoUtil.wrapResponse(response);
323 } catch (Exception e) {
324 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
325 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
331 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
332 String path = baseUrl + endpoint;
333 HttpResponse<RequestReferencesContainer> response = client.post(path, commonHeaders, requestDetails, RequestReferencesContainer.class);
334 return MsoUtil.wrapResponse(response);
337 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
338 String methodName = "replaceInstance";
339 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
342 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
343 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
344 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
346 HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
347 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
348 int status = msoResponseWrapperObject.getStatus();
350 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
351 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
353 logger.error(EELFLoggerDelegate.debugLogger, methodName +
354 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
357 return msoResponseWrapperObject;
359 } catch (Exception e) {
360 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
361 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
368 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
369 String methodName = "updateVnf";
370 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
371 String path = baseUrl + endpoint;
373 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
374 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
375 return updateInstance(requestDetails, path);
378 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
379 String methodName = "updateInstance";
380 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
383 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
385 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
386 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
387 HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
388 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
390 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
393 } catch (Exception e) {
394 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
395 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
401 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
403 String methodName = "activateServiceInstance";
404 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
406 String path = baseUrl + endpoint;
407 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
408 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
409 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
412 } catch (Exception e) {
413 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
414 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
420 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
421 String methodName = "removeRelationshipFromServiceInstance";
422 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
425 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
426 String path = baseUrl + endpoint;
427 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
428 return MsoUtil.wrapResponse(response);
429 } catch (Exception e) {
430 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
431 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
437 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
438 String methodName = "addRelationshipToServiceInstance";
439 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
442 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
443 String path = baseUrl + addRelationshipsPath;
445 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
446 return MsoUtil.wrapResponse(response);
447 } catch (Exception e) {
448 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
449 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
455 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
456 String path = baseUrl + invokeWorkflowsPath;
457 Map<String, String> finalHeader = new HashMap<>();
459 finalHeader.putAll(commonHeaders);
460 finalHeader.putAll(extraHeaders);
462 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
464 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
465 return MsoUtil.wrapResponse(response);
469 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
470 String path = baseUrl + endpoint;
471 return client.get(path, commonHeaders, new HashMap<>(), responseClass);
475 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
476 String path = baseUrl + endpoint;
478 return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
482 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
483 String path = baseUrl + endpoint;
485 return client.get(path, commonHeaders, Maps.newHashMap(), SOWorkflowList.class);
488 private MsoResponseWrapper createInstance(Object request, String path) {
489 String methodName = "createInstance";
490 logger.debug(methodName + START);
493 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
494 return MsoUtil.wrapResponse(response);
495 } catch (Exception e) {
496 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
497 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
505 * @param request the request
506 * @param path the path
507 * @return the mso response wrapper
508 * @throws Exception the exception
510 private MsoResponseWrapper deleteInstance(Object request, String path) {
511 String methodName = "deleteInstance";
512 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
515 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
517 HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
518 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
520 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
523 } catch (Exception e) {
524 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
525 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
531 private Map<String, String> initCommonHeaders() {
532 String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
533 String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
534 String decrypted_password = Password.deobfuscate(password);
536 String authString = username + ":" + decrypted_password;
538 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
539 String authStringEnc = new String(authEncBytes);
541 Map<String, String> map = new HashMap<>();
542 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
543 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
544 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
545 map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
546 map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
547 map.put(X_ONAP_PARTNER_NAME, "VID");
548 return ImmutableMap.copyOf(map);