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.HttpResponseWithRequestInfo;
39 import org.onap.vid.aai.util.HttpsAuthClient;
40 import org.onap.vid.changeManagement.MsoRequestDetails;
41 import org.onap.vid.changeManagement.RequestDetailsWrapper;
42 import org.onap.vid.changeManagement.WorkflowRequestDetail;
43 import org.onap.vid.client.SyncRestClient;
44 import org.onap.vid.model.RequestReferencesContainer;
45 import org.onap.vid.model.SOWorkflowList;
46 import org.onap.vid.mso.MsoInterface;
47 import org.onap.vid.mso.MsoProperties;
48 import org.onap.vid.mso.MsoResponseWrapper;
49 import org.onap.vid.mso.MsoResponseWrapperInterface;
50 import org.onap.vid.mso.MsoUtil;
51 import org.onap.vid.mso.RestMsoImplementation;
52 import org.onap.vid.mso.RestObject;
53 import org.onap.vid.utils.Logging;
54 import org.onap.vid.utils.SystemPropertiesWrapper;
55 import org.springframework.http.HttpMethod;
59 * Created by pickjonathan on 21/06/2017.
61 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
64 * The Constant dateFormat.
66 public static final String X_FROM_APP_ID = "X-FromAppId";
67 public static final String X_ONAP_PARTNER_NAME = "X-ONAP-PartnerName";
68 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
69 private static final String START = " start";
70 private final SyncRestClient client;
71 private final String baseUrl;
72 private final Map<String, String> commonHeaders;
76 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
78 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient, SystemPropertiesWrapper systemPropertiesWrapper) {
79 super(authClient,systemPropertiesWrapper);
81 this.baseUrl = baseUrl;
82 this.commonHeaders = initCommonHeaders();
86 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
87 String methodName = "createSvcInstance ";
88 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
89 String path = baseUrl + endpoint;
91 return createInstance(requestDetails, path);
95 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
96 String methodName = "createE2eSvcInstance ";
97 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
98 String path = baseUrl + endpoint;
100 return createInstance(requestDetails, path);
104 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
106 String methodName = "createVnf";
107 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
108 String path = baseUrl + endpoint;
110 return createInstance(requestDetails, path);
114 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
116 String methodName = "createNwInstance";
117 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
118 String path = baseUrl + endpoint;
120 return createInstance(requestDetails, path);
124 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
125 String methodName = "createVolumeGroupInstance";
126 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
127 String path = baseUrl + endpoint;
129 return createInstance(requestDetails, path);
133 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
134 String methodName = "createVfModuleInstance";
135 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
136 String path = baseUrl + endpoint;
138 return createInstance(requestDetails, path);
142 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
143 String methodName = "scaleOutVFModuleInstance";
144 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
145 String path = baseUrl + endpoint;
146 return createInstance(requestDetailsWrapper, path);
150 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
151 String methodName = "createConfigurationInstance";
152 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
153 String path = baseUrl + endpoint;
155 return createInstance(requestDetailsWrapper, path);
159 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
160 String methodName = "deleteE2eSvcInstance";
161 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
162 String path = baseUrl + endpoint;
163 return deleteInstance(requestDetails, path);
167 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
168 String methodName = "deleteSvcInstance";
169 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
170 String path = baseUrl + endpoint;
171 return deleteInstance(requestDetails, path);
175 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
176 String methodName = "unassignSvcInstance";
177 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
178 String path = baseUrl + endpoint;
180 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
181 return MsoUtil.wrapResponse(response);
185 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
186 String methodName = "deleteVnf";
187 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
188 String path = baseUrl + endpoint;
190 return deleteInstance(requestDetails, path);
194 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
195 String methodName = "deleteVfModule";
196 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
197 String path = baseUrl + endpoint;
199 return deleteInstance(requestDetails, path);
203 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
204 String methodName = "deleteVolumeGroupInstance";
205 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
206 String path = baseUrl + endpoint;
208 return deleteInstance(requestDetails, path);
212 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
213 String methodName = "deleteNwInstance";
214 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
215 String path = baseUrl + endpoint;
217 return deleteInstance(requestDetails, path);
221 public HttpResponseWithRequestInfo<String> getOrchestrationRequest(String endpoint, boolean warpException) {
222 String path = baseUrl + endpoint;
224 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
225 return new HttpResponseWithRequestInfo<>(response, path, HttpMethod.GET);
229 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
230 String path = baseUrl + endpoint;
232 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
233 return MsoUtil.wrapResponse(response);
237 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
238 String methodName = "getManualTasksByRequestId";
239 logger.debug(methodName + START);
242 String path = baseUrl + endpoint;
244 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
245 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
247 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
250 } catch (Exception e) {
251 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
252 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
258 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
259 String methodName = "completeManualTask";
260 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
262 String path = baseUrl + endpoint;
264 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
265 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
267 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
270 } catch (Exception e) {
271 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
272 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
278 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
279 String methodName = "replaceVnf";
280 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
281 String path = baseUrl + endpoint;
282 return replaceInstance(requestDetails, path);
286 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
287 String methodName = "deleteConfiguration";
288 logger.debug(EELFLoggerDelegate.debugLogger,
290 String path = baseUrl + pmc_endpoint;
292 return deleteInstance(requestDetailsWrapper, path);
296 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
297 String methodName = "setConfigurationActiveStatus";
298 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
301 String path = baseUrl + endpoint;
303 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
304 + methodName + " calling change configuration active status, path =[" + path + "]");
305 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
306 return MsoUtil.wrapResponse(response);
307 } catch (Exception e) {
308 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
309 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
315 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
316 String methodName = "setPortOnConfigurationStatus";
317 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
320 String path = baseUrl + endpoint;
321 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
322 + methodName + " calling change port configuration status, path =[" + path + "]");
323 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
324 return MsoUtil.wrapResponse(response);
325 } catch (Exception e) {
326 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
327 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
333 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
334 String path = baseUrl + endpoint;
335 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
336 return MsoUtil.wrapResponse2(response, RequestReferencesContainer.class);
339 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
340 String methodName = "replaceInstance";
341 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
344 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
345 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
346 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
348 HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
349 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
350 int status = msoResponseWrapperObject.getStatus();
352 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
353 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
355 logger.error(EELFLoggerDelegate.debugLogger, methodName +
356 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
359 return msoResponseWrapperObject;
361 } catch (Exception e) {
362 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
363 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
370 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
371 String methodName = "updateVnf";
372 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
373 String path = baseUrl + endpoint;
375 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
376 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
377 return updateInstance(requestDetails, path);
380 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
381 String methodName = "updateInstance";
382 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
385 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
387 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
388 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
389 HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
390 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
392 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
395 } catch (Exception e) {
396 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
397 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
403 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails,
405 String methodName = "activateServiceInstance";
406 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
408 String path = baseUrl + endpoint;
409 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
410 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
411 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
414 } catch (Exception e) {
415 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
416 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
422 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
423 String methodName = "removeRelationshipFromServiceInstance";
424 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
427 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
428 String path = baseUrl + endpoint;
429 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
430 return MsoUtil.wrapResponse(response);
431 } catch (Exception e) {
432 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
433 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
439 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
440 String methodName = "addRelationshipToServiceInstance";
441 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
444 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
445 String path = baseUrl + addRelationshipsPath;
447 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
448 return MsoUtil.wrapResponse(response);
449 } catch (Exception e) {
450 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
451 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
457 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
458 String path = baseUrl + invokeWorkflowsPath;
459 Map<String, String> finalHeader = new HashMap<>();
461 finalHeader.putAll(commonHeaders);
462 finalHeader.putAll(extraHeaders);
464 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
466 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
467 return MsoUtil.wrapResponse(response);
471 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
472 String path = baseUrl + endpoint;
473 return client.get(path, commonHeaders, new HashMap<>(), responseClass);
477 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
478 String path = baseUrl + endpoint;
480 return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
484 public <T> HttpResponse<T> post(String endpoint, RequestDetails requestDetails, Class<T> responseClass) {
485 String path = baseUrl + endpoint;
487 return client.post(path, commonHeaders, requestDetails, responseClass);
491 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
492 String path = baseUrl + endpoint;
494 return client.get(path, commonHeaders, Maps.newHashMap(), SOWorkflowList.class);
497 private MsoResponseWrapper createInstance(Object request, String path) {
498 String methodName = "createInstance";
499 logger.debug(methodName + START);
502 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
503 return MsoUtil.wrapResponse(response);
504 } catch (Exception e) {
505 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
506 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
514 * @param request the request
515 * @param path the path
516 * @return the mso response wrapper
517 * @throws Exception the exception
519 private MsoResponseWrapper deleteInstance(Object request, String path) {
520 String methodName = "deleteInstance";
521 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
524 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
526 HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
527 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
529 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
532 } catch (Exception e) {
533 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
534 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
540 private Map<String, String> initCommonHeaders() {
541 String username = systemProperties.getProperty(MsoProperties.MSO_USER_NAME);
542 String password = systemProperties.getProperty(MsoProperties.MSO_PASSWORD);
543 String decrypted_password = Password.deobfuscate(password);
545 String authString = username + ":" + decrypted_password;
547 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
548 String authStringEnc = new String(authEncBytes);
550 Map<String, String> map = new HashMap<>();
551 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
552 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
553 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
554 map.put(X_FROM_APP_ID, systemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
555 map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
556 map.put(X_ONAP_PARTNER_NAME, "VID");
557 return ImmutableMap.copyOf(map);