1 package org.onap.vid.mso;
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.DeserializationFeature;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6 import com.fasterxml.jackson.databind.SerializationFeature;
7 import com.google.common.collect.ImmutableList;
8 import com.google.common.collect.ImmutableMap;
9 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
10 import org.onap.portalsdk.core.util.SystemProperties;
11 import org.onap.vid.changeManagement.ChangeManagementRequest;
12 import org.onap.vid.changeManagement.RequestDetailsWrapper;
13 import org.onap.vid.controllers.OperationalEnvironmentController;
14 import org.onap.vid.domain.mso.RequestInfo;
15 import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
16 import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
17 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
18 import org.onap.vid.mso.rest.*;
19 import org.springframework.beans.factory.annotation.Autowired;
21 import javax.ws.rs.BadRequestException;
22 import java.text.DateFormat;
23 import java.text.SimpleDateFormat;
25 import java.util.regex.Pattern;
27 import static org.onap.vid.changeManagement.ChangeManagementRequest.MsoChangeManagementRequest;
28 import static org.onap.vid.controllers.MsoController.*;
29 import static org.onap.vid.mso.MsoProperties.*;
31 public class MsoBusinessLogicImpl implements MsoBusinessLogic {
34 * The Constant dateFormat.
36 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
37 final static Pattern SOFTWARE_VERSION_PATTERN = Pattern.compile("^[A-Za-z0-9.\\-]+$");
38 final static Pattern NUMBER_PATTERN = Pattern.compile("^[0-9]+$");
39 private static final String ACTIVATE = "/activate";
40 private static final String DEACTIVATE = "/deactivate";
41 private static final String ENABLE_PORT = "/enablePort";
42 private static final String DISABLE_PORT = "/disablePort";
43 private final static String RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT = "operationalEnvironment";
44 private final static String SOURCE_OPERATIONAL_ENVIRONMENT = "VID";
45 final static private ObjectMapper objectMapper = new ObjectMapper();
48 * This should be replaced with mso client factory.
50 private final MsoInterface msoClientInterface;
54 private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
57 public MsoBusinessLogicImpl(MsoInterface msoClientInterface) {
58 this.msoClientInterface = msoClientInterface;
61 static String validateEndpointPath(String endpointEnvVariable) {
62 String endpoint = SystemProperties.getProperty(endpointEnvVariable);
63 if (endpoint == null || endpoint.isEmpty()) {
64 throw new RuntimeException(endpointEnvVariable + " env variable is not defined");
69 // this function should get params from tosca and send them to instance at mso, then return success response.
71 public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) throws Exception {
72 String methodName = "createSvcInstance ";
73 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
77 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
78 } catch (Exception exception) {
82 return msoClientInterface.createSvcInstance(msoRequest, endpoint);
86 public MsoResponseWrapper createE2eSvcInstance(Object msoRequest) throws Exception {
87 String methodName = "createE2eSvcInstance ";
88 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
92 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
93 } catch (Exception exception) {
97 return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
100 void validateLineOfBusiness(RequestDetails requestDetails) {
102 Object value = requestDetails.getAdditionalProperties();
104 for(String prop: ImmutableList.of("requestDetails", "lineOfBusiness", "lineOfBusinessName")) {
105 if(value==null ||!(value instanceof Map)) {
110 value = ((Map)value).get(prop);
114 if(value == null || value.toString().isEmpty()) {
115 throw new BadRequestException("lineOfBusiness is required");
121 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
122 String methodName = "createVnf";
123 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
127 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
128 } catch (Exception exception) {
132 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
133 return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
137 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
138 String methodName = "createNwInstance";
139 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
143 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
144 } catch (Exception exception) {
148 String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
149 return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
153 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
154 String methodName = "createVolumeGroupInstance";
155 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
159 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
160 } catch (Exception exception) {
164 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
165 vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
167 return msoClientInterface.createVolumeGroupInstance(requestDetails, vnf_endpoint);
171 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
172 String methodName = "createVfModuleInstance";
173 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
177 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
178 } catch (Exception exception) {
182 String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
183 String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
185 return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
189 public MsoResponseWrapper createConfigurationInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
190 String methodName = "createConfigurationInstance";
191 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
193 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATIONS);
194 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
196 return msoClientInterface.createConfigurationInstance(requestDetails, endpoint);
200 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
201 String methodName = "deleteSvcInstance";
202 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
206 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
207 } catch (Exception exception) {
211 String svc_endpoint = endpoint + "/" + serviceInstanceId;
213 return msoClientInterface.deleteSvcInstance(requestDetails, svc_endpoint);
217 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
218 String methodName = "deleteVnf";
219 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
223 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
224 } catch (Exception exception) {
227 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
228 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
230 return msoClientInterface.deleteVnf(requestDetails, vnf_endpoint);
234 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) throws Exception {
235 String methodName = "deleteVfModule";
236 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
240 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
241 } catch (Exception exception) {
245 String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
247 String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
249 return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
253 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId) throws Exception {
254 String methodName = "deleteVolumeGroupInstance";
255 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
259 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
260 } catch (Exception exception) {
264 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
265 String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
266 String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
268 return msoClientInterface.deleteVolumeGroupInstance(requestDetails, delete_volume_group_endpoint);
272 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) throws Exception {
273 String methodName = "deleteNwInstance";
274 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
278 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
279 } catch (Exception exception) {
283 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
284 String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
286 return msoClientInterface.deleteNwInstance(requestDetails, delete_nw_endpoint);
290 public MsoResponseWrapper getOrchestrationRequest(String requestId) throws Exception {
291 String methodName = "getOrchestrationRequest";
292 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
293 MsoResponseWrapper w = null;
295 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
296 String path = p + "/" + requestId;
298 RestObject<String> restObjStr = new RestObject<String>();
299 String str = new String();
302 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
304 return MsoUtil.wrapResponse(restObjStr);
306 } catch (Exception e) {
307 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
308 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
314 public MsoResponseWrapper getOrchestrationRequests(String filterString) throws Exception {
315 String methodName = "getOrchestrationRequest";
316 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
317 MsoResponseWrapper w = null;
319 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
320 String path = p + filterString;
322 RestObject<String> restObjStr = new RestObject<String>();
323 String str = new String();
326 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
328 return MsoUtil.wrapResponse(restObjStr);
330 } catch (Exception e) {
331 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
332 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
338 public List<Request> getOrchestrationRequestsForDashboard() throws Exception {
339 String methodName = "getOrchestrationRequestsForDashboard";
340 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
341 List<Request> filteredOrchestrationRequests = new ArrayList<>();
343 String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
344 path += "filter=modelType:EQUALS:vnf";
345 RestObject<String> restObjStr = new RestObject<String>();
346 String str = new String();
349 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
350 List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
353 for (RequestWrapper currentRequest : allOrchestrationRequests) {
354 if ((currentRequest.getRequest() != null) && (currentRequest.getRequest().getRequestScope() == Request.RequestScope.VNF) && ((currentRequest.getRequest().getRequestType() ==
355 Request.RequestType.REPLACE_INSTANCE) || (currentRequest.getRequest().getRequestType() ==
356 Request.RequestType.UPDATE_INSTANCE))) {
357 filteredOrchestrationRequests.add(currentRequest.getRequest());
360 } catch (Exception e) {
361 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
362 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
364 return filteredOrchestrationRequests;
368 private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) throws Exception {
369 String methodName = "deserializeOrchestrationRequestsJson";
370 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
372 ObjectMapper mapper = new ObjectMapper();
373 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
374 mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
375 RequestList requestList = mapper.readValue(orchestrationRequestsJson, RequestList.class);
376 return requestList.getRequestList();
381 public List<Task> getManualTasksByRequestId(String originalRequestId) throws Exception {
382 String methodName = "getManualTasksByRequestId";
383 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
386 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
387 String path = p + "?originalRequestId=" + originalRequestId;
389 RestObject<String> restObjStr = new RestObject<String>();
390 String str = new String();
393 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getManualTasksByRequestId(str, "", path, restObjStr);
394 return deserializeManualTasksJson(msoResponseWrapper.getEntity());
396 } catch (Exception e) {
397 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
398 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
403 private List<Task> deserializeManualTasksJson(String manualTasksJson) throws Exception {
404 String methodName = "deserializeManualTasksJson";
405 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
407 ObjectMapper mapper = new ObjectMapper();
408 TaskList taskList = mapper.readValue(manualTasksJson, TaskList.class);
409 return taskList.getTaskList();
414 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String taskId) throws Exception {
415 String methodName = "completeManualTask";
416 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
417 MsoResponseWrapper w = null;
419 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
420 String path = p + "/" + taskId + "/complete";
422 RestObject<String> restObjStr = new RestObject<String>();
423 String str = new String();
426 msoClientInterface.completeManualTask(requestDetails, str, "", path, restObjStr);
428 return MsoUtil.wrapResponse(restObjStr);
430 } catch (Exception e) {
431 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
432 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
438 public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
439 String methodName = "activateServiceInstance";
440 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
442 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
443 String activateServicePath = serviceEndpoint + "/" + serviceInstanceId + "/activate";
445 RestObject<String> restObjStr = new RestObject<>();
449 msoClientInterface.setServiceInstanceStatus(requestDetails, str, "", activateServicePath, restObjStr);
451 return MsoUtil.wrapResponse(restObjStr);
453 } catch (Exception e) {
454 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
455 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
462 public MsoResponseWrapperInterface updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
463 String methodName = "updateVnf";
464 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
468 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
469 } catch (Exception exception) {
472 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
473 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
474 return msoClientInterface.updateVnf(requestDetails, vnf_endpoint);
478 public MsoResponseWrapperInterface replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
479 String methodName = "replaceVnf";
480 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
484 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
485 } catch (Exception exception) {
488 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
489 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
490 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
491 return msoClientInterface.replaceVnf(requestDetails, vnf_endpoint);
494 public RequestDetailsWrapper generateInPlaceMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) throws Exception {
495 validateUpdateVnfSoftwarePayload(requestDetails);
496 RequestDetails inPlaceSoftwareUpdateRequest = new RequestDetails();
497 inPlaceSoftwareUpdateRequest.setCloudConfiguration(requestDetails.getCloudConfiguration());
498 inPlaceSoftwareUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
499 inPlaceSoftwareUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
500 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
501 requestDetailsWrapper.requestDetails = inPlaceSoftwareUpdateRequest;
502 return requestDetailsWrapper;
506 public RequestDetailsWrapper generateConfigMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) throws Exception {
507 validateUpdateVnfConfig(requestDetails);
508 RequestDetails ConfigUpdateRequest = new RequestDetails();
509 ConfigUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
510 ConfigUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
511 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
512 requestDetailsWrapper.requestDetails = ConfigUpdateRequest;
513 return requestDetailsWrapper;
517 public MsoResponseWrapperInterface updateVnfSoftware(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
518 String methodName = "updateVnfSoftware";
519 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
520 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
521 RequestDetailsWrapper finalRequestDetails = generateInPlaceMsoRequest(requestDetails);
522 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
526 public MsoResponseWrapperInterface updateVnfConfig(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
527 String methodName = "updateVnfConfig";
528 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
529 RequestDetailsWrapper finalRequestDetails = generateConfigMsoRequest(requestDetails);
530 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
531 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
534 private String getChangeManagementEndpoint(String serviceInstanceId, String vnfInstanceId, String vnfRequestType) {
535 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
536 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
537 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
538 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, vnfRequestType);
542 private Map getChangeManagementPayload(RequestDetails requestDetails, String message) throws Exception{
543 if(requestDetails.getRequestParameters()==null||requestDetails.getRequestParameters().getAdditionalProperties()==null){
544 throw new BadRequestException(message);
546 Object payloadRaw=requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
548 return objectMapper.readValue((String)payloadRaw,Map.class);
550 catch(Exception exception){
551 throw new BadRequestException(message);
555 private void validateUpdateVnfSoftwarePayload(RequestDetails requestDetails) throws Exception {
556 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.VNF_IN_PLACE_SOFTWARE_UPDATE + " request";
558 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
559 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "existing-software-version", SOFTWARE_VERSION_PATTERN);
560 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "new-software-version", SOFTWARE_VERSION_PATTERN);
562 //if "operations-timeout" is not integer, trying to read it as String that represent a number
563 if (!(payload.get("operations-timeout") instanceof Integer)) {
564 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "operations-timeout", NUMBER_PATTERN);
569 private void validateUpdateVnfSoftwarePayloadProperty(Map payload, String noValidPayloadMsg, String propertyName, Pattern pattern) {
570 Object forValidation = payload.get(propertyName);
571 final String noValidPayloadPropertyMsg = noValidPayloadMsg + ", " + propertyName + " property is not valid";
572 if (!(forValidation instanceof String)) {
573 throw new BadRequestException(noValidPayloadPropertyMsg);
575 if (!pattern.matcher((String) forValidation).matches()) {
576 throw new BadRequestException(noValidPayloadPropertyMsg);
580 private void validateUpdateVnfConfig(RequestDetails requestDetails) throws Exception {
581 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
583 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
584 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
585 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
588 private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
589 Object forValidation = payload.get(propertyName);
590 final String noValidPayloadPropertyMsg = noValidPayloadMsg+ ", "+ propertyName + " property is not valid";
591 if(!payload.containsKey(propertyName)) {
592 throw new BadRequestException( noValidPayloadPropertyMsg);
597 public MsoResponseWrapper deleteConfiguration(
598 RequestDetails requestDetails,
599 String serviceInstanceId,
600 String configurationId) throws Exception {
602 String methodName = "deleteConfiguration";
603 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
605 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
606 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
607 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
609 return msoClientInterface.deleteConfiguration(requestDetails, endpoint);
613 public MsoResponseWrapper setConfigurationActiveStatus(
614 RequestDetails requestDetails,
615 String serviceInstanceId,
616 String configurationId,
617 boolean isActivate) throws Exception {
619 String methodName = "setConfigurationActiveStatus";
620 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
622 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
623 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
624 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
626 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
627 endpoint = endpoint + isActivateState;
629 return msoClientInterface.setConfigurationActiveStatus(requestDetails, endpoint);
633 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails , String serviceInstanceId, boolean isActivate)throws Exception{
634 String methodName = "setServiceInstanceStatus";
635 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
637 String serviceEndpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
638 String endpoint = serviceEndpoint + "/" + serviceInstanceId;
640 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
641 endpoint = endpoint + isActivateState;
644 RestObject<String> restObjStr = new RestObject<>();
648 msoClientInterface.setServiceInstanceStatus(requestDetails , str, "", endpoint, restObjStr);
650 return MsoUtil.wrapResponse(restObjStr);
652 } catch (Exception e) {
653 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
654 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
660 public MsoResponseWrapper setPortOnConfigurationStatus(
661 RequestDetails requestDetails,
662 String serviceInstanceId,
663 String configurationId,
664 boolean isEnable) throws Exception {
665 String methodName = "setPortOnConfigurationStatus";
666 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
668 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
669 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
670 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
672 String isEnablePortStatus = (isEnable ? ENABLE_PORT : DISABLE_PORT);
673 endpoint = endpoint + isEnablePortStatus;
675 return msoClientInterface.setPortOnConfigurationStatus(requestDetails, endpoint);
680 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
681 RequestDetails requestDetails = new RequestDetails();
682 RequestInfo requestInfo = new RequestInfo();
683 requestInfo.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
684 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
685 requestInfo.setRequestorId(details.getUserId());
686 requestDetails.setRequestInfo(requestInfo);
688 org.onap.vid.domain.mso.RelatedInstance relatedInstance = new org.onap.vid.domain.mso.RelatedInstance();
689 relatedInstance.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
690 relatedInstance.setInstanceId(details.getRelatedInstanceId());
691 relatedInstance.setInstanceName(details.getRelatedInstanceName());
692 requestDetails.setAdditionalProperty("relatedInstanceList", Collections.singletonList(ImmutableMap.of("relatedInstance", relatedInstance)));
694 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
695 requestParameters.setUserParams(null);
696 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
697 requestParameters.setAdditionalProperty("workloadContext", details.getWorkloadContext());
698 requestParameters.setAdditionalProperty("manifest", details.getManifest());
699 requestDetails.setRequestParameters(requestParameters);
701 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
703 debugRequestDetails(requestDetailsWrapper);
705 return requestDetailsWrapper;
709 public String getOperationalEnvironmentActivationPath(OperationalEnvironmentActivateInfo details) {
710 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_ACTIVATE);
711 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
716 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentDeactivationRequestDetails(OperationalEnvironmentDeactivateInfo details) {
717 RequestDetails requestDetails = new RequestDetails();
719 RequestInfo requestInfo = new RequestInfo();
720 requestInfo.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
721 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
722 requestInfo.setRequestorId(details.getUserId());
723 requestDetails.setRequestInfo(requestInfo);
725 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
726 requestParameters.setUserParams(null);
727 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
728 requestDetails.setRequestParameters(requestParameters);
729 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
730 debugRequestDetails(requestDetailsWrapper);
731 return requestDetailsWrapper;
735 public String getCloudResourcesRequestsStatusPath(String requestId) {
736 String path = validateEndpointPath(MSO_REST_API_CLOUD_RESOURCES_REQUEST_STATUS);
737 path = path.replace("<request_id>", requestId);
742 public String getOperationalEnvironmentDeactivationPath(OperationalEnvironmentDeactivateInfo details) {
743 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_DEACTIVATE);
744 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
748 private void debugRequestDetails(Object requestDetails) {
749 if (logger.isDebugEnabled()) {
750 String requestDetailsAsString;
752 requestDetailsAsString = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(requestDetails);
753 } catch (JsonProcessingException e) {
754 requestDetailsAsString = "error: cannot stringify RequestDetails";
756 logger.debug(EELFLoggerDelegate.debugLogger, "requestDetailsAsString: {}", requestDetailsAsString);
761 public String getOperationalEnvironmentCreationPath() {
762 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_CREATE);
767 public RequestDetailsWrapper<OperationEnvironmentRequestDetails> convertParametersToRequestDetails(OperationalEnvironmentController.OperationalEnvironmentCreateBody input, String userId) {
768 OperationEnvironmentRequestDetails.RequestInfo requestInfo = new OperationEnvironmentRequestDetails.RequestInfo(
769 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
770 input.getInstanceName(),
771 SOURCE_OPERATIONAL_ENVIRONMENT,
774 OperationEnvironmentRequestDetails.RelatedInstance relatedInstance = new OperationEnvironmentRequestDetails.RelatedInstance(
775 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
776 input.getEcompInstanceId(),
777 input.getEcompInstanceName());
779 List<OperationEnvironmentRequestDetails.RelatedInstance> relatedInstanceList = Collections.singletonList((relatedInstance));
781 OperationEnvironmentRequestDetails.RequestParameters requestParameters = new OperationEnvironmentRequestDetails.RequestParameters(
782 input.getOperationalEnvironmentType(),
783 input.getTenantContext(),
784 input.getWorkloadContext());
786 OperationEnvironmentRequestDetails requestDetails = new OperationEnvironmentRequestDetails(requestInfo, relatedInstanceList, requestParameters);
787 RequestDetailsWrapper<OperationEnvironmentRequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
788 debugRequestDetails(requestDetailsWrapper);
789 return requestDetailsWrapper;
793 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
794 String methodName = "removeRelationshipFromServiceInstance";
795 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
797 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
798 String removeRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/removeRelationships";
800 return msoClientInterface.removeRelationshipFromServiceInstance(requestDetails, removeRelationshipsPath);
804 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
805 String methodName = "addRelationshipToServiceInstance";
806 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
808 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
809 String addRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/addRelationships";
811 return msoClientInterface.addRelationshipToServiceInstance(requestDetails, addRelationshipsPath);