[SDC-29] catalog 1707 rebase commit.
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / lifecycle / LifeCycleTransition.java
index 49d94dc..0d0e06f 100644 (file)
@@ -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;
+       }
 
 }