From ccca07de338fea0975724a2b122e7480f26735c4 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Fri, 27 Jul 2012 13:29:36 +0000 Subject: [PATCH] BIS-102 SP-146 implement&test experiment updates from dss SVN: 26247 --- .../server/ETLEntityOperationChecker.java | 7 ++++++ .../openbis/generic/server/ETLService.java | 25 +++++++++++++++++++ .../server/IETLEntityOperationChecker.java | 9 +++++++ .../dto/AtomicEntityOperationDetails.java | 12 +++++---- .../server/ETLServiceDatabaseTest.java | 21 ++++++++++------ .../generic/server/ETLServiceTest.java | 6 ++++- .../dto/AtomicEntityOperationDetailsTest.java | 7 ++++-- .../systemtest/EntityOperationTest.java | 8 ++++-- 8 files changed, 77 insertions(+), 18 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLEntityOperationChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLEntityOperationChecker.java index e3566a1e0eb..1a9e31f55ae 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLEntityOperationChecker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLEntityOperationChecker.java @@ -25,6 +25,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewProject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSpace; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; @@ -101,4 +102,10 @@ public class ETLEntityOperationChecker implements IETLEntityOperationChecker { } + @Override + public void assertExperimentUpdateAllowed(IAuthSession session, + ExperimentUpdatesDTO experimentUpdates) + { + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java index 449aa349764..9d05783f58b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java @@ -149,6 +149,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EntityOperationsLogEntryPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria; @@ -1386,6 +1387,9 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements long experimentsCreated = createExperiments(sessionForEntityOperation, operationDetails, progressListener); + long experimentsUpdates = + updateExperiments(sessionForEntityOperation, operationDetails, progressListener); + long samplesCreated = createSamples(sessionForEntityOperation, operationDetails, progressListener); @@ -1824,6 +1828,27 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements return index; } + private void updateExperiment(Session session, ExperimentUpdatesDTO updates) + { + final IExperimentBO experimentBO = businessObjectFactory.createExperimentBO(session); + experimentBO.update(updates); + experimentBO.save(); + } + + private long updateExperiments(Session session, AtomicEntityOperationDetails operationDetails, + IProgressListener progress) + { + List<ExperimentUpdatesDTO> updates = operationDetails.getExperimentUpdates(); + + for (ExperimentUpdatesDTO update : updates) + { + entityOperationChecker.assertExperimentUpdateAllowed(session, update); + updateExperiment(session, update); + } + + return updates.size(); + } + private IDataBO registerDataSetInternal(final Session session, SampleIdentifier sampleIdentifier, NewExternalData externalData) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IETLEntityOperationChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IETLEntityOperationChecker.java index 9bdd326b34b..5a7dadfca06 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IETLEntityOperationChecker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/IETLEntityOperationChecker.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.Authoriz import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.Capability; import ch.systemsx.cisd.openbis.generic.shared.authorization.annotation.RolesAllowed; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.DataSetUpdatesCollectionPredicate; +import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.ExperimentUpdatesPredicate; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.NewExperimentPredicate; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.NewExternalDataPredicate; import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.NewProjectPredicate; @@ -35,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSpace; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; @@ -73,6 +75,13 @@ public interface IETLEntityOperationChecker @AuthorizationGuard(guardClass = NewExperimentPredicate.class) List<NewExperiment> newExperiments); + @RolesAllowed( + { RoleWithHierarchy.SPACE_USER, RoleWithHierarchy.SPACE_ETL_SERVER }) + @Capability("UPDATE_EXPERIMENTS_VIA_DSS") + public void assertExperimentUpdateAllowed(IAuthSession session, + @AuthorizationGuard(guardClass = ExperimentUpdatesPredicate.class) + ExperimentUpdatesDTO experimentUpdates); + @RolesAllowed(RoleWithHierarchy.INSTANCE_ETL_SERVER) public void assertInstanceSampleCreationAllowed(IAuthSession session, @AuthorizationGuard(guardClass = NewSamplePredicate.class) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java index 13fe13e235a..d973e68668a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/AtomicEntityOperationDetails.java @@ -74,7 +74,8 @@ public class AtomicEntityOperationDetails implements Serializable public AtomicEntityOperationDetails(TechId registrationId, String userIdOrNull, List<NewSpace> spaceRegistrations, List<NewProject> projectRegistrations, - List<NewExperiment> experimentRegistrations, List<SampleUpdatesDTO> sampleUpdates, + List<NewExperiment> experimentRegistrations, + List<ExperimentUpdatesDTO> experimentUpdates, List<SampleUpdatesDTO> sampleUpdates, List<NewSample> sampleRegistrations, Map<String, List<NewMaterial>> materialRegistrations, List<MaterialUpdateDTO> materialUpdates, @@ -85,7 +86,7 @@ public class AtomicEntityOperationDetails implements Serializable this.userIdOrNull = userIdOrNull; this.spaceRegistrations = new ArrayList<NewSpace>(spaceRegistrations); this.projectRegistrations = new ArrayList<NewProject>(projectRegistrations); - this.experimentUpdates = new ArrayList<ExperimentUpdatesDTO>(); + this.experimentUpdates = new ArrayList<ExperimentUpdatesDTO>(experimentUpdates); this.experimentRegistrations = new ArrayList<NewExperiment>(experimentRegistrations); this.sampleUpdates = new ArrayList<SampleUpdatesDTO>(sampleUpdates); this.sampleRegistrations = new ArrayList<NewSample>(sampleRegistrations); @@ -97,7 +98,8 @@ public class AtomicEntityOperationDetails implements Serializable public AtomicEntityOperationDetails(TechId registrationId, String userIdOrNull, List<NewSpace> spaceRegistrations, List<NewProject> projectRegistrations, - List<NewExperiment> experimentRegistrations, List<SampleUpdatesDTO> sampleUpdates, + List<NewExperiment> experimentRegistrations, + List<ExperimentUpdatesDTO> experimentUpdates, List<SampleUpdatesDTO> sampleUpdates, List<NewSample> sampleRegistrations, Map<String, List<NewMaterial>> materialRegistrations, List<MaterialUpdateDTO> materialUpdates, @@ -105,8 +107,8 @@ public class AtomicEntityOperationDetails implements Serializable List<DataSetBatchUpdatesDTO> dataSetUpdates, Integer batchSizeOrNull) { this(registrationId, userIdOrNull, spaceRegistrations, projectRegistrations, - experimentRegistrations, sampleUpdates, sampleRegistrations, materialRegistrations, - materialUpdates, dataSetRegistrations, dataSetUpdates); + experimentRegistrations, experimentUpdates, sampleUpdates, sampleRegistrations, + materialRegistrations, materialUpdates, dataSetRegistrations, dataSetUpdates); this.batchSizeOrNull = batchSizeOrNull; } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceDatabaseTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceDatabaseTest.java index 4e7cd2fde5e..f1ca29e81e3 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceDatabaseTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceDatabaseTest.java @@ -58,6 +58,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSpace; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO; @@ -310,7 +311,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<NewSpace> spaceRegistrations = Collections.emptyList(); List<NewProject> projectRegistrations = Collections.emptyList(); List<NewExperiment> experimentRegistrations = Collections.emptyList(); - + List<ExperimentUpdatesDTO> experimentUpdates = + Collections.<ExperimentUpdatesDTO> emptyList(); List<SampleUpdatesDTO> sampleUpdates = Collections.emptyList(); List<NewSample> sampleRegistrations = Collections.emptyList(); Map<String, List<NewMaterial>> materialRegistrations = Collections.emptyMap(); @@ -318,8 +320,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<? extends NewExternalData> dataSetRegistrations = Collections.emptyList(); AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(registrationid, null, spaceRegistrations, - projectRegistrations, experimentRegistrations, sampleUpdates, - sampleRegistrations, materialRegistrations, materialUpdates, + projectRegistrations, experimentRegistrations, experimentUpdates, + sampleUpdates, sampleRegistrations, materialRegistrations, materialUpdates, dataSetRegistrations, dataSetUpdates, batchSizeOrNull); service.performEntityOperations(sessionToken, details); } @@ -330,6 +332,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<NewSpace> spaceRegistrations = Collections.emptyList(); List<NewProject> projectRegistrations = Collections.emptyList(); List<NewExperiment> experimentRegistrations = Collections.emptyList(); + List<ExperimentUpdatesDTO> experimentUpdates = + Collections.<ExperimentUpdatesDTO> emptyList(); List<NewSample> sampleRegistrations = Collections.emptyList(); Map<String, List<NewMaterial>> materialRegistrations = Collections.emptyMap(); @@ -338,8 +342,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<DataSetBatchUpdatesDTO> dataSetUpdates = Collections.emptyList(); AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(registrationid, null, spaceRegistrations, - projectRegistrations, experimentRegistrations, sampleUpdates, - sampleRegistrations, materialRegistrations, materialUpdates, + projectRegistrations, experimentRegistrations, experimentUpdates, + sampleUpdates, sampleRegistrations, materialRegistrations, materialUpdates, dataSetRegistrations, dataSetUpdates, batchSizeOrNull); service.performEntityOperations(sessionToken, details); } @@ -402,7 +406,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<NewSpace> spaceRegistrations = Collections.emptyList(); List<NewProject> projectRegistrations = Collections.emptyList(); List<NewExperiment> experimentRegistrations = Collections.emptyList(); - + List<ExperimentUpdatesDTO> experimentUpdates = + Collections.<ExperimentUpdatesDTO> emptyList(); List<SampleUpdatesDTO> sampleUpdates = Collections.emptyList(); List<NewSample> sampleRegistrations = Arrays.asList(sampleToCreate); Map<String, List<NewMaterial>> materialRegistrations = Collections.emptyMap(); @@ -411,8 +416,8 @@ public class ETLServiceDatabaseTest extends AbstractDAOTest List<DataSetBatchUpdatesDTO> dataSetUpdates = Collections.emptyList(); AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(registrationid, null, spaceRegistrations, - projectRegistrations, experimentRegistrations, sampleUpdates, - sampleRegistrations, materialRegistrations, materialUpdates, + projectRegistrations, experimentRegistrations, experimentUpdates, + sampleUpdates, sampleRegistrations, materialRegistrations, materialUpdates, dataSetRegistrations, dataSetUpdates); service.performEntityOperations(sessionToken, details); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java index 44ae0acb74c..69e03816c38 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/ETLServiceTest.java @@ -84,6 +84,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatastoreServiceDescriptions; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; @@ -969,6 +970,8 @@ public class ETLServiceTest extends AbstractServerTestCase final Date version = new Date(); final Collection<NewAttachment> attachments = Collections.<NewAttachment> emptyList(); + List<ExperimentUpdatesDTO> experimentUpdates = new ArrayList<ExperimentUpdatesDTO>(); + final SampleUpdatesDTO sampleUpdate = new SampleUpdatesDTO(CommonTestUtils.TECH_ID, null, null, attachments, version, sampleIdentifier, null, null); @@ -1011,7 +1014,7 @@ public class ETLServiceTest extends AbstractServerTestCase AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(null, null, new ArrayList<NewSpace>(), new ArrayList<NewProject>(), new ArrayList<NewExperiment>(), - Collections.singletonList(sampleUpdate), + experimentUpdates, Collections.singletonList(sampleUpdate), Collections.singletonList(newSample), materialRegistrations, materialUpdates, Collections.singletonList(externalData), Collections.singletonList(dataSetUpdate)); @@ -1194,6 +1197,7 @@ public class ETLServiceTest extends AbstractServerTestCase AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(new TechId(1), null, new ArrayList<NewSpace>(), new ArrayList<NewProject>(), new ArrayList<NewExperiment>(), + new ArrayList<ExperimentUpdatesDTO>(), Collections.singletonList(sampleUpdate), Collections.singletonList(newSample), materialRegistrations, materialUpdates, Collections.singletonList(externalData), diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java index 8cd7c35e4b5..8f0c7de0243 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AtomicEntityOperationDetailsTest.java @@ -27,6 +27,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO; @@ -65,6 +66,8 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit experimentRegistrations.add(new NewExperiment("/SPACE/PROJECT/EXP-ID1", "EXP-TYPE")); experimentRegistrations.add(new NewExperiment("/SPACE/PROJECT/EXP-ID2", "EXP-TYPE")); + List<ExperimentUpdatesDTO> experimentUpdates = new ArrayList<ExperimentUpdatesDTO>(); + ArrayList<SampleUpdatesDTO> sampleUpdates = new ArrayList<SampleUpdatesDTO>(); ArrayList<NewSample> sampleRegistrations = new ArrayList<NewSample>(); @@ -89,8 +92,8 @@ public class AtomicEntityOperationDetailsTest extends AssertJUnit AtomicEntityOperationDetails details = new AtomicEntityOperationDetails(null, null, spaceRegistrations, - projectRegistrations, experimentRegistrations, sampleUpdates, - sampleRegistrations, materialRegistrations, materialUpdates, + projectRegistrations, experimentRegistrations, experimentUpdates, + sampleUpdates, sampleRegistrations, materialRegistrations, materialUpdates, dataSetRegistrations, dataSetUpdates); assertEquals( diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java index 1e566a706fb..bdfefadab95 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java @@ -55,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialUpdateDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty; @@ -99,6 +100,9 @@ public class EntityOperationTest extends SystemTestCase private final List<NewExperiment> experiments = new ArrayList<NewExperiment>(); + private final List<ExperimentUpdatesDTO> experimentUpdates = + new ArrayList<ExperimentUpdatesDTO>(); + private final List<NewSample> samples = new ArrayList<NewSample>(); private final List<SampleUpdatesDTO> sampleUpdates = new ArrayList<SampleUpdatesDTO>(); @@ -272,8 +276,8 @@ public class EntityOperationTest extends SystemTestCase AtomicEntityOperationDetails create() { return new AtomicEntityOperationDetails(registrationID, userID, spaces, projects, - experiments, sampleUpdates, samples, materials, materialUpdates, dataSets, - dataSetUpdates); + experiments, experimentUpdates, sampleUpdates, samples, materials, + materialUpdates, dataSets, dataSetUpdates); } } -- GitLab