From 67be489e26ba59cfb79d33f458eb8398d60ba2df Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Wed, 21 Mar 2012 16:32:00 +0000 Subject: [PATCH] LMS-2843: add update of experiment for contained dataset. Fix the test SVN: 24771 --- .../generic/server/AbstractServer.java | 29 ++++++++++++++---- .../generic/server/business/bo/DataBO.java | 24 ++++++++++++++- .../server/business/bo/TrashBOTest.java | 30 +++++++------------ 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java index e9b2bad4bd5..cc5154ca87d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.server; import java.io.StringWriter; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -227,15 +228,19 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp // first load by codes to get the ids dataSetTable.loadByDataSetCodes(dataSetCodes, false, false); - // get recursively all datasets that are contained and contained - List<TechId> ids = - daoFactory.getDataDAO().listContainedDataSetsRecursively( - TechId.createList(dataSetTable.getDataSets())); + List<DataPE> dataSets = dataSetTable.getDataSets(); - dataSetTable.loadByIds(ids); + if (atLeastOneOfDataSetsIsContainer(dataSets)) + { + // get recursively all datasets that are contained and contained + List<TechId> ids = + daoFactory.getDataDAO().listContainedDataSetsRecursively( + TechId.createList(dataSetTable.getDataSets())); - List<DataPE> dataSets = dataSetTable.getDataSets(); + dataSetTable.loadByIds(ids); + dataSets = dataSetTable.getDataSets(); + } Map<DataSetTypePE, List<DataPE>> groupedDataSets = new LinkedHashMap<DataSetTypePE, List<DataPE>>(); for (DataPE dataSet : dataSets) @@ -257,6 +262,18 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp } } + private boolean atLeastOneOfDataSetsIsContainer(Collection<DataPE> dataSets) + { + for (DataPE dataSet : dataSets) + { + if (dataSet.isContainer()) + { + return true; + } + } + return false; + } + private final RoleAssignmentPE createRoleAssigment(final PersonPE registrator, final PersonPE person, final RoleCode roleCode) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java index 480113c622a..014314cfe81 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashSet; @@ -794,7 +795,28 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO { assert experimentIdentifier != null; ExperimentPE experiment = getExperimentByIdentifier(experimentIdentifier); - data.setExperiment(experiment); + if (data.getExperiment() == null || data.getExperiment().getId() != experiment.getId()) + { + if (data.isContainer()) + { + updateExperimentForAllContainedDataSets(experiment); + } else + { + data.setExperiment(experiment); + } + } + } + + private void updateExperimentForAllContainedDataSets(ExperimentPE experiment) + { + List<TechId> listIds = Collections.singletonList(TechId.create(data)); + listIds = getDataDAO().listContainedDataSetsRecursively(listIds); + + for (TechId techId : listIds) + { + DataPE dataObject = getDataDAO().getByTechId(techId); + dataObject.setExperiment(experiment); + } } private ExperimentPE getExperimentByIdentifier(final ExperimentIdentifier identifier) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java index 382333d281e..a8492ea89ee 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java @@ -17,7 +17,6 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -194,8 +193,8 @@ public final class TrashBOTest extends AbstractBOTest one(dataDAO).listDataSetIdsByExperimentIds(experimentIds); will(returnValue(dataSetIds)); - one(dataDAO).listContainedDataSets(with(dsIdsMatcher)); - will(returnValue(Collections.emptyList())); + one(dataDAO).listContainedDataSetsRecursively(with(dsIdsMatcher)); + will(returnValue(dataSetIds)); oneOf(deletionDAO).trash(with(same(EntityKind.DATA_SET)), with(dsIdsMatcher), with(same(deletion))); @@ -239,8 +238,8 @@ public final class TrashBOTest extends AbstractBOTest one(dataDAO).listDataSetIdsByExperimentIds(experimentIds); will(returnValue(dataSetIds)); - one(dataDAO).listContainedDataSets(with(dataSetIdsMatcher)); - will(returnValue(Collections.emptyList())); + one(dataDAO).listContainedDataSetsRecursively(with(dataSetIdsMatcher)); + will(returnValue(dataSetIds)); one(deletionDAO).trash(with(same(EntityKind.DATA_SET)), with(dataSetIdsMatcher), with(same(deletion))); @@ -316,12 +315,8 @@ public final class TrashBOTest extends AbstractBOTest RecordingMatcher<List<TechId>> dataSetIdsMatcher = new RecordingMatcher<List<TechId>>(); - final List<TechId> containedDataSetIds = TechId.createList(71, 73); - one(dataDAO).listContainedDataSets(with(dataSetIdsMatcher)); - will(returnValue(containedDataSetIds)); - - one(dataDAO).listContainedDataSets(with(dataSetIdsMatcher)); - will(returnValue(Collections.emptyList())); + one(dataDAO).listContainedDataSetsRecursively(with(dataSetIdsMatcher)); + will(returnValue(TechId.createList(70, 71, 72, 73))); one(deletionDAO).trash(with(same(EntityKind.DATA_SET)), with(dataSetIdsMatcher), with(same(deletion))); @@ -346,11 +341,8 @@ public final class TrashBOTest extends AbstractBOTest one(dataSetTable).getNonDeletableExternalDataSets(); will(returnValue(Arrays.asList())); - one(dataDAO).listContainedDataSets(dataSetIds); - will(returnValue(containedIds)); - - one(dataDAO).listContainedDataSets(containedIds); - will(returnValue(Collections.emptyList())); + one(dataDAO).listContainedDataSetsRecursively(dataSetIds); + will(returnValue(allIds)); one(deletionDAO).trash(EntityKind.DATA_SET, allIds, deletion); will(returnValue(allIds.size())); @@ -376,11 +368,9 @@ public final class TrashBOTest extends AbstractBOTest dataSet.setStatus(DataSetArchivingStatus.ARCHIVE_PENDING); will(returnValue(Arrays.asList(dataSet))); - one(dataDAO).listContainedDataSets(dataSetIds); - will(returnValue(containedIds)); + one(dataDAO).listContainedDataSetsRecursively(dataSetIds); + will(returnValue(allIds)); - one(dataDAO).listContainedDataSets(containedIds); - will(returnValue(Collections.emptyList())); } }); -- GitLab