diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java index 7882235d9ceaafafe4b1fa2a67101e9d42c8f4a9..714be707637acd1a5cabb177a1e184454a8b6c30 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ProjectBO.java @@ -27,6 +27,7 @@ import org.springframework.orm.ObjectRetrievalFailureException; import ch.systemsx.cisd.common.collection.CollectionUtils; import ch.systemsx.cisd.common.exceptions.UserFailureException; 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.dataaccess.IAttachmentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; @@ -199,9 +200,11 @@ public final class ProjectBO extends AbstractBusinessObject implements IProjectB public final void addAttachment(final AttachmentPE attachment) { assert project != null : "no project has been loaded"; - attachment.setRegistrator(findPerson()); + PersonPE user = findPerson(); + attachment.setRegistrator(user); escapeFileName(attachment); attachments.add(attachment); + RelationshipUtils.updateModificationDateAndModifier(project, user); } private void escapeFileName(final AttachmentPE attachment) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ProjectOptimisticLockingTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ProjectOptimisticLockingTest.java index d1d75fc9f9d5c3ada1db20b0b06902e4ff5009ed..c27e8519adbba84777f1a0f2f5ddb26ebfaf9da7 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ProjectOptimisticLockingTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/optimistic_locking/ProjectOptimisticLockingTest.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.systemtest.optimistic_locking; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.fail; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -27,6 +28,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.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.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; @@ -35,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ProjectUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentTypeBuilder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.PropertyBuilder; +import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.builders.AtomicEntityOperationDetailsBuilder; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; @@ -89,7 +92,6 @@ public class ProjectOptimisticLockingTest extends OptimisticLockingTestCase assertEquals("system", p.getRegistrator().getUserId()); assertEquals("test", p.getModifier().getUserId()); timeIntervalChecker.assertDateInInterval(p.getModificationDate()); - } @Test @@ -156,4 +158,33 @@ public class ProjectOptimisticLockingTest extends OptimisticLockingTestCase assertEquals("[OLT-E1, OLT-E2]", toolBox.extractCodes(experiments).toString()); toolBox.checkModifierAndModificationDateOfProject1(timeIntervalChecker, ToolBox.USER_ID); } + + @Test + public void testAddAttachment() + { + ProjectIdentifier projectIdentifier = + toolBox.createProjectIdentifier(toolBox.project1.getIdentifier()); + Project p = commonServer.getProjectInfo(systemSessionToken, projectIdentifier); + ProjectUpdatesDTO updates = new ProjectUpdatesDTO(); + updates.setVersion(p.getVersion()); + updates.setTechId(new TechId(p)); + updates.setDescription(p.getDescription()); + NewAttachment attachment = new NewAttachment(); + attachment.setFilePath("greetings.txt"); + attachment.setTitle("greetings"); + attachment.setContent("hello world".getBytes()); + updates.setAttachments(Arrays.asList(attachment)); + String sessionToken = logIntoCommonClientService().getSessionID(); + TimeIntervalChecker timeIntervalChecker = new TimeIntervalChecker(); + + commonServer.updateProject(sessionToken, updates); + + p = commonServer.getProjectInfo(systemSessionToken, projectIdentifier); + assertEquals("system", p.getRegistrator().getUserId()); + toolBox.checkModifierAndModificationDateOfBean(timeIntervalChecker, p, "test"); + List<Attachment> attachments = + commonServer.listProjectAttachments(systemSessionToken, new TechId(p)); + assertEquals("greetings.txt", attachments.get(0).getFileName()); + assertEquals(1, attachments.size()); + } }