diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java index 9f2c1ff033332c2ea1f6e6506e93ab5ab53626ae..e06f0537bcb68974d3a6332f23c8cee96c28d7fb 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java @@ -36,8 +36,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; /** - * Definition of an internal service through which entity relationships can be changed and deleted. - * All the methods of this service require authorization, + * Definition of an internal service through which entity relationships can be changed and deleted. All the methods of this service require + * authorization, * * @author anttil */ @@ -45,7 +45,7 @@ public interface IRelationshipService { @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_EXPERIMENT_TO_PROJECT") public void assignExperimentToProject(IAuthSession session, @AuthorizationGuard(guardClass = ExperimentPEPredicate.class) @@ -54,7 +54,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_PROJECT_TO_SPACE") public void assignProjectToSpace(IAuthSession session, @AuthorizationGuard(guardClass = ProjectPEPredicate.class) @@ -63,8 +63,8 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER, - RoleWithHierarchy.SPACE_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER, + RoleWithHierarchy.SPACE_USER }) @Capability("ASSIGN_SAMPLE_TO_EXPERIMENT") public void assignSampleToExperiment(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -73,7 +73,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("UNASSIGN_SAMPLE_FROM_EXPERIMENT") public void checkCanUnassignSampleFromExperiment(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -81,7 +81,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("UNASSIGN_SAMPLE_FROM_EXPERIMENT") public void unassignSampleFromExperiment(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -89,7 +89,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.INSTANCE_ETL_SERVER, RoleWithHierarchy.INSTANCE_ADMIN }) + { RoleWithHierarchy.INSTANCE_ETL_SERVER, RoleWithHierarchy.INSTANCE_ADMIN }) @Capability("UNSHARE_SAMPLE") public void unshareSample(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -98,7 +98,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_SAMPLE_TO_SPACE") public void assignSampleToSpace(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -107,7 +107,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.INSTANCE_ETL_SERVER, RoleWithHierarchy.INSTANCE_ADMIN }) + { RoleWithHierarchy.INSTANCE_ETL_SERVER, RoleWithHierarchy.INSTANCE_ADMIN }) @Capability("SHARE_SAMPLE") public void shareSample(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -115,7 +115,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_DATASET_TO_EXPERIMENT") public void assignDataSetToExperiment(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) @@ -124,7 +124,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_DATASET_TO_SAMPLE") public void assignDataSetToSample(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) @@ -133,8 +133,8 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER, - RoleWithHierarchy.SPACE_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER, + RoleWithHierarchy.SPACE_USER }) @Capability("ADD_PARENT_TO_SAMPLE") public void addParentToSample(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -143,7 +143,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("REMOVE_PARENT_FROM_SAMPLE") public void removeParentFromSample(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -152,7 +152,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ADD_CONTAINER_TO_SAMPLE") public void assignSampleToContainer(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -161,7 +161,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("REMOVE_CONTAINER_FROM_SAMPLE") public void removeSampleFromContainer(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) @@ -169,7 +169,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ADD_PARENT_TO_DATASET") public void addParentToDataSet(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) @@ -178,7 +178,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("REMOVE_PARENT_FROM_DATASET") public void removeParentFromDataSet(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) @@ -187,7 +187,7 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ADD_CONTAINER_TO_DATASET") public void assignDataSetToContainer(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) @@ -196,10 +196,11 @@ public interface IRelationshipService @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = - { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) + { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("REMOVE_CONTAINER_FROM_DATASET") public void removeDataSetFromContainer(IAuthSession session, @AuthorizationGuard(guardClass = DataPEPredicate.class) - DataPE data); + DataPE data, @AuthorizationGuard(guardClass = DataPEPredicate.class) + DataPE container); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java index d3e336d61c841ce99edba878860859e55d8462fc..75294a050ed0981fe80bcb00d02dac0ff084f595 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java @@ -269,10 +269,10 @@ public class RelationshipService implements IRelationshipService } @Override - public void removeDataSetFromContainer(IAuthSession session, DataPE data) + public void removeDataSetFromContainer(IAuthSession session, DataPE data, DataPE container) { releaseRelationship(session, BasicConstant.CONTAINER_COMPONENT_INTERNAL_RELATIONSHIP, data, - data.getContainer(), ERR_DATASET_CONTAINER_RELATIONSHIP_NOT_FOUND); + container, ERR_DATASET_CONTAINER_RELATIONSHIP_NOT_FOUND); } public void setDaoFactory(DAOFactory daoFactory) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java index a43a1161888121c2064c40d6a973ac9c977d483f..d38a334f0283fb937ce86c8701856b102c34c359 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractDataSetBusinessObject.java @@ -170,11 +170,6 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti contained.addAll(container.getContainedDataSets()); - for (DataPE dataPE : contained) - { - relationshipService.removeDataSetFromContainer(session, dataPE); - } - for (DataPE dataPE : newContainedDataSets) { relationshipService.assignDataSetToContainer(session, dataPE, container); @@ -224,22 +219,7 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti Set<DataPE> parentsToRemove = new HashSet<DataPE>(); Set<DataPE> parentsToAdd = new HashSet<DataPE>(); - // find parents to be added (exist in newParents but do not exist in old parents) - for (DataPE newParent : newParents) - { - if (oldParents.contains(newParent) == false) - { - parentsToAdd.add(newParent); - } - } - // find parents to be removed (exist in oldParents but do not exist in new parents) - for (DataPE oldParent : oldParents) - { - if (newParents.contains(oldParent) == false) - { - parentsToRemove.add(oldParent); - } - } + findToBeRemovedOrAdded(newParents, oldParents, parentsToRemove, parentsToAdd); // check cycles if (validate) @@ -260,6 +240,27 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti } } + protected void findToBeRemovedOrAdded(Collection<DataPE> newDataSets, Collection<DataPE> oldDataSets, Set<DataPE> toBeRemoved, + Set<DataPE> toBeAdded) + { + // find data sets to be added (exist in newDataSets but do not exist in oldDataSets) + for (DataPE newDataSet : newDataSets) + { + if (oldDataSets.contains(newDataSet) == false) + { + toBeAdded.add(newDataSet); + } + } + // find data sets to be removed (exist in oldDataSets but do not exist in newDataSets) + for (DataPE oldDataSet : oldDataSets) + { + if (newDataSets.contains(oldDataSet) == false) + { + toBeRemoved.add(oldDataSet); + } + } + } + private void checkParentDeletion(final DataPE parentPE, final String child) { if (parentPE.getDeletion() != null) @@ -353,10 +354,7 @@ public abstract class AbstractDataSetBusinessObject extends AbstractSampleIdenti protected void updateContainer(DataPE data, String containerCode) { - if (containerCode == null) - { - relationshipService.removeDataSetFromContainer(session, data); - } else + if (containerCode != null) { DataPE container = getDataDAO().tryToFindDataSetByCode(containerCode); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java index 17cda42981e4f77600d616a486a85060071d4849..7abdc6b4245ac343a7a752516f8e76086001c607 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java @@ -721,7 +721,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO { for (DataPE component : componentsToRemove) { - relationshipService.removeDataSetFromContainer(session, component); + relationshipService.removeDataSetFromContainer(session, component, data); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java index 0fc14baadcf2024b9c064b9dfa229891774ae7e9..0dde3d12cb10f26da46663a1e3d2b9ab6f757517 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java @@ -589,7 +589,7 @@ public class DataPE extends AbstractIdAndCodeHolder<DataPE> implements @Transient public List<DataPE> getContainedDataSets() { - SortedMap<Integer, DataPE> sortedContained = new TreeMap<Integer, DataPE>(); + SortedMap<Double, DataPE> sortedContained = new TreeMap<Double, DataPE>(); // Obtaining the contained relationships, they can come in any order if (childRelationships != null) @@ -605,7 +605,7 @@ public class DataPE extends AbstractIdAndCodeHolder<DataPE> implements throw new IllegalStateException("Container data set '" + getCode() + "' has component '" + component.getCode() + "' with unspecified order in container."); } - sortedContained.put(ordinal, component); + sortedContained.put(ordinal + 1.0 / Math.max(2, component.getId()), component); } } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java index 684db5cd76d0386ccb7e933b560ef62f4e00ab8e..3b7da5839fe22bfbbaff3bdb0b8bec73b9656c0a 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java @@ -21,8 +21,8 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; @@ -104,7 +104,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignExperimentToProject", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assigningExperimentToProjectIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -121,7 +121,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignProjectToSpace", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assignProjectToSpaceIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -138,7 +138,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignSampleToExperiment", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assignSampleToExperimentIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -154,7 +154,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToUnassignSampleFromExperiment", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void unassigningSampleFromExperimentIsNotAuthorizedFor(RoleWithHierarchy spaceRole, RoleWithHierarchy instanceRole) throws Exception { @@ -169,7 +169,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToUnshareSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void unsharingSampleIsNotAuthorizedFor(RoleWithHierarchy spaceRole, RoleWithHierarchy instanceRole) throws Exception { @@ -185,7 +185,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignSampleToSpace", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assigningSampleToSpaceIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -201,7 +201,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToShareSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void sharingSampleIsNotAuthorizedFor(RoleWithHierarchy spaceRole, RoleWithHierarchy instanceRole) throws Exception { @@ -217,7 +217,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignDataSetToExperiment", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assigningDataSetToExperimentIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -234,7 +234,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAssignDataSetToExperiment", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void assigningDataSetToSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -251,7 +251,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAddParentToSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void addingParentToSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -268,7 +268,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToRemoveParentFromSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void removingParentFromSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -285,7 +285,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAddContainerToSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void addingContainerToSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -301,7 +301,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToRemoveContainerFromSample", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void removingContainerFromSampleIsNotAuthorizedFor(RoleWithHierarchy spaceRole, RoleWithHierarchy instanceRole) throws Exception { @@ -317,7 +317,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAddParentToDataSet", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void addingParentToDataSetIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -334,7 +334,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToRemoveParentFromDataSet", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void removingParentFromDataSetIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -351,7 +351,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } @Test(dataProvider = "rolesNotAllowedToAddContainerToDataSet", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void addingContainerToDataSetIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception @@ -361,17 +361,17 @@ public class RelationshipServiceAuthorizationTest extends BaseTest @Test(dataProvider = "rolesAllowedToRemoveContainerFromDataSet", groups = "authorization") public void removingContainerFromDataSetIsAuthorizedFor(RoleWithHierarchy spaceRole, - RoleWithHierarchy instanceRole) throws Exception + RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception { - removeContainerFromDataSet(spaceRole, instanceRole); + removeContainerFromDataSet(spaceRole, destinationSpaceRole, instanceRole); } @Test(dataProvider = "rolesNotAllowedToRemoveContainerFromDataSet", expectedExceptions = - { AuthorizationFailureException.class }, groups = "authorization") + { AuthorizationFailureException.class }, groups = "authorization") public void removingContainerFromDataSetIsNotAuthorizedFor(RoleWithHierarchy spaceRole, - RoleWithHierarchy instanceRole) throws Exception + RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception { - removeContainerFromDataSet(spaceRole, instanceRole); + removeContainerFromDataSet(spaceRole, destinationSpaceRole, instanceRole); } void assignExperimentToProject(RoleWithHierarchy sourceSpaceRole, @@ -610,17 +610,18 @@ public class RelationshipServiceAuthorizationTest extends BaseTest } - void removeContainerFromDataSet(RoleWithHierarchy sourceSpaceRole, + void removeContainerFromDataSet(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) throws Exception { String session = create(aSession().withSpaceRole(sourceSpaceRole, sourceSpace) + .withSpaceRole(destinationSpaceRole, destinationSpace) .withInstanceRole(instanceRole) .withSpaceRole(RoleWithHierarchy.SPACE_ADMIN, unrelatedAdmin) .withSpaceRole(RoleWithHierarchy.SPACE_OBSERVER, unrelatedObserver)); relationshipService.removeDataSetFromContainer(sessionManager.getSession(session), - pe(this.sourceDataSet)); + pe(this.sourceDataSet), pe(destinationDataSet)); } GuardedDomain instance = new InstanceDomain(); @@ -879,7 +880,7 @@ public class RelationshipServiceAuthorizationTest extends BaseTest RoleWithHierarchy[][] rolesAllowedToRemoveContainerFromDataSet() { return RolePermutator.getAcceptedPermutations(spaceAdminOrSpaceEtlServerSingle, source, - instance); + destination, instance); } @DataProvider(name = "rolesNotAllowedToRemoveContainerFromDataSet") diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java index d55da9d1a24a7c9d498a4b4230410f5cd2f9aa28..2c32358aac23ec35835b34638407b96dbab3031c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java @@ -122,7 +122,7 @@ public class RelationshipServiceStub implements IRelationshipService } @Override - public void removeDataSetFromContainer(IAuthSession session, DataPE sample) + public void removeDataSetFromContainer(IAuthSession session, DataPE data, DataPE container) { } }