aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java75
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationRequestTransition.java180
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java67
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java96
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java75
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java404
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/StartCertificationTransition.java64
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java59
8 files changed, 485 insertions, 535 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 445b3a9750..0e0f6f9464 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
@@ -21,27 +21,25 @@
package org.openecomp.sdc.be.components.lifecycle;
import java.util.Arrays;
-import java.util.List;
-
import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
-import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
-import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
-import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.user.Role;
-import org.openecomp.sdc.common.config.EcompErrorName;
import org.openecomp.sdc.exception.ResponseFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,8 +55,8 @@ public class CertificationChangeTransition extends LifeCycleTransition {
private AuditingActionEnum auditingAction;
private ArtifactsBusinessLogic artifactsManager;
- public CertificationChangeTransition(LifeCycleTransitionEnum name, ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
- super(componentUtils, lifecycleOperation);
+ public CertificationChangeTransition(LifeCycleTransitionEnum name, ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
this.name = name;
@@ -67,7 +65,11 @@ public class CertificationChangeTransition extends LifeCycleTransition {
addAuthorizedRoles(ComponentTypeEnum.RESOURCE, Arrays.asList(certificationChangeRoles));
addAuthorizedRoles(ComponentTypeEnum.SERVICE, Arrays.asList(certificationChangeRoles));
// TODO to be later defined for product
-
+
+ //additional authorized roles for resource type
+ Role[] resourceRoles = { Role.DESIGNER};
+ addResouceAuthorizedRoles(ResourceTypeEnum.VFCMT, Arrays.asList(resourceRoles));
+
switch (this.name) {
case CERTIFY:
this.auditingAction = AuditingActionEnum.CERTIFICATION_SUCCESS_RESOURCE;
@@ -106,7 +108,6 @@ public class CertificationChangeTransition extends LifeCycleTransition {
}
private ResponseFormat formatCertificationError(Component component, StorageOperationStatus response, ComponentTypeEnum componentType) {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeDaoSystemError, "Change LifecycleState - Certify failed on graph");
BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState - Certify failed on graph");
log.debug("certification change failed on graph");
@@ -118,20 +119,24 @@ public class CertificationChangeTransition extends LifeCycleTransition {
@Override
public Either<Boolean, ResponseFormat> validateBeforeTransition(Component component, ComponentTypeEnum componentType, User modifier, User owner, LifecycleStateEnum oldState, LifecycleChangeInfoWithAction lifecycleChangeInfo) {
String componentName = component.getComponentMetadataDefinition().getMetadataDataDefinition().getName();
- log.debug("validate before certification change. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
+ log.info("validate before certification change. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
- if (userValidationResponse.isRight()) {
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo);
+ if (userValidationResponse.isRight()) {
+ log.error("userRoleValidation failed");
return userValidationResponse;
}
if (!oldState.equals(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS)) {
+ log.error("oldState={} should be={}",oldState,ActionStatus.COMPONENT_NOT_READY_FOR_CERTIFICATION);
ResponseFormat error = componentUtils.getResponseFormat(ActionStatus.COMPONENT_NOT_READY_FOR_CERTIFICATION, componentName, componentType.name().toLowerCase());
- return Either.right(error);
+ return Either.right(error);
}
if (oldState.equals(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS) && !modifier.equals(owner) && !modifier.getRole().equals(Role.ADMIN.name())) {
+ log.error("oldState={} should not be={}",oldState,ActionStatus.COMPONENT_IN_CERT_IN_PROGRESS_STATE);
+ log.error("&& modifier({})!={} && modifier.role({})!={}",modifier,owner);
ResponseFormat error = componentUtils.getResponseFormat(ActionStatus.COMPONENT_IN_CERT_IN_PROGRESS_STATE, componentName, componentType.name().toLowerCase(), owner.getFirstName(), owner.getLastName(), owner.getUserId());
return Either.right(error);
}
@@ -144,14 +149,13 @@ public class CertificationChangeTransition extends LifeCycleTransition {
log.info("start performing certification change for resource {}", component.getUniqueId());
Either<? extends Component, ResponseFormat> result = null;
- NodeTypeEnum nodeType = componentType.getNodeType();
try {
- Either<? extends Component, StorageOperationStatus> certificationChangeResult = Either.right(StorageOperationStatus.GENERAL_ERROR);
+ Either<ToscaElement, StorageOperationStatus> certificationChangeResult = Either.right(StorageOperationStatus.GENERAL_ERROR);
if (nextState.equals(LifecycleStateEnum.CERTIFIED)) {
- certificationChangeResult = lifeCycleOperation.certifyComponent(nodeType, component, modifier, owner, true);
+ certificationChangeResult = lifeCycleOperation.certifyToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId());
} else {
- certificationChangeResult = lifeCycleOperation.cancelOrFailCertification(nodeType, component, modifier, owner, nextState, true);
+ certificationChangeResult = lifeCycleOperation.cancelOrFailCertification(component.getUniqueId(), modifier.getUserId(), owner.getUserId(), nextState);
}
if (certificationChangeResult.isRight()) {
@@ -159,51 +163,32 @@ public class CertificationChangeTransition extends LifeCycleTransition {
result = Either.right(responseFormat);
return result;
}
-
+
if (nextState.equals(LifecycleStateEnum.CERTIFIED)) {
- Either<Boolean, StorageOperationStatus> deleteOldComponentVersions = lifeCycleOperation.deleteOldComponentVersions(nodeType, component.getComponentMetadataDefinition().getMetadataDataDefinition().getName(),
- component.getComponentMetadataDefinition().getMetadataDataDefinition().getUUID(), true);
+ Either<Boolean, StorageOperationStatus> deleteOldComponentVersions = lifeCycleOperation.deleteOldToscaElementVersions(ModelConverter.getVertexType(component), componentType, component.getComponentMetadataDefinition().getMetadataDataDefinition().getName(),
+ component.getComponentMetadataDefinition().getMetadataDataDefinition().getUUID());
if (deleteOldComponentVersions.isRight()) {
ResponseFormat responseFormat = formatCertificationError(component, deleteOldComponentVersions.right().value(), componentType);
result = Either.right(responseFormat);
- return result;
}
}
- result = Either.left(certificationChangeResult.left().value());
+ result = Either.left(ModelConverter.convertFromToscaElement(certificationChangeResult.left().value()));
return result;
} finally {
if (result == null || result.isRight()) {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeDaoSystemError, "Change LifecycleState");
BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState");
if (inTransaction == false) {
log.debug("operation failed. do rollback");
- lifeCycleOperation.getResourceOperation().getTitanGenericDao().rollback();
+ titanDao.rollback();
}
} else {
if (inTransaction == false) {
log.debug("operation success. do commit");
- lifeCycleOperation.getResourceOperation().getTitanGenericDao().commit();
+ titanDao.commit();
}
}
}
}
-
- public StorageOperationStatus deleteOldVersion(List<ArtifactDefinition> artifactsToDelete, Resource resourceToDelete) {
- ResourceOperation resourceOperation = lifeCycleOperation.getResourceOperation();
-
- Either<List<ArtifactDefinition>, StorageOperationStatus> artifactsRes = resourceOperation.getComponentArtifactsForDelete(resourceToDelete.getUniqueId(), NodeTypeEnum.Resource, true);
- if (artifactsRes.isRight()) {
- return artifactsRes.right().value();
- }
- Either<Resource, StorageOperationStatus> deleteResourceRes = resourceOperation.deleteResource(resourceToDelete.getUniqueId(), true);
- if (deleteResourceRes.isRight()) {
- return deleteResourceRes.right().value();
- }
- artifactsToDelete.addAll(artifactsRes.left().value());
-
- return StorageOperationStatus.OK;
- }
-
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationRequestTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationRequestTransition.java
index 69a9cbdb24..042af54383 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationRequestTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationRequestTransition.java
@@ -29,10 +29,14 @@ import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
+import org.apache.commons.codec.binary.Base64;
import org.openecomp.sdc.be.components.distribution.engine.ServiceDistributionArtifactsBuilder;
+import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
@@ -50,13 +54,20 @@ import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.Service;
import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
+import org.openecomp.sdc.be.tosca.ToscaError;
import org.openecomp.sdc.be.tosca.ToscaExportHandler;
+import org.openecomp.sdc.be.tosca.ToscaRepresentation;
import org.openecomp.sdc.be.user.Role;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
import org.openecomp.sdc.common.util.ValidationUtils;
import org.openecomp.sdc.exception.ResponseFormat;
import org.slf4j.Logger;
@@ -68,15 +79,11 @@ public class CertificationRequestTransition extends LifeCycleTransition {
private static Logger log = LoggerFactory.getLogger(CertificationRequestTransition.class.getName());
- private ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder;
- private ResourceOperation resourceOperation;
private CapabilityOperation capabilityOperation;
private ServiceBusinessLogic serviceBusinessLogic;
- private ToscaExportHandler toscaExportUtils;
-
- public CertificationRequestTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation, ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder, ServiceBusinessLogic serviceBusinessLogic,
- CapabilityOperation capabilityOperation, ToscaExportHandler toscaExportUtils) {
- super(componentUtils, lifecycleOperation);
+ public CertificationRequestTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ServiceDistributionArtifactsBuilder serviceDistributionArtifactsBuilder, ServiceBusinessLogic serviceBusinessLogic,
+ CapabilityOperation capabilityOperation, ToscaExportHandler toscaExportUtils, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
// authorized roles
Role[] resourceServiceCheckoutRoles = { Role.ADMIN, Role.DESIGNER };
@@ -87,13 +94,13 @@ public class CertificationRequestTransition extends LifeCycleTransition {
// TODO to be later defined for product
// addAuthorizedRoles(ComponentTypeEnum.PRODUCT,
// Arrays.asList(productCheckoutRoles));
+
+ //additional authorized roles for resource type
+ Role[] resourceRoles = { Role.TESTER};
+ addResouceAuthorizedRoles(ResourceTypeEnum.VFCMT, Arrays.asList(resourceRoles));
- this.serviceDistributionArtifactsBuilder = serviceDistributionArtifactsBuilder;
- if (lifeCycleOperation != null)
- this.resourceOperation = lifeCycleOperation.getResourceOperation();
this.serviceBusinessLogic = serviceBusinessLogic;
this.capabilityOperation = capabilityOperation;
- this.toscaExportUtils = toscaExportUtils;
}
@Override
@@ -125,7 +132,7 @@ public class CertificationRequestTransition extends LifeCycleTransition {
private ResponseFormat getRelevantResponseFormatUncertifiedRI(ComponentInstance nonCertifiedRI, ComponentTypeEnum componentType) {
ResponseFormat responseFormat;
- Either<Resource, StorageOperationStatus> eitherResource = resourceOperation.getResource(nonCertifiedRI.getComponentUid());
+ Either<Resource, StorageOperationStatus> eitherResource = toscaOperationFacade.getToscaElement(nonCertifiedRI.getComponentUid());
if (eitherResource.isRight()) {
responseFormat = componentUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
@@ -133,16 +140,16 @@ public class CertificationRequestTransition extends LifeCycleTransition {
} else {
ActionStatus actionStatus;
Resource resource = eitherResource.left().value();
- Either<List<Resource>, StorageOperationStatus> status = resourceOperation.findLastCertifiedResourceByUUID(resource);
+ Either<Resource, StorageOperationStatus> status = toscaOperationFacade.findLastCertifiedToscaElementByUUID(resource);
if (ValidationUtils.validateMinorVersion(nonCertifiedRI.getComponentVersion())) {
- if (status.isRight() || status.left().value() == null || status.left().value().isEmpty()) {
+ if (status.isRight() || status.left().value() == null) {
actionStatus = ActionStatus.VALIDATED_RESOURCE_NOT_FOUND;
} else {
actionStatus = ActionStatus.FOUND_ALREADY_VALIDATED_RESOURCE;
}
} else {
- if (status.isRight() || status.left().value() == null || status.left().value().isEmpty())
+ if (status.isRight() || status.left().value() == null)
actionStatus = ActionStatus.FOUND_LIST_VALIDATED_RESOURCES;
else {
actionStatus = ActionStatus.FOUND_ALREADY_VALIDATED_RESOURCE;
@@ -157,23 +164,23 @@ public class CertificationRequestTransition extends LifeCycleTransition {
private Either<ActionStatus, Map<String, ArtifactDefinition>> validateMandatoryArtifactsSupplied(Map<String, ArtifactDefinition> artifacts) {
- if (artifacts == null || true == artifacts.isEmpty()) {
+ if (artifacts == null || artifacts.isEmpty()) {
return Either.left(ActionStatus.OK);
}
- Map<String, ArtifactDefinition> invalidArtifacts = new HashMap<String, ArtifactDefinition>();
+ Map<String, ArtifactDefinition> invalidArtifacts = new HashMap<>();
for (Entry<String, ArtifactDefinition> artifact : artifacts.entrySet()) {
ArtifactDefinition artifactDefinition = artifact.getValue();
- if (true == artifactDefinition.getMandatory()) {
+ if (artifactDefinition.getMandatory()) {
String artifactEsId = artifactDefinition.getEsId();
- if (artifactEsId == null || true == artifactEsId.isEmpty()) {
+ if (artifactEsId == null || artifactEsId.isEmpty()) {
invalidArtifacts.put(artifact.getKey(), artifactDefinition);
}
}
}
- if (true == invalidArtifacts.isEmpty()) {
+ if (invalidArtifacts.isEmpty()) {
return Either.left(ActionStatus.OK);
} else {
return Either.right(invalidArtifacts);
@@ -185,81 +192,73 @@ public class CertificationRequestTransition extends LifeCycleTransition {
log.debug("start performing certification request for resource {}", component.getUniqueId());
- // Either<ActionStatus, Map<String, ArtifactDefinition>>
- // validateMandatoryArtifacts =
- // validateMandatoryArtifactsSupplied(component.getArtifacts());
- // log.debug("After checking mandatory artifacts were populated. Result
- // is " + validateMandatoryArtifacts);
- // if (validateMandatoryArtifacts.isRight()) {
- // ResponseFormat responseFormat = componentUtils
- // .getResponseFormatByMissingArtifacts(
- // componentType,
- // validateMandatoryArtifacts.right().value());
- // return Either.right(responseFormat);
- // }
- ActionStatus actionStatus = null;
- ResponseFormat responseFormat = null;
-
- if (componentType == ComponentTypeEnum.SERVICE || (componentType == ComponentTypeEnum.RESOURCE && ((Resource) component).getResourceType() == ResourceTypeEnum.VF)) {
-
- Either<Boolean, ResponseFormat> statusCert = validateAllResourceInstanceCertified(component);
- if (statusCert.isRight()) {
- return Either.right(statusCert.right().value());
- }
-
- statusCert = validateConfiguredAtomicReqCapSatisfied(component);
- if (statusCert.isRight()) {
- return Either.right(statusCert.right().value());
+ ActionStatus actionStatus;
+ ResponseFormat responseFormat;
+ Either<? extends Component, ResponseFormat> result = null;
+ try{
+ if (componentType == ComponentTypeEnum.SERVICE || (componentType == ComponentTypeEnum.RESOURCE && ((Resource) component).getResourceType() == ResourceTypeEnum.VF)) {
+
+ Either<Boolean, ResponseFormat> statusCert = validateAllResourceInstanceCertified(component);
+ if (statusCert.isRight()) {
+ return Either.right(statusCert.right().value());
+ }
+
+ statusCert = validateConfiguredAtomicReqCapSatisfied(component);
+ if (statusCert.isRight()) {
+ return Either.right(statusCert.right().value());
+ }
}
- }
- if (componentType == ComponentTypeEnum.SERVICE) {
- Either<Boolean, StorageOperationStatus> status = validateDeloymentArtifactSupplied((Service) component);
- if (status.isRight()) {
- StorageOperationStatus operationStatus = status.right().value();
- actionStatus = componentUtils.convertFromStorageResponse(operationStatus);
- } else {
- Boolean isDeploymentArtifactExists = status.left().value();
- if (isDeploymentArtifactExists == null || isDeploymentArtifactExists.booleanValue() == false) {
- actionStatus = ActionStatus.SERVICE_DEPLOYMENT_ARTIFACT_NOT_FOUND;
- } else {
- Either<Service, ResponseFormat> generateHeatEnvResult = serviceBusinessLogic.generateHeatEnvArtifacts((Service) component, modifier, shouldLock);
- if (generateHeatEnvResult.isRight()) {
+ if (componentType == ComponentTypeEnum.SERVICE) {
+
+ Either<Service, ResponseFormat> generateHeatEnvResult = serviceBusinessLogic.generateHeatEnvArtifacts((Service) component, modifier, shouldLock);
+
+ if (generateHeatEnvResult.isRight()) {
return Either.right(generateHeatEnvResult.right().value());
}
- Either<Service, ResponseFormat> generateVfModuleResult = serviceBusinessLogic.generateVfModuleArtifacts((Service) component, modifier, shouldLock);
- if (generateVfModuleResult.isRight()) {
+ Either<Service, ResponseFormat> generateVfModuleResult = serviceBusinessLogic.generateVfModuleArtifacts((Service) component, modifier, shouldLock);
+ if (generateVfModuleResult.isRight()) {
return Either.right(generateVfModuleResult.right().value());
- }
}
}
-
- if (actionStatus != null) {
+
+ Either<Either<ArtifactDefinition, Operation>, ResponseFormat> eitherPopulated = componentBl.populateToscaArtifacts(component, modifier, true, inTransaction, shouldLock);
+ if (eitherPopulated != null && eitherPopulated.isRight()) {
+ return Either.right(eitherPopulated.right().value());
+ }
+
+ NodeTypeEnum nodeType = componentType.equals(ComponentTypeEnum.SERVICE) ? NodeTypeEnum.Service : NodeTypeEnum.Resource;
+
+
+ Either<ToscaElement, StorageOperationStatus> certificationRequestResult = lifeCycleOperation.requestCertificationToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId());
+ if (certificationRequestResult.isRight()) {
+ log.debug("checkout failed on graph");
+ StorageOperationStatus response = certificationRequestResult.right().value();
+ actionStatus = componentUtils.convertFromStorageResponse(response);
+
+ if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
+ actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ }
responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- return Either.right(responseFormat);
+ result = Either.right(responseFormat);
}
-
- }
-
- Either<Either<ArtifactDefinition, Operation>, ResponseFormat> eitherPopulated = componentBl.populateToscaArtifacts(component, modifier, true, inTransaction, shouldLock);
- if (eitherPopulated != null && eitherPopulated.isRight()) {
- return Either.right(eitherPopulated.right().value());
- }
-
- NodeTypeEnum nodeType = (componentType.equals(ComponentTypeEnum.SERVICE)) ? NodeTypeEnum.Service : NodeTypeEnum.Resource;
- Either<? extends Component, StorageOperationStatus> certificationRequestResult = lifeCycleOperation.requestCertificationComponent(nodeType, component, modifier, owner, inTransaction);
- if (certificationRequestResult.isRight()) {
- log.debug("checkout failed on graph");
- StorageOperationStatus response = certificationRequestResult.right().value();
- actionStatus = componentUtils.convertFromStorageResponse(response);
-
- if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
- actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ else {
+ result = Either.left(ModelConverter.convertFromToscaElement(certificationRequestResult.left().value()));
+ }
+ } finally {
+ if (result == null || result.isRight()) {
+ BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState");
+ if (inTransaction == false) {
+ log.debug("operation failed. do rollback");
+ titanDao.rollback();
+ }
+ } else {
+ if (inTransaction == false) {
+ log.debug("operation success. do commit");
+ titanDao.commit();
}
- responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- return Either.right(responseFormat);
}
-
- return Either.left(certificationRequestResult.left().value());
+ }
+ return result;
}
private Either<Boolean, ResponseFormat> validateConfiguredAtomicReqCapSatisfied(Component component) {
@@ -369,7 +368,7 @@ public class CertificationRequestTransition extends LifeCycleTransition {
log.debug("validate before certification request. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo);
if (userValidationResponse.isRight()) {
return userValidationResponse;
}
@@ -397,13 +396,4 @@ public class CertificationRequestTransition extends LifeCycleTransition {
return Either.left(true);
}
-
- private Either<Boolean, StorageOperationStatus> validateDeloymentArtifactSupplied(Service service) {
-
- Either<Boolean, StorageOperationStatus> serviceContainsDeploymentArtifacts = this.serviceDistributionArtifactsBuilder.isServiceContainsDeploymentArtifacts(service);
-
- return serviceContainsDeploymentArtifacts;
-
- }
-
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java
index 28227285f1..bfe51ded48 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java
@@ -23,15 +23,19 @@ package org.openecomp.sdc.be.components.lifecycle;
import java.util.Arrays;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.user.Role;
@@ -45,8 +49,8 @@ public class CheckinTransition extends LifeCycleTransition {
private static Logger log = LoggerFactory.getLogger(CheckinTransition.class.getName());
- public CheckinTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
- super(componentUtils, lifecycleOperation);
+ public CheckinTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
// authorized roles
Role[] resourceServiceCheckoutRoles = { Role.ADMIN, Role.DESIGNER };
@@ -71,21 +75,40 @@ public class CheckinTransition extends LifeCycleTransition {
public Either<? extends Component, ResponseFormat> changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, boolean inTransaction) {
log.debug("start performing checkin for {} {}", componentType.name(), component.getUniqueId());
- NodeTypeEnum nodeType = componentType.getNodeType();
- Either<? extends Component, StorageOperationStatus> checkinResourceResult = lifeCycleOperation.checkinComponent(nodeType, component, modifier, owner, inTransaction);
- if (checkinResourceResult.isRight()) {
- log.debug("checkout failed on graph");
- StorageOperationStatus response = checkinResourceResult.right().value();
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
-
- if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
- actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ Either<? extends Component, ResponseFormat> result = null;
+ try{
+ Either<ToscaElement, StorageOperationStatus> checkinResourceResult = lifeCycleOperation.
+ checkinToscaELement(component.getLifecycleState(), component.getUniqueId(), modifier.getUserId(), owner.getUserId());
+
+ if (checkinResourceResult.isRight()) {
+ log.debug("checkout failed on graph");
+ StorageOperationStatus response = checkinResourceResult.right().value();
+ ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
+
+ if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
+ actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ }
+ ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
+ result = Either.right(responseFormat);
+ }
+ else {
+ result = Either.left(ModelConverter.convertFromToscaElement(checkinResourceResult.left().value()));
+ }
+ } finally {
+ if (result == null || result.isRight()) {
+ BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState");
+ if (inTransaction == false) {
+ log.debug("operation failed. do rollback");
+ titanDao.rollback();
+ }
+ } else {
+ if (inTransaction == false) {
+ log.debug("operation success. do commit");
+ titanDao.commit();
+ }
}
- ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- return Either.right(responseFormat);
}
-
- return Either.left(checkinResourceResult.left().value());
+ return result;
}
@Override
@@ -94,13 +117,19 @@ public class CheckinTransition extends LifeCycleTransition {
log.debug("validate before checkin. component name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo);
if (userValidationResponse.isRight()) {
return userValidationResponse;
}
if (!oldState.equals(LifecycleStateEnum.READY_FOR_CERTIFICATION) && !oldState.equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)) {
- ResponseFormat error = componentUtils.getResponseFormat(ActionStatus.COMPONENT_ALREADY_CHECKED_IN, componentName, componentType.name().toLowerCase(), owner.getFirstName(), owner.getLastName(), owner.getUserId());
+ ActionStatus action = ActionStatus.COMPONENT_ALREADY_CHECKED_IN;
+ if (oldState.equals(LifecycleStateEnum.CERTIFICATION_IN_PROGRESS)){
+ action = ActionStatus.COMPONENT_SENT_FOR_CERTIFICATION;
+ } else if (oldState.equals(LifecycleStateEnum.CERTIFIED)){
+ action = ActionStatus.COMPONENT_ALREADY_CERTIFIED;
+ }
+ ResponseFormat error = componentUtils.getResponseFormat(action, componentName, componentType.name().toLowerCase(), owner.getFirstName(), owner.getLastName(), owner.getUserId());
return Either.right(error);
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java
index a4e6bdb86c..d6cbd3663c 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java
@@ -21,17 +21,26 @@
package org.openecomp.sdc.be.components.lifecycle;
import java.util.Arrays;
+import java.util.List;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
+import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
+import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.InputDefinition;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.user.Role;
@@ -43,12 +52,10 @@ import fj.data.Either;
public class CheckoutTransition extends LifeCycleTransition {
- private static final String PLACE_HOLDER_RESOURCE_TYPES = "validForResourceTypes";
-
private static Logger log = LoggerFactory.getLogger(CheckoutTransition.class.getName());
- public CheckoutTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
- super(componentUtils, lifecycleOperation);
+ public CheckoutTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
// authorized roles
Role[] resourceServiceCheckoutRoles = { Role.ADMIN, Role.DESIGNER };
@@ -74,24 +81,66 @@ public class CheckoutTransition extends LifeCycleTransition {
log.debug("start performing {} for resource {}", getName().name(), component.getUniqueId());
- if (componentBl != null)
- componentBl.setDeploymentArtifactsPlaceHolder(component, modifier);
- NodeTypeEnum nodeType = componentType.getNodeType();
- Either<? extends Component, StorageOperationStatus> checkoutResourceResult = lifeCycleOperation.checkoutComponent(nodeType, component, modifier, owner, inTransaction);
+ Either<? extends Component, ResponseFormat> result = null;
+ try {
+
+ Either<ToscaElement, StorageOperationStatus> checkoutResourceResult = lifeCycleOperation.checkoutToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId());
+
+ if (checkoutResourceResult.isRight()) {
+ log.debug("checkout failed on graph");
+ StorageOperationStatus response = checkoutResourceResult.right().value();
+ ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
+
+ if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
+ actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ }
+ ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
+ result = Either.right(responseFormat);
+ } else {
+ Component clonedComponent = ModelConverter.convertFromToscaElement(checkoutResourceResult.left().value());
+ result = Either.left(clonedComponent);
+ Either<Boolean, ResponseFormat> upgradeToLatestGeneric = componentBl.shouldUpgradeToLatestGeneric(clonedComponent);
+ if (upgradeToLatestGeneric.isRight())
+ result = Either.right(upgradeToLatestGeneric.right().value());
+ else if (upgradeToLatestGeneric.left().value()) {
+ StorageOperationStatus response = upgradeToLatestGenericData(clonedComponent);
+ if (StorageOperationStatus.OK != response) {
+ ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
+ ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
+ result = Either.right(responseFormat);
+ }
+ }
- if (checkoutResourceResult.isRight()) {
- log.debug("checkout failed on graph");
- StorageOperationStatus response = checkoutResourceResult.right().value();
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
+ }
- if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
- actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ } finally {
+ if (result == null || result.isRight()) {
+ BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState");
+ if (inTransaction == false) {
+ log.debug("operation failed. do rollback");
+ titanDao.rollback();
+ }
+ } else {
+ if (inTransaction == false) {
+ log.debug("operation success. do commit");
+ titanDao.commit();
+ }
}
- ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- return Either.right(responseFormat);
}
+ return result;
+ }
- return Either.left(checkoutResourceResult.left().value());
+ private StorageOperationStatus upgradeToLatestGenericData(Component clonedComponent) {
+
+ StorageOperationStatus updateStatus = null;
+ Either<Component, StorageOperationStatus> updateEither = toscaOperationFacade.updateToscaElement(clonedComponent);
+ if (updateEither.isRight())
+ updateStatus = updateEither.right().value();
+ else if (clonedComponent.shouldGenerateInputs()) {
+ List<InputDefinition> newInputs = clonedComponent.getInputs();
+ updateStatus = lifeCycleOperation.updateToscaDataOfToscaElement(clonedComponent.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, newInputs, JsonPresentationFields.NAME);
+ }
+ return updateStatus;
}
@Override
@@ -100,7 +149,7 @@ public class CheckoutTransition extends LifeCycleTransition {
log.debug("validate before checkout. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, component, componentType, lifecycleChangeInfo);
if (userValidationResponse.isRight()) {
return userValidationResponse;
}
@@ -131,11 +180,4 @@ public class CheckoutTransition extends LifeCycleTransition {
return Either.left(true);
}
- /*
- * private Either<Boolean, ResponseFormat> productContactsValidation(Product product, User modifier) { // validate user Either<Boolean, ResponseFormat> eitherResponse = Either.left(true); String role = modifier.getRole(); if
- * (UserRoleEnum.PRODUCT_MANAGER.getName().equals(role) || UserRoleEnum.PRODUCT_STRATEGIST.getName().equals(role)){ String userId = modifier.getUserId(); if (!product.getContacts().contains(userId)){ log.
- * debug("User with userId {} cannot checkout product. userId not found in product contacts list" , userId); ResponseFormat responseFormat = componentUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION); return Either.right(responseFormat);
- * } else { log. trace("Found user userId {} in product contacts - checkout request validated" ); } } return eitherResponse; }
- */
-
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java
index 49d94dc80b..0d0e06fe6d 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java
@@ -24,44 +24,53 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction.LifecycleChanceActionEnum;
import org.openecomp.sdc.be.config.ConfigurationManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
+import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.user.Role;
import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.beans.factory.annotation.Autowired;
import fj.data.Either;
public abstract class LifeCycleTransition {
protected ConfigurationManager configurationManager;
- protected ILifecycleOperation lifeCycleOperation;
+ @Autowired
+ protected ToscaElementLifecycleOperation lifeCycleOperation;
+ @Autowired
+ protected TitanDao titanDao;
protected ComponentsUtils componentUtils;
protected Map<ComponentTypeEnum, List<Role>> authorizedRoles;
+ protected Map<ResourceTypeEnum, List<Role>> resourceAuthorizedRoles;
+
+ ToscaOperationFacade toscaOperationFacade;
- protected LifeCycleTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
+ protected LifeCycleTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation2, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
- // configurationManager = (ConfigurationManager)
- // context.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR);
- // lifeCycleOperation = LifecycleOperation.getInstance();
this.configurationManager = ConfigurationManager.getConfigurationManager();
- this.lifeCycleOperation = lifecycleOperation;
+ this.lifeCycleOperation = lifecycleOperation2;
this.componentUtils = componentUtils;
this.authorizedRoles = new HashMap<>();
-
+ this.resourceAuthorizedRoles = new HashMap<>();
+ this.toscaOperationFacade = toscaOperationFacade;
+ this.titanDao = titanDao;
}
public abstract LifeCycleTransitionEnum getName();
@@ -76,11 +85,11 @@ public abstract class LifeCycleTransition {
this.configurationManager = configurationManager;
}
- public ILifecycleOperation getLifeCycleOperation() {
+ public ToscaElementLifecycleOperation getLifeCycleOperation() {
return lifeCycleOperation;
}
- public void setLifeCycleOperation(ILifecycleOperation lifeCycleOperation) {
+ public void setLifeCycleOperation(ToscaElementLifecycleOperation lifeCycleOperation) {
this.lifeCycleOperation = lifeCycleOperation;
}
@@ -91,14 +100,14 @@ public abstract class LifeCycleTransition {
public void addAuthorizedRoles(ComponentTypeEnum componentType, List<Role> authorizedRoles) {
this.authorizedRoles.put(componentType, authorizedRoles);
}
+
+ public List<Role> getResourceAuthorizedRoles(ResourceTypeEnum resourceType) {
+ return resourceAuthorizedRoles.get(resourceType);
+ }
- //
- // public Either<? extends Component, ResponseFormat>
- // changeState(ComponentTypeEnum componentType, Component component,
- // ComponentBusinessLogic componentBl, User modifier, User owner){
- // return changeState(componentType, component, componentBl, modifier,
- // owner, false);
- // }
+ public void addResouceAuthorizedRoles(ResourceTypeEnum resourceType, List<Role> authorizedRoles) {
+ this.resourceAuthorizedRoles.put(resourceType, authorizedRoles);
+ }
public abstract Either<? extends Component, ResponseFormat> changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean needLock, boolean inTransaction);
@@ -122,8 +131,7 @@ public abstract class LifeCycleTransition {
protected Either<User, ResponseFormat> getComponentOwner(Component component, ComponentTypeEnum componentType, boolean inTransaction) {
- NodeTypeEnum nodeType = componentType.getNodeType();
- Either<User, StorageOperationStatus> resourceOwnerResult = getLifeCycleOperation().getComponentOwner(component.getUniqueId(), nodeType, inTransaction);
+ Either<User, StorageOperationStatus> resourceOwnerResult = getLifeCycleOperation().getToscaElementOwner(component.getUniqueId());
if (resourceOwnerResult.isRight()) {
ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(componentUtils.convertFromStorageResponse(resourceOwnerResult.right().value()), component, componentType);
return Either.right(responseFormat);
@@ -131,21 +139,13 @@ public abstract class LifeCycleTransition {
return Either.left(resourceOwnerResult.left().value());
}
- /**
- * isUserValidForRequest
- *
- * @param modifier
- * @param action
- * TODO
- * @return
- */
- protected Either<Boolean, ResponseFormat> userRoleValidation(User modifier, ComponentTypeEnum componentType, LifecycleChangeInfoWithAction lifecycleChangeInfo) {
+ protected Either<Boolean, ResponseFormat> userRoleValidation(User modifier,Component component, ComponentTypeEnum componentType, LifecycleChangeInfoWithAction lifecycleChangeInfo) {
// validate user
- if (getAuthorizedRoles(componentType).contains(Role.valueOf(modifier.getRole()))) {
+ //first check the user for the component and then for the resource
+ if (getAuthorizedRoles(componentType).contains(Role.valueOf(modifier.getRole())) || userResourceRoleValidation(component,componentType,modifier)) {
return Either.left(true);
}
-
// this is only when creating vfc/cp when import vf from csar - when we
// create resources from node type, we create need to change the state
// to certified
@@ -156,5 +156,18 @@ public abstract class LifeCycleTransition {
ResponseFormat responseFormat = componentUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
return Either.right(responseFormat);
}
+
+ protected boolean userResourceRoleValidation(Component component, ComponentTypeEnum componentType, User modifier) {
+ if (componentType.equals(ComponentTypeEnum.RESOURCE)){
+ ResourceTypeEnum resourceType = ((ResourceMetadataDataDefinition)component.getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceType();
+ if (getResourceAuthorizedRoles(resourceType)!=null && getResourceAuthorizedRoles(resourceType).contains(Role.valueOf(modifier.getRole()))) {
+ return true;
+ }
+ } else {
+ return false;
+ }
+
+ return false;
+ }
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java
index 27709bb332..8e89a6bf31 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java
@@ -34,8 +34,11 @@ import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
+import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
@@ -43,14 +46,13 @@ import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.Service;
import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
import org.openecomp.sdc.be.model.operations.api.ICacheMangerOperation;
import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
-import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
-import org.openecomp.sdc.be.model.operations.impl.ProductOperation;
-import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
-import org.openecomp.sdc.be.model.operations.impl.ServiceOperation;
+import org.openecomp.sdc.be.model.operations.impl.ComponentOperation;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.tosca.ToscaExportHandler;
import org.openecomp.sdc.common.api.Constants;
@@ -76,13 +78,7 @@ public class LifecycleBusinessLogic {
private ArtifactsBusinessLogic artifactsBusinessLogic;
@Autowired
- private ResourceOperation resourceOperation;
-
- @Autowired
- private ServiceOperation serviceOperation;
-
- @Autowired
- private ProductOperation productOperation;
+ private TitanDao titanDao;
@Autowired
private CapabilityOperation capabilityOperation;
@@ -93,7 +89,7 @@ public class LifecycleBusinessLogic {
private ComponentsUtils componentUtils;
@javax.annotation.Resource
- private ILifecycleOperation lifecycleOperation;
+ private ToscaElementLifecycleOperation lifecycleOperation;
@javax.annotation.Resource
ArtifactsBusinessLogic artifactsManager;
@@ -114,6 +110,9 @@ public class LifecycleBusinessLogic {
@Autowired
ICacheMangerOperation cacheManagerOperation;
+
+ @Autowired
+ ToscaOperationFacade toscaOperationFacade;
private Map<String, LifeCycleTransition> stateTransitions;
private static volatile boolean isInitialized = false;
@@ -134,29 +133,29 @@ public class LifecycleBusinessLogic {
private void initStateOperations() {
stateTransitions = new HashMap<String, LifeCycleTransition>();
- LifeCycleTransition checkoutOp = new CheckoutTransition(componentUtils, lifecycleOperation);
+ LifeCycleTransition checkoutOp = new CheckoutTransition(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
stateTransitions.put(checkoutOp.getName().name(), checkoutOp);
- UndoCheckoutTransition undoCheckoutOp = new UndoCheckoutTransition(componentUtils, lifecycleOperation);
+ UndoCheckoutTransition undoCheckoutOp = new UndoCheckoutTransition(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
undoCheckoutOp.setArtifactsBusinessLogic(artifactsBusinessLogic);
stateTransitions.put(undoCheckoutOp.getName().name(), undoCheckoutOp);
- LifeCycleTransition checkinOp = new CheckinTransition(componentUtils, lifecycleOperation);
+ LifeCycleTransition checkinOp = new CheckinTransition(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
stateTransitions.put(checkinOp.getName().name(), checkinOp);
- LifeCycleTransition certificationRequest = new CertificationRequestTransition(componentUtils, lifecycleOperation, serviceDistributionArtifactsBuilder, serviceBusinessLogic, capabilityOperation, toscaExportUtils);
+ LifeCycleTransition certificationRequest = new CertificationRequestTransition(componentUtils, lifecycleOperation, serviceDistributionArtifactsBuilder, serviceBusinessLogic, capabilityOperation, toscaExportUtils, toscaOperationFacade, titanDao);
stateTransitions.put(certificationRequest.getName().name(), certificationRequest);
- LifeCycleTransition startCertification = new StartCertificationTransition(componentUtils, lifecycleOperation);
+ LifeCycleTransition startCertification = new StartCertificationTransition(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
stateTransitions.put(startCertification.getName().name(), startCertification);
- LifeCycleTransition failCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.FAIL_CERTIFICATION, componentUtils, lifecycleOperation);
+ LifeCycleTransition failCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.FAIL_CERTIFICATION, componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
stateTransitions.put(failCertification.getName().name(), failCertification);
- LifeCycleTransition cancelCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.CANCEL_CERTIFICATION, componentUtils, lifecycleOperation);
+ LifeCycleTransition cancelCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.CANCEL_CERTIFICATION, componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
stateTransitions.put(cancelCertification.getName().name(), cancelCertification);
- CertificationChangeTransition successCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.CERTIFY, componentUtils, lifecycleOperation);
+ CertificationChangeTransition successCertification = new CertificationChangeTransition(LifeCycleTransitionEnum.CERTIFY, componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
successCertification.setArtifactsManager(artifactsBusinessLogic);
stateTransitions.put(successCertification.getName().name(), successCertification);
}
@@ -172,132 +171,16 @@ public class LifecycleBusinessLogic {
// TODO: rhalili - should use changeComponentState when possible
public Either<Resource, ResponseFormat> changeState(String resourceId, User modifier, LifeCycleTransitionEnum transitionEnum, LifecycleChangeInfoWithAction changeInfo, boolean inTransaction, boolean needLock) {
return (Either<Resource, ResponseFormat>) changeComponentState(ComponentTypeEnum.RESOURCE, resourceId, modifier, transitionEnum, changeInfo, inTransaction, needLock);
-
- // LifeCycleTransition lifeCycleTransition =
- // stateTransitions.get(transitionEnum.name());
- // if (lifeCycleTransition == null) {
- // log.debug("state operation is not valid. operations allowed are: {}",
- // LifeCycleTransitionEnum.valuesAsString());
- // ResponseFormat error =
- // componentUtils.getInvalidContentErrorAndAudit(modifier,
- // AuditingActionEnum.CHECKOUT_RESOURCE);
- // return Either.right(error);
- // }
- //
- // Either<Resource, ResponseFormat> operationResult;
- // Resource resource = null;
- // boolean needToUnlockResource = false;
- //
- // log.debug("get resource from graph");
- // ResponseFormat errorResponse;
- // Either<Resource, ResponseFormat> eitherResourceResponse =
- // getResourceForChange(resourceId, modifier, lifeCycleTransition);
- // if (eitherResourceResponse.isRight()) {
- // return eitherResourceResponse;
- // }
- // resource = eitherResourceResponse.left().value();
- // String resourceCurrVersion = resource.getResourceVersion();
- // LifecycleStateEnum resourceCurrState = resource.getLifecycleState();
- //
- // if (inTransaction == false) {
- // // lock resource
- // Either<Boolean, ResponseFormat> eitherLockResource =
- // lockResource(resource);
- // if (eitherLockResource.isRight()) {
- // errorResponse = eitherLockResource.right().value();
- // componentUtils.auditResource(errorResponse, modifier, resource,
- // resourceCurrState.name(), resourceCurrVersion,
- // lifeCycleTransition.getAuditingAction(), null);
- // return Either.right(errorResponse);
- // }
- // needToUnlockResource = true;
- // }
- //
- // try {
- // Either<Boolean, ResponseFormat> resourceNotDeleted =
- // validateResourceNotDeleted(modifier, lifeCycleTransition, resource,
- // resourceCurrVersion);
- // if (resourceNotDeleted.isRight()) {
- // return Either.right(resourceNotDeleted.right().value());
- // }
- //
- // Either<Boolean, ResponseFormat> validateHighestVersion =
- // validateHighestVersion(modifier, lifeCycleTransition, resource,
- // resourceCurrVersion);
- // if (validateHighestVersion.isRight()) {
- // return Either.right(validateHighestVersion.right().value());
- // }
- //
- // Either<User, ResponseFormat> ownerResult =
- // lifeCycleTransition.getResourceOwner(resource);
- // if (ownerResult.isRight()) {
- // return Either.right(ownerResult.right().value());
- // }
- // User owner = ownerResult.left().value();
- // log.debug("owner of resource {} is {}", resource.getUniqueId(),
- // owner.getUserId());
- //
- // LifecycleStateEnum oldState = resource.getLifecycleState();
- //
- // Either<String, ResponseFormat> commentValidationResult =
- // validateComment(changeInfo, transitionEnum);
- // if (commentValidationResult.isRight()) {
- // errorResponse = commentValidationResult.right().value();
- // EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new
- // EnumMap<AuditingFieldsKeysEnum,
- // Object>(AuditingFieldsKeysEnum.class);
- // auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT,
- // changeInfo.getUserRemarks());
- // componentUtils.auditResource(errorResponse, modifier, resource,
- // resourceCurrState.name(), resourceCurrVersion,
- // lifeCycleTransition.getAuditingAction(), auditingFields);
- // return Either.right(errorResponse);
- // }
- // changeInfo.setUserRemarks(commentValidationResult.left().value());
- //
- // Either<Boolean, ResponseFormat> stateValidationResult =
- // lifeCycleTransition.validateResourceBeforeTransition(resource.getResourceName(),
- // ComponentTypeEnum.RESOURCE, modifier, owner, oldState);
- // if (stateValidationResult.isRight()) {
- // errorResponse = stateValidationResult.right().value();
- // componentUtils.auditResource(errorResponse, modifier, resource,
- // resourceCurrState.name(), resourceCurrVersion,
- // lifeCycleTransition.getAuditingAction(), null);
- // return Either.right(errorResponse);
- // }
- //
- // operationResult = lifeCycleTransition.changeStateOperation(resource,
- // modifier, owner, inTransaction);
- //
- // if (operationResult.isRight()) {
- // errorResponse = operationResult.right().value();
- // log.debug("audit before sending response");
- // componentUtils.auditResource(errorResponse, modifier, resource,
- // resourceCurrState.name(), resourceCurrVersion,
- // lifeCycleTransition.getAuditingAction(), null);
- //
- // return Either.right(errorResponse);
- // }
- // Resource resourceAfterOperation = operationResult.left().value();
- // EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new
- // EnumMap<AuditingFieldsKeysEnum,
- // Object>(AuditingFieldsKeysEnum.class);
- // auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT,
- // changeInfo.getUserRemarks());
- // componentUtils.auditResource(componentUtils.getResponseFormat(ActionStatus.OK),
- // modifier, resourceAfterOperation, resourceCurrState.name(),
- // resourceCurrVersion, lifeCycleTransition.getAuditingAction(),
- // auditingFields);
- // return operationResult;
- //
- // } finally {
- // log.debug("unlock resource {}", resourceId);
- // if (needToUnlockResource && resource != null) {
- // resource.setUniqueId(resourceId);
- // graphLockOperation.unlockResource(resource);
- // }
- // }
-
+ }
+
+ private boolean isComponentVFCMT(Component component, ComponentTypeEnum componentType){
+ if (componentType.equals(ComponentTypeEnum.RESOURCE)){
+ ResourceTypeEnum resourceType = ((ResourceMetadataDataDefinition)component.getComponentMetadataDefinition().getMetadataDataDefinition()).getResourceType();
+ if (resourceType.equals(ResourceTypeEnum.VFCMT)){
+ return true;
+ }
+ }
+ return false;
}
public Either<? extends Component, ResponseFormat> changeComponentState(ComponentTypeEnum componentType, String componentId, User modifier, LifeCycleTransitionEnum transitionEnum, LifecycleChangeInfoWithAction changeInfo, boolean inTransaction,
@@ -309,12 +192,8 @@ public class LifecycleBusinessLogic {
ResponseFormat error = componentUtils.getInvalidContentErrorAndAudit(modifier, AuditingActionEnum.CHECKOUT_RESOURCE);
return Either.right(error);
}
- ComponentBusinessLogic bl = getComponentBL(componentType);
-
- Either<? extends Component, ResponseFormat> operationResult = null;
Component component = null;
- // boolean needToUnlockResource = false;
- log.debug("get resource from graph");
+ log.info("get resource from graph");
ResponseFormat errorResponse;
Either<? extends Component, ResponseFormat> eitherResourceResponse = getComponentForChange(componentType, componentId, modifier, lifeCycleTransition, changeInfo);
@@ -325,110 +204,133 @@ public class LifecycleBusinessLogic {
String resourceCurrVersion = component.getVersion();
LifecycleStateEnum resourceCurrState = component.getLifecycleState();
+ log.info("lock component {}", componentId);
// lock resource
if (inTransaction == false && needLock) {
Either<Boolean, ResponseFormat> eitherLockResource = lockComponent(componentType, component);
if (eitherLockResource.isRight()) {
errorResponse = eitherLockResource.right().value();
componentUtils.auditComponent(errorResponse, modifier, component, resourceCurrState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, null);
+ log.error("lock component {} failed", componentId);
return Either.right(errorResponse);
}
- // needToUnlockResource = true;
}
+ log.info("after lock component {}", componentId);
try {
Either<String, ResponseFormat> commentValidationResult = validateComment(changeInfo, transitionEnum);
if (commentValidationResult.isRight()) {
errorResponse = commentValidationResult.right().value();
- EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class);
+ EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<>(AuditingFieldsKeysEnum.class);
auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, changeInfo.getUserRemarks());
componentUtils.auditComponent(errorResponse, modifier, component, resourceCurrState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, auditingFields);
return Either.right(errorResponse);
}
changeInfo.setUserRemarks(commentValidationResult.left().value());
-
+ log.info("after validate component");
Either<Boolean, ResponseFormat> validateHighestVersion = validateHighestVersion(modifier, lifeCycleTransition, component, resourceCurrVersion, componentType);
if (validateHighestVersion.isRight()) {
return Either.right(validateHighestVersion.right().value());
}
-
- Either<User, ResponseFormat> ownerResult = lifeCycleTransition.getComponentOwner(component, componentType, inTransaction);
- if (ownerResult.isRight()) {
- return Either.right(ownerResult.right().value());
- }
- User owner = ownerResult.left().value();
- log.debug("owner of resource {} is {}", component.getUniqueId(), owner.getUserId());
-
- LifecycleStateEnum oldState = component.getLifecycleState();
-
- Either<Boolean, ResponseFormat> stateValidationResult = lifeCycleTransition.validateBeforeTransition(component, componentType, modifier, owner, oldState, changeInfo);
- if (stateValidationResult.isRight()) {
- errorResponse = stateValidationResult.right().value();
- EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class);
- auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, changeInfo.getUserRemarks());
- componentUtils.auditComponent(errorResponse, modifier, component, resourceCurrState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, auditingFields);
- return Either.right(errorResponse);
-
- }
-
- operationResult = lifeCycleTransition.changeState(componentType, component, bl, modifier, owner, false, inTransaction);
-
- if (operationResult.isRight()) {
- errorResponse = operationResult.right().value();
- log.debug("audit before sending response");
- componentUtils.auditComponentAdmin(errorResponse, modifier, component, resourceCurrState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType);
-
- return Either.right(errorResponse);
+ log.info("after validate Highest Version");
+ if (isComponentVFCMT(component,componentType)){
+ Either<? extends Component, ResponseFormat> changeVFCMTStateResponse = changeVFCMTState(componentType, modifier, transitionEnum, changeInfo, inTransaction, component);
+ if (changeVFCMTStateResponse.isRight()){
+ return changeVFCMTStateResponse;
+ }
}
- Component resourceAfterOperation = operationResult.left().value();
- EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class);
- auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, changeInfo.getUserRemarks());
- componentUtils.auditComponent(componentUtils.getResponseFormat(ActionStatus.OK), modifier, resourceAfterOperation, resourceCurrState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, auditingFields);
- return operationResult;
+ return changeState(component, lifeCycleTransition, componentType, modifier, changeInfo, inTransaction);
} finally {
- log.debug("unlock component {}", componentId);
+ log.info("unlock component {}", componentId);
if (inTransaction == false && needLock && component != null) {
component.setUniqueId(componentId);
NodeTypeEnum nodeType = componentType.getNodeType();
+ log.info("During change state, another component {} has been created/updated", componentId);
+ graphLockOperation.unlockComponent(componentId, nodeType);
- // Handle component change in the cache of the side affect of
- // the operation
- if (operationResult != null && operationResult.isLeft()) {
- Component componentAfterOpertion = operationResult.left().value();
- String uniqueId = componentAfterOpertion.getUniqueId();
- if (false == componentId.equals(uniqueId)) {
- log.debug("During change state, another component {} has been created/updated", uniqueId);
- if (uniqueId != null) {
- cacheManagerOperation.updateComponentInCache(uniqueId, componentAfterOpertion.getLastUpdateDate(), nodeType);
- }
- }
- }
+ }
+ }
- graphLockOperation.unlockComponent(componentId, nodeType);
+ }
+ /*
+ * special case for certification of VFCMT - VFCMT can be certified by Designer or Tester right after checkin
+ * in case the operation "submit for test" / "start testing" is done to "VFCMT" - please return error 400
+ */
+ private Either<? extends Component, ResponseFormat> changeVFCMTState(ComponentTypeEnum componentType, User modifier,
+ LifeCycleTransitionEnum transitionEnum, LifecycleChangeInfoWithAction changeInfo, boolean inTransaction,
+ Component component) {
+ LifecycleStateEnum oldState = component.getLifecycleState();
+ if (transitionEnum.equals(LifeCycleTransitionEnum.START_CERTIFICATION) ||
+ transitionEnum.equals(LifeCycleTransitionEnum.CERTIFICATION_REQUEST)){
+ return Either.right(componentUtils.getResponseFormat(
+ ActionStatus.RESOURCE_VFCMT_LIFECYCLE_STATE_NOT_VALID, transitionEnum.getDisplayName()));
+ } //certify is done directly from checkin
+ else if (transitionEnum.equals(LifeCycleTransitionEnum.CERTIFY) && oldState.equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN)){
+ //we will call for submit for testing first and then for certify
+ Either<? extends Component, ResponseFormat> actionResponse = changeState(component,
+ stateTransitions.get(LifeCycleTransitionEnum.CERTIFICATION_REQUEST.name()),
+ componentType, modifier, changeInfo, inTransaction);
+ if (actionResponse.isRight()) {
+ return actionResponse;
}
+ actionResponse = changeState(component,
+ stateTransitions.get(LifeCycleTransitionEnum.START_CERTIFICATION.name()),
+ componentType, modifier, changeInfo, inTransaction);
+ if (actionResponse.isRight()) {
+ return actionResponse;
+ }
}
+ return Either.left(null);
+ }
+
+ private Either<? extends Component, ResponseFormat> changeState(Component component, LifeCycleTransition lifeCycleTransition,
+ ComponentTypeEnum componentType, User modifier, LifecycleChangeInfoWithAction changeInfo,boolean inTransaction){
+ ResponseFormat errorResponse;
+
+ LifecycleStateEnum oldState = component.getLifecycleState();
+ String resourceCurrVersion = component.getVersion();
+ ComponentBusinessLogic bl = getComponentBL(componentType);
+
+ Either<User, ResponseFormat> ownerResult = lifeCycleTransition.getComponentOwner(component, componentType, inTransaction);
+ if (ownerResult.isRight()) {
+ return Either.right(ownerResult.right().value());
+ }
+ User owner = ownerResult.left().value();
+ log.info("owner of resource {} is {}", component.getUniqueId(), owner.getUserId());
+
+ Either<Boolean, ResponseFormat> stateValidationResult = lifeCycleTransition.validateBeforeTransition(component, componentType, modifier, owner, oldState, changeInfo);
+ if (stateValidationResult.isRight()) {
+ log.error("Failed to validateBeforeTransition");
+ errorResponse = stateValidationResult.right().value();
+ EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<>(AuditingFieldsKeysEnum.class);
+ auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, changeInfo.getUserRemarks());
+ componentUtils.auditComponent(errorResponse, modifier, component, oldState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, auditingFields);
+ return Either.right(errorResponse);
+ }
+
+ Either<? extends Component, ResponseFormat> operationResult = lifeCycleTransition.changeState(componentType, component, bl, modifier, owner, false, inTransaction);
+
+ if (operationResult.isRight()) {
+ errorResponse = operationResult.right().value();
+ log.info("audit before sending error response");
+ componentUtils.auditComponentAdmin(errorResponse, modifier, component, oldState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType);
+
+ return Either.right(errorResponse);
+ }
+ Component resourceAfterOperation = operationResult.left().value();
+ EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class);
+ auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, changeInfo.getUserRemarks());
+ componentUtils.auditComponent(componentUtils.getResponseFormat(ActionStatus.OK), modifier, resourceAfterOperation, oldState.name(), resourceCurrVersion, lifeCycleTransition.getAuditingAction(), componentType, auditingFields);
+ return operationResult;
}
private Either<? extends Component, ResponseFormat> getComponentForChange(ComponentTypeEnum componentType, String componentId, User modifier, LifeCycleTransition lifeCycleTransition, LifecycleChangeInfoWithAction changeInfo) {
- Either<? extends Component, StorageOperationStatus> eitherResourceResponse = Either.right(StorageOperationStatus.GENERAL_ERROR);
- switch (componentType) {
- case SERVICE:
- eitherResourceResponse = serviceOperation.getComponent(componentId, true);
- break;
- case PRODUCT:
- eitherResourceResponse = productOperation.getComponent(componentId, true);
- break;
- case RESOURCE:
- eitherResourceResponse = resourceOperation.getComponent(componentId, true);
- break;
- default:
- break;
- }
+ Either<? extends Component, StorageOperationStatus> eitherResourceResponse = toscaOperationFacade.getToscaElement(componentId);
- ResponseFormat errorResponse = null;
+ ResponseFormat errorResponse;
if (eitherResourceResponse.isRight()) {
ActionStatus actionStatus = componentUtils.convertFromStorageResponse(eitherResourceResponse.right().value(), componentType);
errorResponse = componentUtils.getResponseFormat(actionStatus, Constants.EMPTY_STRING);
@@ -494,28 +396,6 @@ public class LifecycleBusinessLogic {
}
- private Either<Resource, ResponseFormat> getResourceForChange(String resourceId, User modifier, LifeCycleTransition lifeCycleTransition) {
- Either<Resource, StorageOperationStatus> eitherResourceResponse = resourceOperation.getResource(resourceId, true);
-
- ResponseFormat errorResponse = null;
- if (eitherResourceResponse.isRight()) {
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(eitherResourceResponse.right().value());
- errorResponse = componentUtils.getResponseFormatByResource(actionStatus, "");
- log.debug("audit before sending response");
- // For audit of not found, resourceName should be uniqueID according
- // to Ella
- EnumMap<AuditingFieldsKeysEnum, Object> auditingFields = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class);
- auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, resourceId);
- componentUtils.auditResource(errorResponse, modifier, null, "", "", lifeCycleTransition.getAuditingAction(), null);
-
- return Either.right(errorResponse);
- }
- Resource resource = eitherResourceResponse.left().value();
-
- return Either.left(resource);
-
- }
-
private Either<String, ResponseFormat> validateComment(LifecycleChangeInfoWithAction changeInfo, LifeCycleTransitionEnum transitionEnum) {
String comment = changeInfo.getUserRemarks();
if (LifeCycleTransitionEnum.CANCEL_CERTIFICATION == transitionEnum || LifeCycleTransitionEnum.CERTIFY == transitionEnum || LifeCycleTransitionEnum.FAIL_CERTIFICATION == transitionEnum || LifeCycleTransitionEnum.CHECKIN == transitionEnum
@@ -548,25 +428,39 @@ public class LifecycleBusinessLogic {
private ComponentBusinessLogic getComponentBL(ComponentTypeEnum componentTypeEnum) {
ComponentBusinessLogic businessLogic;
switch (componentTypeEnum) {
- case RESOURCE: {
- businessLogic = this.resourceBusinessLogic;
- break;
- }
- case SERVICE: {
- businessLogic = this.serviceBusinessLogic;
- break;
- }
- case PRODUCT: {
- businessLogic = this.productBusinessLogic;
- break;
- }
-
- default: {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeSystemError, "getComponentBL");
- throw new IllegalArgumentException("Illegal component type:" + componentTypeEnum.getValue());
- }
+ case RESOURCE: {
+ businessLogic = this.resourceBusinessLogic;
+ break;
+ }
+ case SERVICE: {
+ businessLogic = this.serviceBusinessLogic;
+ break;
+ }
+ case PRODUCT: {
+ businessLogic = this.productBusinessLogic;
+ break;
+ }
+
+ default: {
+ BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeSystemError, "getComponentBL");
+ throw new IllegalArgumentException("Illegal component type:" + componentTypeEnum.getValue());
+ }
}
return businessLogic;
}
+
+ public Either<Component, ResponseFormat> getLatestComponentByUuid(ComponentTypeEnum componentTypeEnum, String uuid) {
+
+ Either<Component, StorageOperationStatus> latestVersionEither = toscaOperationFacade.getLatestComponentByUuid(uuid);
+
+ if (latestVersionEither.isRight()) {
+
+ return Either.right(componentUtils.getResponseFormat(componentUtils.convertFromStorageResponse(latestVersionEither.right().value(), componentTypeEnum), uuid));
+ }
+
+ Component latestComponent = latestVersionEither.left().value();
+
+ return Either.left(latestComponent);
+ }
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/StartCertificationTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/StartCertificationTransition.java
index 918140b0af..8a80e0bb64 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/StartCertificationTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/StartCertificationTransition.java
@@ -22,15 +22,23 @@ package org.openecomp.sdc.be.components.lifecycle;
import java.util.Arrays;
+import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
@@ -45,14 +53,18 @@ public class StartCertificationTransition extends LifeCycleTransition {
private static Logger log = LoggerFactory.getLogger(StartCertificationTransition.class.getName());
- public StartCertificationTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
- super(componentUtils, lifecycleOperation);
+ public StartCertificationTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
// authorized roles
Role[] rsrcServiceStartCertificationRoles = { Role.ADMIN, Role.TESTER };
addAuthorizedRoles(ComponentTypeEnum.RESOURCE, Arrays.asList(rsrcServiceStartCertificationRoles));
addAuthorizedRoles(ComponentTypeEnum.SERVICE, Arrays.asList(rsrcServiceStartCertificationRoles));
// TODO to be later defined for product
+
+ //additional authorized roles for resource type
+ Role[] resourceRoles = { Role.DESIGNER};
+ addResouceAuthorizedRoles(ResourceTypeEnum.VFCMT, Arrays.asList(resourceRoles));
}
@Override
@@ -69,22 +81,38 @@ public class StartCertificationTransition extends LifeCycleTransition {
public Either<? extends Component, ResponseFormat> changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, boolean inTransaction) {
log.debug("start performing certification test for resource {}", component.getUniqueId());
-
- NodeTypeEnum nodeType = (componentType.equals(ComponentTypeEnum.SERVICE)) ? NodeTypeEnum.Service : NodeTypeEnum.Resource;
- Either<? extends Component, StorageOperationStatus> stateChangeResult = lifeCycleOperation.startComponentCertification(nodeType, component, modifier, owner, inTransaction);
- if (stateChangeResult.isRight()) {
- log.debug("start certification failed on graph");
- StorageOperationStatus response = stateChangeResult.right().value();
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
-
- if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
- actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ Either<? extends Component, ResponseFormat> result = null;
+ try{
+ Either<ToscaElement, StorageOperationStatus> stateChangeResult = lifeCycleOperation.startCertificationToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId());
+ if (stateChangeResult.isRight()) {
+ log.debug("start certification failed on graph");
+ StorageOperationStatus response = stateChangeResult.right().value();
+ ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
+
+ if (response.equals(StorageOperationStatus.ENTITY_ALREADY_EXISTS)) {
+ actionStatus = ActionStatus.COMPONENT_VERSION_ALREADY_EXIST;
+ }
+ ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
+ result = Either.right(responseFormat);
+ }
+ else {
+ result = Either.left(ModelConverter.convertFromToscaElement(stateChangeResult.left().value()));
+ }
+ } finally {
+ if (result == null || result.isRight()) {
+ BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState");
+ if (inTransaction == false) {
+ log.debug("operation failed. do rollback");
+ titanDao.rollback();
+ }
+ } else {
+ if (inTransaction == false) {
+ log.debug("operation success. do commit");
+ titanDao.commit();
+ }
}
- ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- return Either.right(responseFormat);
}
-
- return Either.left(stateChangeResult.left().value());
+ return result;
}
@Override
@@ -93,11 +121,11 @@ public class StartCertificationTransition extends LifeCycleTransition {
log.debug("validate before start certification test. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo);
if (userValidationResponse.isRight()) {
return userValidationResponse;
}
-
+
if (oldState.equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN) || oldState.equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)) {
ResponseFormat error = componentUtils.getResponseFormat(ActionStatus.COMPONENT_NOT_READY_FOR_CERTIFICATION, componentName, componentType.name().toLowerCase());
return Either.right(error);
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java
index fcb211bc3e..277cd173aa 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java
@@ -21,25 +21,24 @@
package org.openecomp.sdc.be.components.lifecycle;
import java.util.Arrays;
-import java.util.List;
-
import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
import org.openecomp.sdc.be.config.BeEcompErrorManager;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
-import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.operations.api.ILifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.be.user.Role;
-import org.openecomp.sdc.common.config.EcompErrorName;
import org.openecomp.sdc.exception.ResponseFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,8 +49,8 @@ public class UndoCheckoutTransition extends LifeCycleTransition {
private static Logger log = LoggerFactory.getLogger(CheckoutTransition.class.getName());
private ArtifactsBusinessLogic artifactsManager;
- public UndoCheckoutTransition(ComponentsUtils componentUtils, ILifecycleOperation lifecycleOperation) {
- super(componentUtils, lifecycleOperation);
+ public UndoCheckoutTransition(ComponentsUtils componentUtils, ToscaElementLifecycleOperation lifecycleOperation, ToscaOperationFacade toscaOperationFacade, TitanDao titanDao) {
+ super(componentUtils, lifecycleOperation, toscaOperationFacade, titanDao);
// authorized roles
Role[] resourceServiceCheckoutRoles = { Role.ADMIN, Role.DESIGNER };
@@ -86,7 +85,7 @@ public class UndoCheckoutTransition extends LifeCycleTransition {
log.debug("validate before undo checkout. resource name={}, oldState={}, owner userId={}", componentName, oldState, owner.getUserId());
// validate user
- Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier, componentType, lifecycleChangeInfo);
+ Either<Boolean, ResponseFormat> userValidationResponse = userRoleValidation(modifier,component, componentType, lifecycleChangeInfo);
if (userValidationResponse.isRight()) {
return userValidationResponse;
}
@@ -111,59 +110,29 @@ public class UndoCheckoutTransition extends LifeCycleTransition {
Either<? extends Component, ResponseFormat> result = null;
log.debug("start performing undo-checkout for resource {}", component.getUniqueId());
- Either<List<ArtifactDefinition>, StorageOperationStatus> artifactsRes = lifeCycleOperation.getComponentOperation(componentType.getNodeType()).getComponentArtifactsForDelete(component.getUniqueId(), componentType.getNodeType(), true);
- if (artifactsRes.isRight()) {
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(artifactsRes.right().value());
- ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- result = Either.right(responseFormat);
- return result;
- }
- // TODO - start transaction
try {
- NodeTypeEnum nodeType = componentType.getNodeType();
-
- // 1. perform undo checkout on graph (update status and delete
- // current version)
- Either<? extends Component, StorageOperationStatus> undoCheckoutResourceResult = lifeCycleOperation.undoCheckout(nodeType, component, modifier, owner, true);
+ Either<ToscaElement, StorageOperationStatus> undoCheckoutResourceResult = lifeCycleOperation.undoCheckout(component.getUniqueId());
if (undoCheckoutResourceResult.isRight()) {
log.debug("checkout failed on graph");
StorageOperationStatus response = undoCheckoutResourceResult.right().value();
ActionStatus actionStatus = componentUtils.convertFromStorageResponse(response);
ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- result = Either.right(responseFormat);
- return result;
+ result = Either.right(responseFormat);
}
-
- // 2. delete unrelated artifacts
- // use artifacts API to delete artifacts from swift / elasticsearch
-
- if (artifactsRes.left().value() != null) {
- List<ArtifactDefinition> artifacts = artifactsRes.left().value();
- StorageOperationStatus deleteAllResourceArtifacts = artifactsManager.deleteAllComponentArtifactsIfNotOnGraph(artifacts);
-
- if (!deleteAllResourceArtifacts.equals(StorageOperationStatus.OK)) {
- ActionStatus actionStatus = componentUtils.convertFromStorageResponse(deleteAllResourceArtifacts);
- ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType);
- result = Either.right(responseFormat);
- return result;
- }
+ else {
+ result = Either.left(ModelConverter.convertFromToscaElement(undoCheckoutResourceResult.left().value()));
}
-
- result = Either.left(undoCheckoutResourceResult.left().value());
} finally {
if (result == null || result.isRight()) {
- BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeDaoSystemError, "Change LifecycleState - Undo Checkout failed on graph");
BeEcompErrorManager.getInstance().logBeDaoSystemError("Change LifecycleState - Undo Checkout failed on graph");
-
log.debug("operation failed. do rollback");
- lifeCycleOperation.getResourceOperation().getTitanGenericDao().rollback();
+ titanDao.rollback();
} else {
log.debug("operation success. do commit");
- lifeCycleOperation.getResourceOperation().getTitanGenericDao().commit();
+ titanDao.commit();
}
}
-
return result;
}