Skip to content
Snippets Groups Projects
Commit d3fde791 authored by anttil's avatar anttil
Browse files

SSDM-4910: Set dataset modification time when a copy is added / removed

SVN: 38210
parent ff901e61
No related branches found
No related tags found
No related merge requests found
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset; package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -19,6 +20,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE; ...@@ -19,6 +20,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.LocationType; import ch.systemsx.cisd.openbis.generic.shared.dto.LocationType;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.util.RelationshipUtils;
@Component @Component
public class AddContentCopiesToLinkedDataExecutor implements IAddContentCopiesToLinkedDataExecutor public class AddContentCopiesToLinkedDataExecutor implements IAddContentCopiesToLinkedDataExecutor
...@@ -86,6 +89,10 @@ public class AddContentCopiesToLinkedDataExecutor implements IAddContentCopiesTo ...@@ -86,6 +89,10 @@ public class AddContentCopiesToLinkedDataExecutor implements IAddContentCopiesTo
entity.setContentCopies(new HashSet<ContentCopyPE>()); entity.setContentCopies(new HashSet<ContentCopyPE>());
} }
entity.getContentCopies().addAll(contentCopies); entity.getContentCopies().addAll(contentCopies);
Date timeStamp = daoFactory.getTransactionTimestamp();
PersonPE person = context.getSession().tryGetPerson();
RelationshipUtils.updateModificationDateAndModifier(entity, person, timeStamp);
} }
private LocationType getLocationType(ContentCopyCreation ccc, ExternalDataManagementSystemPE edms) private LocationType getLocationType(ContentCopyCreation ccc, ExternalDataManagementSystemPE edms)
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset; package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -31,11 +32,14 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; ...@@ -31,11 +32,14 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractUpdateEntityToOneRelationExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractUpdateEntityToOneRelationExecutor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.externaldms.IMapExternalDmsByIdExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.externaldms.IMapExternalDmsByIdExecutor;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.LocationType; import ch.systemsx.cisd.openbis.generic.shared.dto.LocationType;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.util.RelationshipUtils;
/** /**
* @author pkupczyk * @author pkupczyk
...@@ -46,6 +50,9 @@ public class UpdateDataSetExternalDmsExecutor extends ...@@ -46,6 +50,9 @@ public class UpdateDataSetExternalDmsExecutor extends
IUpdateDataSetExternalDmsExecutor IUpdateDataSetExternalDmsExecutor
{ {
@Autowired
private IDAOFactory daoFactory;
@Autowired @Autowired
private IMapExternalDmsByIdExecutor mapExternalDmsByIdExecutor; private IMapExternalDmsByIdExecutor mapExternalDmsByIdExecutor;
...@@ -129,6 +136,10 @@ public class UpdateDataSetExternalDmsExecutor extends ...@@ -129,6 +136,10 @@ public class UpdateDataSetExternalDmsExecutor extends
} }
next.setExternalDataManagementSystem(related); next.setExternalDataManagementSystem(related);
Date timeStamp = daoFactory.getTransactionTimestamp();
PersonPE person = context.getSession().tryGetPerson();
RelationshipUtils.updateModificationDateAndModifier(entity, person, timeStamp);
} else } else
{ {
throw new UserFailureException("Cannot set external data management system to content copy of type " + next.getLocationType()); throw new UserFailureException("Cannot set external data management system to content copy of type " + next.getLocationType());
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset; package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -36,6 +37,8 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; ...@@ -36,6 +37,8 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ContentCopyPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.util.RelationshipUtils;
/** /**
* @author pkupczyk * @author pkupczyk
...@@ -124,6 +127,10 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData ...@@ -124,6 +127,10 @@ public class UpdateDataSetLinkedDataExecutor implements IUpdateDataSetLinkedData
addContentCopiesToLinkedDataExecutor.add(context, entity, update.getContentCopies().getAdded()); addContentCopiesToLinkedDataExecutor.add(context, entity, update.getContentCopies().getAdded());
} }
Date timeStamp = daoFactory.getTransactionTimestamp();
PersonPE person = context.getSession().tryGetPerson();
RelationshipUtils.updateModificationDateAndModifier(entity, person, timeStamp);
} }
private void assertAllRemovalsExists(LinkDataPE entity, LinkedDataUpdate update) private void assertAllRemovalsExists(LinkDataPE entity, LinkedDataUpdate update)
......
...@@ -3,7 +3,9 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3; ...@@ -3,7 +3,9 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3;
import static org.hamcrest.CoreMatchers.both; import static org.hamcrest.CoreMatchers.both;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.lessThan;
import java.util.Date;
import java.util.List; import java.util.List;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
...@@ -127,7 +129,7 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest ...@@ -127,7 +129,7 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest
ContentCopyPermId ccid = new ContentCopyPermId(uuid()); ContentCopyPermId ccid = new ContentCopyPermId(uuid());
update(dataset(id).without(ccid)); update(dataset(id).without(ccid));
} }
@Test @Test
void removeAllCopies() void removeAllCopies()
{ {
...@@ -264,4 +266,66 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest ...@@ -264,4 +266,66 @@ public class UpdateLinkDataSetTest extends AbstractLinkDataSetTest
update(dataset(id).withExternalDms(dms)); update(dataset(id).withExternalDms(dms));
} }
@Test
void modificationTimeIsUpdatedWhenCopyIsAdded()
{
ExternalDmsPermId dms = create(externalDms());
DataSetPermId id = create(linkDataSet().with(copyAt(dms)));
Date mod1 = get(id).getModificationDate();
update(dataset(id).withNewCopies(copyAt(dms)));
Date mod2 = get(id).getModificationDate();
assertThat(mod1, lessThan(mod2));
}
@Test
void modificationTimeIsUpdatedWhenCopyIsRemoved()
{
String removed = uuid();
String stays = uuid();
ExternalDmsPermId dms = create(externalDms());
DataSetPermId id = create(linkDataSet().with(copyAt(dms).withExternalCode(removed), copyAt(dms).withExternalCode(stays)));
DataSet dataSet = get(id);
Date mod1 = dataSet.getModificationDate();
List<ContentCopy> contentCopies = dataSet.getLinkedData().getContentCopies();
ContentCopyPermId removedId =
contentCopies.get(0).getExternalCode().equals(removed) ? contentCopies.get(0).getId() : contentCopies.get(1).getId();
update(dataset(id).without(removedId));
Date mod2 = get(id).getModificationDate();
assertThat(mod1, lessThan(mod2));
}
@Test
void modificationTimeIsUpdatedWhenSettingLegacyExternalCode()
{
ExternalDmsPermId dms = create(externalDms().withType(ExternalDmsAddressType.URL));
DataSetPermId id = create(linkDataSet().with(copyAt(dms)));
Date mod1 = get(id).getModificationDate();
String code = uuid();
update(dataset(id).withExternalCode(code));
Date mod2 = get(id).getModificationDate();
assertThat(mod1, lessThan(mod2));
}
@Test
void modificationTimeIsUpdatedWhenSettingLegacyExternalDms()
{
ExternalDmsPermId dms1 = create(externalDms().withType(ExternalDmsAddressType.URL));
ExternalDmsPermId dms2 = create(externalDms().withType(ExternalDmsAddressType.OPENBIS));
DataSetPermId id = create(linkDataSet().with(copyAt(dms1)));
Date mod1 = get(id).getModificationDate();
update(dataset(id).withExternalDms(dms2));
Date mod2 = get(id).getModificationDate();
assertThat(mod1, lessThan(mod2));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment