diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java | 154 |
1 files changed, 70 insertions, 84 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java index 7adc77f1b2..757c789d5c 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,10 +17,13 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.openecomp.sdc.be.components.lifecycle; import fj.data.Either; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Optional; import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic; import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic; import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException; @@ -52,38 +55,31 @@ import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Optional; - public class CertificationChangeTransition extends LifeCycleTransition { - private static final String ALLOTTED_CATEGORY = "Allotted Resource"; - private static final String DEPENDING_SRV_NAME = "depending_service_name"; - private static final String PROVIDING_SRV_NAME = "providing_service_name"; - private static final String PROVIDING_SRV_UUID = "providing_service_uuid"; - private static final String DEPENDING_SRV_UUID = "depending_service_uuid"; + private static final String ALLOTTED_CATEGORY = "Allotted Resource"; + private static final String DEPENDING_SRV_NAME = "depending_service_name"; + private static final String PROVIDING_SRV_NAME = "providing_service_name"; + private static final String PROVIDING_SRV_UUID = "providing_service_uuid"; + private static final String DEPENDING_SRV_UUID = "depending_service_uuid"; private static final Logger log = Logger.getLogger(CertificationChangeTransition.class); - private LifecycleStateEnum nextState; private LifeCycleTransitionEnum name; private AuditingActionEnum auditingAction; private NodeTemplateOperation nodeTemplateOperation; private ServiceBusinessLogic serviceBusinessLogic; - public CertificationChangeTransition(ServiceBusinessLogic serviceBusinessLogic, LifeCycleTransitionEnum name, ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, JanusGraphDao janusGraphDao) { + public CertificationChangeTransition(ServiceBusinessLogic serviceBusinessLogic, LifeCycleTransitionEnum name, ComponentsUtils componentUtils, + ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, + JanusGraphDao janusGraphDao) { super(componentUtils, lifecycleOperation, toscaOperationFacade, janusGraphDao); - this.name = name; this.serviceBusinessLogic = serviceBusinessLogic; - // authorized roles - Role[] certificationChangeRoles = { Role.ADMIN, Role.DESIGNER }; - Role[] resourceRoles = { Role.ADMIN, Role.DESIGNER}; + Role[] certificationChangeRoles = {Role.ADMIN, Role.DESIGNER}; + Role[] resourceRoles = {Role.ADMIN, Role.DESIGNER}; addAuthorizedRoles(ComponentTypeEnum.RESOURCE, Arrays.asList(resourceRoles)); addAuthorizedRoles(ComponentTypeEnum.SERVICE, Arrays.asList(certificationChangeRoles)); - this.auditingAction = AuditingActionEnum.CERTIFICATION_SUCCESS_RESOURCE; this.nextState = LifecycleStateEnum.CERTIFIED; } @@ -109,57 +105,50 @@ public class CertificationChangeTransition extends LifeCycleTransition { private ResponseFormat formatCertificationError(Component component, StorageOperationStatus response, ComponentTypeEnum componentType) { BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState - Certify failed on graph"); log.debug("certification change failed on graph"); - return componentUtils.getResponseFormatByComponent(componentUtils.convertFromStorageResponse(response), component, componentType); } @Override - public Either<Boolean, ResponseFormat> validateBeforeTransition(Component component, ComponentTypeEnum componentType, User modifier, User owner, LifecycleStateEnum oldState, LifecycleChangeInfoWithAction lifecycleChangeInfo) { + public Either<Boolean, ResponseFormat> validateBeforeTransition(Component component, ComponentTypeEnum componentType, User modifier, User owner, + LifecycleStateEnum oldState, LifecycleChangeInfoWithAction lifecycleChangeInfo) { String componentName = component.getComponentMetadataDefinition().getMetadataDataDefinition().getName(); log.info("validate before certification change. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId()); - // validate user - Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo); + Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, component, componentType, lifecycleChangeInfo); if (userValidationResponse.isRight()) { log.debug("userRoleValidation failed"); return userValidationResponse; } - if (oldState != LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT && oldState != LifecycleStateEnum.NOT_CERTIFIED_CHECKIN) { log.debug("Valid states for certification are NOT_CERTIFIED_CHECKIN and NOT_CERTIFIED_CHECKOUT. {} is invalid state", oldState); - ResponseFormat error = componentUtils.getResponseFormat(ActionStatus.ILLEGAL_COMPONENT_STATE, componentName, componentType.name().toLowerCase(), oldState.name()); + ResponseFormat error = componentUtils + .getResponseFormat(ActionStatus.ILLEGAL_COMPONENT_STATE, componentName, componentType.name().toLowerCase(), oldState.name()); return Either.right(error); } return Either.left(true); } @Override - public <T extends Component> Either<T, ResponseFormat> changeState( - ComponentTypeEnum componentType, - Component component, - ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, boolean inTransaction - ) { - + public <T extends Component> Either<T, ResponseFormat> changeState(ComponentTypeEnum componentType, Component component, + ComponentBusinessLogic componentBl, User modifier, User owner, + boolean shouldLock, boolean inTransaction) { log.info("start performing certification change for resource {}", component.getUniqueId()); Either<T, ResponseFormat> result = null; - try { handleValidationsAndArtifactsGenerationBeforeCertifying(componentType, component, componentBl, modifier, shouldLock, inTransaction); - Either<ToscaElement, StorageOperationStatus> certificationChangeResult = - lifeCycleOperation.certifyToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId()); - + Either<ToscaElement, StorageOperationStatus> certificationChangeResult = lifeCycleOperation + .certifyToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId()); if (certificationChangeResult.isRight()) { ResponseFormat responseFormat = formatCertificationError(component, certificationChangeResult.right().value(), componentType); result = Either.right(responseFormat); return result; } - ToscaElement certificationResult = certificationChangeResult.left().value(); T componentAfterCertification = ModelConverter.convertFromToscaElement(certificationResult); - if ( result == null || result.isLeft() ){ + if (result == null || result.isLeft()) { //update edges for allotted resource StorageOperationStatus status = handleConnectionsForAllotted(componentAfterCertification); - if ( status != StorageOperationStatus.OK){ + if (status != StorageOperationStatus.OK) { ResponseFormat responseFormat = formatCertificationError(componentAfterCertification, status, componentType); result = Either.right(responseFormat); } @@ -171,59 +160,55 @@ public class CertificationChangeTransition extends LifeCycleTransition { } finally { if (result == null || result.isRight()) { BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState"); - if ( !inTransaction ) { + if (!inTransaction) { log.debug("operation failed. do rollback"); janusGraphDao.rollback(); } } else { - if ( !inTransaction ) { + if (!inTransaction) { log.debug("operation success. do commit"); janusGraphDao.commit(); } } } - } private void updateCapReqPropertiesOwnerId(Component component) { - if(component.isTopologyTemplate() && ToscaUtils.isNotComplexVfc(component)) { + if (component.isTopologyTemplate() && ToscaUtils.isNotComplexVfc(component)) { toscaOperationFacade.updateCapReqPropertiesOwnerId(component.getUniqueId()); } } Either<Boolean, ResponseFormat> validateAllResourceInstanceCertified(Component component) { Either<Boolean, ResponseFormat> eitherResult = Either.left(true); - - if (component.isVspArchived()){ - return Either.right(componentUtils.getResponseFormat(ActionStatus.ARCHIVED_ORIGINS_FOUND, component.getComponentType().name(), component.getName())); + if (component.isVspArchived()) { + return Either.right( + componentUtils.getResponseFormat(ActionStatus.ARCHIVED_ORIGINS_FOUND, component.getComponentType().name(), component.getName())); } - List<ComponentInstance> resourceInstance = component.getComponentInstances(); if (resourceInstance != null) { - //Filter components instances with archived origins - Optional<ComponentInstance> archivedRIOptional = resourceInstance.stream().filter(ComponentInstanceDataDefinition::isOriginArchived).findAny(); - + Optional<ComponentInstance> archivedRIOptional = resourceInstance.stream().filter(ComponentInstanceDataDefinition::isOriginArchived) + .findAny(); //RIs with archived origins found, return relevant error - if (archivedRIOptional.isPresent()){ - return Either.right(componentUtils.getResponseFormat(ActionStatus.ARCHIVED_ORIGINS_FOUND, component.getComponentType().name(), component.getName())); + if (archivedRIOptional.isPresent()) { + return Either.right( + componentUtils.getResponseFormat(ActionStatus.ARCHIVED_ORIGINS_FOUND, component.getComponentType().name(), component.getName())); } - //Continue with searching for non certified RIs - Optional<ComponentInstance> nonCertifiedRIOptional = resourceInstance.stream().filter(p -> !ValidationUtils.validateCertifiedVersion(p.getComponentVersion())).findAny(); + Optional<ComponentInstance> nonCertifiedRIOptional = resourceInstance.stream() + .filter(p -> !ValidationUtils.validateCertifiedVersion(p.getComponentVersion())).findAny(); // Uncertified Resource Found if (nonCertifiedRIOptional.isPresent()) { ComponentInstance nonCertifiedRI = nonCertifiedRIOptional.get(); ResponseFormat resFormat = getRelevantResponseFormatUncertifiedRI(nonCertifiedRI, component.getComponentType()); eitherResult = Either.right(resFormat); } - } return eitherResult; } private ResponseFormat getRelevantResponseFormatUncertifiedRI(ComponentInstance nonCertifiedRI, ComponentTypeEnum componentType) { - Either<Resource, StorageOperationStatus> eitherResource = toscaOperationFacade.getToscaElement(nonCertifiedRI.getComponentUid()); if (eitherResource.isRight()) { return componentUtils.getResponseFormat(ActionStatus.GENERAL_ERROR); @@ -231,7 +216,6 @@ public class CertificationChangeTransition extends LifeCycleTransition { ActionStatus actionStatus; Resource resource = eitherResource.left().value(); Either<Resource, StorageOperationStatus> status = toscaOperationFacade.findLastCertifiedToscaElementByUUID(resource); - if (ValidationUtils.validateMinorVersion(nonCertifiedRI.getComponentVersion())) { if (status.isRight() || status.left().value() == null) { actionStatus = ActionStatus.VALIDATED_RESOURCE_NOT_FOUND; @@ -248,7 +232,9 @@ public class CertificationChangeTransition extends LifeCycleTransition { return componentUtils.getResponseFormat(actionStatus, componentType == ComponentTypeEnum.RESOURCE ? "VF" : "service", resource.getName()); } - private void handleValidationsAndArtifactsGenerationBeforeCertifying(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, boolean shouldLock, boolean inTransaction) { + private void handleValidationsAndArtifactsGenerationBeforeCertifying(ComponentTypeEnum componentType, Component component, + ComponentBusinessLogic componentBl, User modifier, boolean shouldLock, + boolean inTransaction) { if (component.isTopologyTemplate()) { Either<Boolean, ResponseFormat> statusCert = validateAllResourceInstanceCertified(component); if (statusCert.isRight()) { @@ -256,37 +242,35 @@ public class CertificationChangeTransition extends LifeCycleTransition { } } if (componentType == ComponentTypeEnum.SERVICE) { - - Either<Service, ResponseFormat> generateHeatEnvResult = serviceBusinessLogic.generateHeatEnvArtifacts((Service) component, modifier, shouldLock, inTransaction); - + Either<Service, ResponseFormat> generateHeatEnvResult = serviceBusinessLogic + .generateHeatEnvArtifacts((Service) component, modifier, shouldLock, inTransaction); if (generateHeatEnvResult.isRight()) { throw new ByResponseFormatComponentException(generateHeatEnvResult.right().value()); } - Either<Service, ResponseFormat> generateVfModuleResult = serviceBusinessLogic.generateVfModuleArtifacts(generateHeatEnvResult.left().value(), modifier, shouldLock, inTransaction); + Either<Service, ResponseFormat> generateVfModuleResult = serviceBusinessLogic + .generateVfModuleArtifacts(generateHeatEnvResult.left().value(), modifier, shouldLock, inTransaction); if (generateVfModuleResult.isRight()) { throw new ByResponseFormatComponentException(generateVfModuleResult.right().value()); } component = generateVfModuleResult.left().value(); } - componentBl.populateToscaArtifacts(component, modifier, true, inTransaction, shouldLock); } - private void updateCalculatedCapabilitiesRequirements(Component certifiedComponent) { - if(certifiedComponent.getComponentType() == ComponentTypeEnum.SERVICE){ + if (certifiedComponent.getComponentType() == ComponentTypeEnum.SERVICE) { toscaOperationFacade.updateNamesOfCalculatedCapabilitiesRequirements(certifiedComponent.getUniqueId()); } } - private StorageOperationStatus handleConnectionsForAllotted(Component component){ + private StorageOperationStatus handleConnectionsForAllotted(Component component) { StorageOperationStatus status = StorageOperationStatus.OK; - if (component.getComponentType() == ComponentTypeEnum.RESOURCE && component.isTopologyTemplate() ){ + if (component.getComponentType() == ComponentTypeEnum.RESOURCE && component.isTopologyTemplate()) { List<CategoryDefinition> categories = component.getCategories(); - Optional<CategoryDefinition> findFirst = categories.stream().filter(c->c.getName().equals(ALLOTTED_CATEGORY)).findFirst(); - if ( findFirst.isPresent() ){ + Optional<CategoryDefinition> findFirst = categories.stream().filter(c -> c.getName().equals(ALLOTTED_CATEGORY)).findFirst(); + if (findFirst.isPresent()) { findInstanceByAllottedProperties(component); - }else{ + } else { log.debug("Component isn't from allotted category."); } } @@ -297,27 +281,29 @@ public class CertificationChangeTransition extends LifeCycleTransition { log.debug("Component is from alloted category. Remove all previous ALLOTTED_OF connections for all instances"); nodeTemplateOperation.removeAllAllotedEdges(component.getUniqueId()); Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = component.getComponentInstancesProperties(); - if ( componentInstancesProperties != null ){ - componentInstancesProperties.entrySet().forEach(e->{ + if (componentInstancesProperties != null) { + componentInstancesProperties.entrySet().forEach(e -> { List<ComponentInstanceProperty> props = e.getValue(); - Optional<ComponentInstanceProperty> findProp = props.stream().filter(p -> p.getName().equals(DEPENDING_SRV_NAME) || p.getName().equals(PROVIDING_SRV_NAME)).findFirst(); - if ( findProp.isPresent() ){ - log.debug("Find specific properties [{} or {}]on instance {} ", DEPENDING_SRV_NAME,PROVIDING_SRV_NAME, e.getKey() ); - handleAllotedInstance(component.getUniqueId(), e.getKey(), e.getValue() ); - }else{ - log.debug("Not defined specific properties [{} or {}]on instance {} ", DEPENDING_SRV_NAME,PROVIDING_SRV_NAME, e.getKey() ); + Optional<ComponentInstanceProperty> findProp = props.stream() + .filter(p -> p.getName().equals(DEPENDING_SRV_NAME) || p.getName().equals(PROVIDING_SRV_NAME)).findFirst(); + if (findProp.isPresent()) { + log.debug("Find specific properties [{} or {}]on instance {} ", DEPENDING_SRV_NAME, PROVIDING_SRV_NAME, e.getKey()); + handleAllotedInstance(component.getUniqueId(), e.getKey(), e.getValue()); + } else { + log.debug("Not defined specific properties [{} or {}]on instance {} ", DEPENDING_SRV_NAME, PROVIDING_SRV_NAME, e.getKey()); } }); } } private StorageOperationStatus handleAllotedInstance(String componentId, String instanceId, List<ComponentInstanceProperty> props) { - ComponentInstanceProperty serviceUUIDProp = props.stream().filter(p -> p.getName().equals(PROVIDING_SRV_UUID) || p.getName().equals(DEPENDING_SRV_UUID)).findFirst().get(); - if ( serviceUUIDProp.getValue() != null && !serviceUUIDProp.getValue().contains("get_input")){ - log.debug("Handle Allotted edge on instance {} for service UUID {} ", instanceId, serviceUUIDProp.getValue() ); - return nodeTemplateOperation.createAllottedOfEdge(componentId, instanceId, serviceUUIDProp.getValue()); - }else{ - log.debug("An incorrectly defined service UUID for Allotted instance {} . Skip instance", instanceId, serviceUUIDProp.getValue() ); + ComponentInstanceProperty serviceUUIDProp = props.stream() + .filter(p -> p.getName().equals(PROVIDING_SRV_UUID) || p.getName().equals(DEPENDING_SRV_UUID)).findFirst().get(); + if (serviceUUIDProp.getValue() != null && !serviceUUIDProp.getValue().contains("get_input")) { + log.debug("Handle Allotted edge on instance {} for service UUID {} ", instanceId, serviceUUIDProp.getValue()); + return nodeTemplateOperation.createAllottedOfEdge(componentId, instanceId, serviceUUIDProp.getValue()); + } else { + log.debug("An incorrectly defined service UUID for Allotted instance {} . Skip instance", instanceId, serviceUUIDProp.getValue()); return StorageOperationStatus.OK; } } |