From b148397d6df66d3006304bbe2c01ad4a2442c3c8 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 14 Nov 2012 08:28:53 +0000 Subject: [PATCH] SP-367, BIS-242: Setting modification date and modifier when attachment added to sample or experiment. SVN: 27605 --- .../server/business/bo/ExperimentBO.java | 4 +- .../generic/server/business/bo/SampleBO.java | 5 +- .../dto/builders/SampleUpdatesDTOBuilder.java | 15 ++++++ .../ExperimentOptimisticLockingTest.java | 31 +++++++++++++ .../SampleOptimisticLockingTest.java | 46 +++++++++++++++++++ .../optimistic_locking/ToolBox.java | 7 ++- 6 files changed, 105 insertions(+), 3 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java index cd657659ec0..a3899fbe09a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java @@ -353,9 +353,11 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper public final void addAttachment(final AttachmentPE experimentAttachment) { assert experiment != null : "no experiment has been loaded"; - experimentAttachment.setRegistrator(findPerson()); + PersonPE user = findPerson(); + experimentAttachment.setRegistrator(user); escapeFileName(experimentAttachment); attachments.add(experimentAttachment); + RelationshipUtils.updateModificationDateAndModifier(experiment, user); } private void escapeFileName(final AttachmentPE attachment) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java index be444b4859f..2c644f3db9c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java @@ -27,6 +27,7 @@ import org.springframework.dao.DataIntegrityViolationException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.IEntityOperationChecker; import ch.systemsx.cisd.openbis.generic.server.business.IRelationshipService; +import ch.systemsx.cisd.openbis.generic.server.business.bo.util.RelationshipUtils; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAttachmentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; @@ -353,9 +354,11 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam { assert sample != null : "no sample has been loaded"; assertInstanceSampleUpdateAllowed(Collections.singletonList(sample)); - sampleAttachment.setRegistrator(findPerson()); + PersonPE user = findPerson(); + sampleAttachment.setRegistrator(user); escapeFileName(sampleAttachment); attachments.add(sampleAttachment); + RelationshipUtils.updateModificationDateAndModifier(sample, user); } private void escapeFileName(final AttachmentPE attachment) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/dto/builders/SampleUpdatesDTOBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/dto/builders/SampleUpdatesDTOBuilder.java index 1ad9cf6467e..74a8bea6344 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/dto/builders/SampleUpdatesDTOBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/dto/builders/SampleUpdatesDTOBuilder.java @@ -52,6 +52,8 @@ public class SampleUpdatesDTOBuilder private List<String> parentCodes = new ArrayList<String>(); + private List<String> metaprojects = new ArrayList<String>(); + public SampleUpdatesDTOBuilder(Sample sample) { this(sample.getId()); @@ -94,12 +96,25 @@ public class SampleUpdatesDTOBuilder return this; } + public SampleUpdatesDTOBuilder metaProject(String metaProjectCode) + { + metaprojects.add(metaProjectCode); + return this; + } + + public SampleUpdatesDTOBuilder attachment(NewAttachment attachment) + { + attachments.add(attachment); + return this; + } + public SampleUpdatesDTO get() { SampleUpdatesDTO sampleUpdate = new SampleUpdatesDTO(sampleId, properties, experimentIdentifierOrNull, attachments, version, sampleIdentifier, containerIdentifierOrNull, parentCodes.toArray(new String[0])); + sampleUpdate.setMetaprojectsOrNull(metaprojects.toArray(new String[0])); return sampleUpdate; } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java index a781f37df5d..99498202aa5 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ExperimentOptimisticLockingTest.java @@ -20,6 +20,7 @@ import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.fail; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.testng.annotations.Test; @@ -27,10 +28,12 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.util.TimeIntervalChecker; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Attachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails; @@ -198,6 +201,34 @@ public class ExperimentOptimisticLockingTest extends OptimisticLockingTestCase toolBox.renderMetaProjects(loadedExperiment.getMetaprojects())); } + @Test + public void testAddAttachment() + { + Experiment experiment = toolBox.createAndLoadExperiment(1); + ExperimentUpdatesDTO updates = new ExperimentUpdatesDTO(); + updates.setVersion(experiment.getVersion()); + updates.setExperimentId(new TechId(experiment)); + updates.setProjectIdentifier(toolBox.createProjectIdentifier(experiment.getProject() + .getIdentifier())); + NewAttachment attachment = new NewAttachment(); + attachment.setFilePath("greetings.txt"); + attachment.setTitle("greetings"); + attachment.setContent("hello world".getBytes()); + updates.setAttachments(Arrays.asList(attachment)); + updates.setProperties(experiment.getProperties()); + String sessionToken = logIntoCommonClientService().getSessionID(); + TimeIntervalChecker timeIntervalChecker = new TimeIntervalChecker(); + + genericServer.updateExperiment(sessionToken, updates); + + Experiment loadedExperiment = toolBox.loadExperiment(experiment); + toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, loadedExperiment, + "test"); + List<Attachment> attachments = loadedExperiment.getAttachments(); + assertEquals("greetings.txt", attachments.get(0).getFileName()); + assertEquals(1, attachments.size()); + } + @Test public void testMoveSampleBetweenExperiments() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/SampleOptimisticLockingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/SampleOptimisticLockingTest.java index c73fe6e44e0..aa655e11e75 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/SampleOptimisticLockingTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/SampleOptimisticLockingTest.java @@ -19,12 +19,16 @@ package ch.systemsx.cisd.openbis.systemtest.optimistic_locking; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.fail; +import java.util.List; + import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.util.TimeIntervalChecker; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Attachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.PropertyBuilder; @@ -255,4 +259,46 @@ public class SampleOptimisticLockingTest extends OptimisticLockingTestCase toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, loadedSample, "test"); toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, loadedContainer, "test"); } + + @Test + public void testAddMetaProject() + { + Sample sample = toolBox.createAndLoadSample(1, null); + SampleUpdatesDTOBuilder builder = new SampleUpdatesDTOBuilder(sample); + builder.metaProject("TEST_METAPROJECTS"); + String sessionToken = logIntoCommonClientService().getSessionID(); + assertEquals("", toolBox.renderMetaProjects(toolBox.loadSample(sessionToken, sample) + .getMetaprojects())); + + genericServer.updateSample(sessionToken, builder.get()); + + Sample loadedSample = toolBox.loadSample(sessionToken, sample); + assertEquals(sample.getModifier(), loadedSample.getModifier()); + assertEquals(sample.getModificationDate(), loadedSample.getModificationDate()); + assertEquals("/test/TEST_METAPROJECTS", + toolBox.renderMetaProjects(loadedSample.getMetaprojects())); + assertEquals("", toolBox.renderMetaProjects(toolBox.loadSample(sample).getMetaprojects())); + } + + @Test + public void testAddAttachment() + { + Sample sample = toolBox.createAndLoadSample(1, null); + SampleUpdatesDTOBuilder builder = new SampleUpdatesDTOBuilder(sample); + NewAttachment attachment = new NewAttachment(); + attachment.setFilePath("greetings.txt"); + attachment.setTitle("greetings"); + attachment.setContent("hello world".getBytes()); + builder.attachment(attachment); + String sessionToken = logIntoCommonClientService().getSessionID(); + TimeIntervalChecker timeIntervalChecker = new TimeIntervalChecker(); + + genericServer.updateSample(sessionToken, builder.get()); + + Sample loadedSample = toolBox.loadSample(sample); + toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, loadedSample, "test"); + List<Attachment> attachments = loadedSample.getAttachments(); + assertEquals("greetings.txt", attachments.get(0).getFileName()); + assertEquals(1, attachments.size()); + } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java index e1b547579ac..7b33e0e8a09 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ToolBox.java @@ -351,7 +351,12 @@ public class ToolBox public Sample loadSample(IIdentifierHolder sample) { - return etlService.tryGetSampleWithExperiment(systemSessionToken, + return loadSample(systemSessionToken, sample); + } + + public Sample loadSample(String sessionToken, IIdentifierHolder sample) + { + return etlService.tryGetSampleWithExperiment(sessionToken, SampleIdentifierFactory.parse(sample.getIdentifier())); } -- GitLab