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;
56 * Created by pickjonathan on 21/06/2017.
58 public class MsoRestClientNew extends RestMsoImplementation implements MsoInterface {
61 * The Constant dateFormat.
63 public static final String X_FROM_APP_ID = "X-FromAppId";
64 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
65 private static final String START = " start";
66 private final SyncRestClient client;
67 private final String baseUrl;
68 private final Map<String, String> commonHeaders;
72 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoRestClientNew.class);
74 public MsoRestClientNew(SyncRestClient client, String baseUrl, HttpsAuthClient authClient) {
77 this.baseUrl = baseUrl;
78 this.commonHeaders = initCommonHeaders();
82 public MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) {
83 String methodName = "createSvcInstance ";
84 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
85 String path = baseUrl + endpoint;
87 return createInstance(requestDetails, path);
91 public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) {
92 String methodName = "createE2eSvcInstance ";
93 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
94 String path = baseUrl + endpoint;
96 return createInstance(requestDetails, path);
100 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) {
102 String methodName = "createVnf";
103 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
104 String path = baseUrl + endpoint;
106 return createInstance(requestDetails, path);
110 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String endpoint) {
112 String methodName = "createNwInstance";
113 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
114 String path = baseUrl + endpoint;
116 return createInstance(requestDetails, path);
120 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
121 String methodName = "createVolumeGroupInstance";
122 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
123 String path = baseUrl + endpoint;
125 return createInstance(requestDetails, path);
129 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String endpoint) {
130 String methodName = "createVfModuleInstance";
131 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
132 String path = baseUrl + endpoint;
134 return createInstance(requestDetails, path);
138 public MsoResponseWrapper scaleOutVFModuleInstance(RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
139 String methodName = "scaleOutVFModuleInstance";
140 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
141 String path = baseUrl + endpoint;
142 return createInstance(requestDetailsWrapper, path);
146 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String endpoint) {
147 String methodName = "createConfigurationInstance";
148 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
149 String path = baseUrl + endpoint;
151 return createInstance(requestDetailsWrapper, path);
155 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String endpoint) {
156 String methodName = "deleteE2eSvcInstance";
157 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
158 String path = baseUrl + endpoint;
159 return deleteInstance(requestDetails, path);
163 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String endpoint) {
164 String methodName = "deleteSvcInstance";
165 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
166 String path = baseUrl + endpoint;
167 return deleteInstance(requestDetails, path);
171 public MsoResponseWrapper unassignSvcInstance(RequestDetails requestDetails, String endpoint) {
172 String methodName = "unassignSvcInstance";
173 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
174 String path = baseUrl + endpoint;
176 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
177 return MsoUtil.wrapResponse(response);
181 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String endpoint) {
182 String methodName = "deleteVnf";
183 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
184 String path = baseUrl + endpoint;
186 return deleteInstance(requestDetails, path);
190 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String endpoint) {
191 String methodName = "deleteVfModule";
192 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
193 String path = baseUrl + endpoint;
195 return deleteInstance(requestDetails, path);
199 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String endpoint) {
200 String methodName = "deleteVolumeGroupInstance";
201 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
202 String path = baseUrl + endpoint;
204 return deleteInstance(requestDetails, path);
208 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String endpoint) {
209 String methodName = "deleteNwInstance";
210 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
211 String path = baseUrl + endpoint;
213 return deleteInstance(requestDetails, path);
217 public MsoResponseWrapper getOrchestrationRequest(String t, String sourceId, String endpoint, RestObject restObject, boolean warpException) {
218 String path = baseUrl + endpoint;
220 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
221 return MsoUtil.wrapResponse(response);
225 public MsoResponseWrapper getOrchestrationRequest(String endpoint) {
226 String path = baseUrl + endpoint;
228 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
229 return MsoUtil.wrapResponse(response);
233 public MsoResponseWrapper getManualTasksByRequestId(String t, String sourceId, String endpoint, RestObject restObject) {
234 String methodName = "getManualTasksByRequestId";
235 logger.debug(methodName + START);
238 String path = baseUrl + endpoint;
240 HttpResponse<String> response = client.get(path, commonHeaders, new HashMap<>(), String.class);
241 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
243 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
246 } catch (Exception e) {
247 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
248 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
254 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject restObject) {
255 String methodName = "completeManualTask";
256 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Complete ");
258 String path = baseUrl + endpoint;
260 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
261 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
263 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
266 } catch (Exception e) {
267 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
268 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
274 public MsoResponseWrapper replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
275 String methodName = "replaceVnf";
276 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
277 String path = baseUrl + endpoint;
278 return replaceInstance(requestDetails, path);
282 public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String pmc_endpoint) {
283 String methodName = "deleteConfiguration";
284 logger.debug(EELFLoggerDelegate.debugLogger,
286 String path = baseUrl + pmc_endpoint;
288 return deleteInstance(requestDetailsWrapper, path);
292 public MsoResponseWrapper setConfigurationActiveStatus(RequestDetails request, String endpoint) {
293 String methodName = "setConfigurationActiveStatus";
294 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
297 String path = baseUrl + endpoint;
299 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
300 + methodName + " calling change configuration active status, path =[" + path + "]");
301 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
302 return MsoUtil.wrapResponse(response);
303 } catch (Exception e) {
304 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
305 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
311 public MsoResponseWrapper setPortOnConfigurationStatus(RequestDetails request, String endpoint) {
312 String methodName = "setPortOnConfigurationStatus";
313 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
316 String path = baseUrl + endpoint;
317 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== "
318 + methodName + " calling change port configuration status, path =[" + path + "]");
319 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
320 return MsoUtil.wrapResponse(response);
321 } catch (Exception e) {
322 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
323 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
329 public MsoResponseWrapperInterface changeManagementUpdate(RequestDetailsWrapper requestDetails, String endpoint) {
330 String path = baseUrl + endpoint;
331 HttpResponse<RequestReferencesContainer> response = client.post(path, commonHeaders, requestDetails, RequestReferencesContainer.class);
332 return MsoUtil.wrapResponse(response);
335 public MsoResponseWrapper replaceInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
336 String methodName = "replaceInstance";
337 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
340 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Replace VNF, path =[" + path + "]");
341 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
342 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
344 HttpResponse<String> response = client.post(path, commonHeaders, requestDetailsWrapper, String.class);
345 MsoResponseWrapper msoResponseWrapperObject = MsoUtil.wrapResponse(response);
346 int status = msoResponseWrapperObject.getStatus();
348 logger.debug(EELFLoggerDelegate.debugLogger, methodName +
349 ",post succeeded, msoResponseWrapperObject response:" + msoResponseWrapperObject.getResponse());
351 logger.error(EELFLoggerDelegate.debugLogger, methodName +
352 ": post failed, msoResponseWrapperObject status" + status + ", response:" + msoResponseWrapperObject.getResponse());
355 return msoResponseWrapperObject;
357 } catch (Exception e) {
358 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
359 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
366 public MsoResponseWrapper updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String endpoint) {
367 String methodName = "updateVnf";
368 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
369 String path = baseUrl + endpoint;
371 RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
372 wrapper.requestDetails = new MsoRequestDetails(requestDetails);
373 return updateInstance(requestDetails, path);
376 public MsoResponseWrapper updateInstance(org.onap.vid.changeManagement.RequestDetails request, String path) {
377 String methodName = "updateInstance";
378 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
381 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
383 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
384 requestDetailsWrapper.requestDetails = new MsoRequestDetails(request);
385 HttpResponse<String> response = client.put(path, commonHeaders, requestDetailsWrapper, String.class);
386 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
388 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
391 } catch (Exception e) {
392 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
393 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
399 public void setServiceInstanceStatus(RequestDetails requestDetails, String t, String sourceId, String endpoint, RestObject<String> restObject) {
400 String methodName = "activateServiceInstance";
401 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start ");
403 String path = baseUrl + endpoint;
404 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
405 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
406 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w =" + w.getResponse());
408 } catch (Exception e) {
409 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
410 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
416 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String endpoint) {
417 String methodName = "removeRelationshipFromServiceInstance";
418 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
421 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Remove relationship from service instance, path =[" + endpoint + "]");
422 String path = baseUrl + endpoint;
423 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
424 return MsoUtil.wrapResponse(response);
425 } catch (Exception e) {
426 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
427 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
433 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String addRelationshipsPath) {
434 String methodName = "addRelationshipToServiceInstance";
435 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
438 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Add relationship to service instance, path =[" + addRelationshipsPath + "]");
439 String path = baseUrl + addRelationshipsPath;
441 HttpResponse<String> response = client.post(path, commonHeaders, requestDetails, String.class);
442 return MsoUtil.wrapResponse(response);
443 } catch (Exception e) {
444 logger.info(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
445 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
451 public MsoResponseWrapper invokeWorkflow(WorkflowRequestDetail workflowRequestDetail, String invokeWorkflowsPath, Map<String, String> extraHeaders) {
452 String path = baseUrl + invokeWorkflowsPath;
453 Map<String, String> finalHeader = new HashMap<>();
455 finalHeader.putAll(commonHeaders);
456 finalHeader.putAll(extraHeaders);
458 RequestDetailsWrapper<WorkflowRequestDetail> requestDetailsWrapper = new RequestDetailsWrapper<>(workflowRequestDetail);
460 HttpResponse<JsonNode> response = client.post(path, finalHeader, requestDetailsWrapper);
461 return MsoUtil.wrapResponse(response);
465 public <T> HttpResponse<T> get(String endpoint, Class<T> responseClass) {
466 String path = baseUrl + endpoint;
467 return client.get(path, commonHeaders, new HashMap<>(), responseClass);
471 public <T> HttpResponse<T> post(String endpoint, RequestDetailsWrapper<?> requestDetailsWrapper, Class<T> responseClass) {
472 String path = baseUrl + endpoint;
474 return client.post(path, commonHeaders, requestDetailsWrapper, responseClass);
478 public HttpResponse<SOWorkflowList> getWorkflowListByModelId(String endpoint){
479 String path = baseUrl + endpoint;
481 return client.get(path, commonHeaders, Maps.newHashMap(), SOWorkflowList.class);
484 private MsoResponseWrapper createInstance(Object request, String path) {
485 String methodName = "createInstance";
486 logger.debug(methodName + START);
489 HttpResponse<String> response = client.post(path, commonHeaders, request, String.class);
490 return MsoUtil.wrapResponse(response);
491 } catch (Exception e) {
492 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
493 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
501 * @param request the request
502 * @param path the path
503 * @return the mso response wrapper
504 * @throws Exception the exception
506 private MsoResponseWrapper deleteInstance(Object request, String path) {
507 String methodName = "deleteInstance";
508 logger.debug(EELFLoggerDelegate.debugLogger, methodName + START);
511 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " calling Delete, path =[" + path + "]");
513 HttpResponse<String> response = client.delete(path, commonHeaders, request, String.class);
514 MsoResponseWrapper w = MsoUtil.wrapResponse(response);
516 logger.debug(EELFLoggerDelegate.debugLogger, methodName + " w=" + w.getResponse());
519 } catch (Exception e) {
520 logger.error(EELFLoggerDelegate.errorLogger, "." + methodName + e.toString());
521 logger.debug(EELFLoggerDelegate.debugLogger, "." + methodName + e.toString());
527 private Map<String, String> initCommonHeaders() {
528 String username = SystemProperties.getProperty(MsoProperties.MSO_USER_NAME);
529 String password = SystemProperties.getProperty(MsoProperties.MSO_PASSWORD);
530 String decrypted_password = Password.deobfuscate(password);
532 String authString = username + ":" + decrypted_password;
534 byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
535 String authStringEnc = new String(authEncBytes);
537 Map<String, String> map = new HashMap<>();
538 map.put(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc);
539 map.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
540 map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
541 map.put(X_FROM_APP_ID, SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME));
542 map.put(SystemProperties.ECOMP_REQUEST_ID, Logging.extractOrGenerateRequestId());
543 return ImmutableMap.copyOf(map);