diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java index abf213c0bac031bcd2b455e56252c38f59bb397a..1f307682b7874b807858c85042488cc605287643 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java @@ -98,7 +98,7 @@ public class UpdateSampleProjectExecutor extends AbstractUpdateEntityToOneRelati relationshipService.unassignSampleFromProject(context.getSession(), entity); } else { - relationshipService.assignSampleToProject(context.getSession(), entity, related); + relationshipService.reassignSampleToProject(context.getSession(), entity, related); } } diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java index 36dcaf5c7ad941c14a70c0cc35639d38a6bb2de7..f4cb21cbdeeaa58bf1744f5760c97508f78ea575 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java @@ -54,12 +54,19 @@ public interface IRelationshipService @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); @Transactional(propagation = Propagation.MANDATORY) - @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER }) + @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_USER }) @Capability("ASSIGN_SAMPLE_TO_PROJECT") public void assignSampleToProject(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample, @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); + @Transactional(propagation = Propagation.MANDATORY) + @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER }) + @Capability("REASSIGN_SAMPLE_TO_PROJECT") + public void reassignSampleToProject(IAuthSession session, + @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample, + @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); + @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_PROJECT_TO_SPACE") diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java index 22b2a62b7c6169af77943bcd09a4a0c7bfe6df70..84a5effaa9ed175d209fa8e478a4df36d643d90d 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java @@ -97,6 +97,11 @@ public class RelationshipService implements IRelationshipService, ApplicationCon @Override public void assignSampleToProject(IAuthSession session, SamplePE sample, ProjectPE project) + { + reassignSampleToProject(session, sample, project); + } + + @Override public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project) { if (SamplePE.projectSamplesEnabled) { diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java index 55bd2616071c259179279b63c139588f00a7a6d5..78eb2d9ede901e00d4f7d4f9034ad724db6bda78 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java @@ -879,7 +879,7 @@ abstract class AbstractBusinessObject implements IDAOFactory { if (project != null) { - relationshipService.assignSampleToProject(session, sample, project); + relationshipService.reassignSampleToProject(session, sample, project); } else { relationshipService.unassignSampleFromProject(session, sample); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java index bb37145279f8760dd1d09d0d37efe549ba45d447..de4705babc4ca047cc0495429adf490d4b21dd4c 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java @@ -1906,10 +1906,10 @@ public class AbstractTest extends SystemTestCase final TestWithUserRoleParams params = new TestWithUserRoleParams(); params.adminSessionToken = adminSessionToken; params.userSessionToken = userSessionToken; - params.roleSpace1Id = space1Id; - params.roleSpace2Id = space2Id; - params.roleSpace1Project1Id = space1Project1Id; - params.roleSpace1Project2Id = space1Project2Id; + params.space1Id = space1Id; + params.space2Id = space2Id; + params.space1Project1Id = space1Project1Id; + params.space1Project2Id = space1Project2Id; action.execute(params); } @@ -1920,13 +1920,13 @@ public class AbstractTest extends SystemTestCase public String userSessionToken; - public ISpaceId roleSpace1Id; + public ISpaceId space1Id; - public ISpaceId roleSpace2Id; + public ISpaceId space2Id; - public IProjectId roleSpace1Project1Id; + public IProjectId space1Project1Id; - public IProjectId roleSpace1Project2Id; + public IProjectId space1Project2Id; } protected static interface TestWithUserRole diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java index dc543638e073bfaaa3aecc929f7eb2500a139a0e..d6b80bba7ef5041117d58e120f11b60f44267073 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java @@ -2050,7 +2050,7 @@ public class CreateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_SPACE_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); if (List.of(RoleWithHierarchy.RoleLevel.INSTANCE, RoleWithHierarchy.RoleLevel.SPACE).contains(role.getRoleLevel()) && List.of( RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) @@ -2073,8 +2073,8 @@ public class CreateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_PROJECT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setProjectId(params.roleSpace1Project1Id); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setProjectId(params.space1Project1Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) .contains(role.getRoleCode())) @@ -2095,14 +2095,14 @@ public class CreateSampleTest extends AbstractSampleTest final ExperimentCreation experimentCreation = new ExperimentCreation(); experimentCreation.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation.setProjectId(params.roleSpace1Project1Id); + experimentCreation.setProjectId(params.space1Project1Id); experimentCreation.setProperty("DESCRIPTION", "test description"); final ExperimentPermId experimentId = v3api.createExperiments(params.adminSessionToken, List.of(experimentCreation)).get(0); final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_EXPERIMENT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); sampleCreation.setExperimentId(experimentId); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java index 4a859468c584f4458d008920ced33484881e7ab1..a85a7eb8edc89a5b5721bee837d3204bac9be0b6 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java @@ -2636,12 +2636,12 @@ public class UpdateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_SPACE_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setSpaceId(params.roleSpace2Id); + sampleUpdate.setSpaceId(params.space2Id); if (List.of(RoleWithHierarchy.RoleLevel.INSTANCE, RoleWithHierarchy.RoleLevel.SPACE).contains(role.getRoleLevel()) && List.of( RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) @@ -2662,14 +2662,14 @@ public class UpdateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_PROJECT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setProjectId(params.roleSpace1Project1Id); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setProjectId(params.space1Project1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setProjectId(params.roleSpace1Project2Id); + sampleUpdate.setProjectId(params.space1Project2Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) { @@ -2689,31 +2689,31 @@ public class UpdateSampleTest extends AbstractSampleTest final ExperimentCreation experimentCreation = new ExperimentCreation(); experimentCreation.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation.setProjectId(params.roleSpace1Project1Id); + experimentCreation.setProjectId(params.space1Project1Id); experimentCreation.setProperty("DESCRIPTION", "test description"); final ExperimentCreation experimentCreation2 = new ExperimentCreation(); experimentCreation2.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation2.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation2.setProjectId(params.roleSpace1Project2Id); + experimentCreation2.setProjectId(params.space1Project2Id); experimentCreation2.setProperty("DESCRIPTION", "test description"); final List<ExperimentPermId> experimentIds = v3api.createExperiments(params.adminSessionToken, List.of(experimentCreation, experimentCreation2)); - ExperimentPermId experimentId = experimentIds.get(0); - ExperimentPermId experimentId2 = experimentIds.get(1); + ExperimentPermId experiment1Id = experimentIds.get(0); + ExperimentPermId experiment2Id = experimentIds.get(1); final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_EXPERIMENT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setExperimentId(experimentId); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setExperimentId(experiment1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setExperimentId(experimentId2); + sampleUpdate.setExperimentId(experiment2Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) { diff --git a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java index 5404f0ebd5d0468ba5708ed49cacde5fa34f9008..75cf5ae068ddaee04934c7feda4aa67844a64672 100644 --- a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java +++ b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java @@ -140,6 +140,12 @@ public class RelationshipServiceStub implements IRelationshipService } + @Override + public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project) + { + + } + @Override public void unassignSampleFromProject(IAuthSession session, SamplePE sample) {