From a56e7cc13e63ea8edc9c86f92076c7e94c635cd3 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Thu, 22 Mar 2012 12:24:13 +0000 Subject: [PATCH] LMS-2843: update the logic of setting experiment for contained datasets SVN: 24773 --- .../generic/server/business/bo/DataBO.java | 29 +++--------- .../openbis/generic/shared/dto/DataPE.java | 11 +++++ .../generic/shared/dto/ExperimentPE.java | 9 ---- .../server/business/bo/DataBOTest.java | 4 ++ .../dataaccess/db/ExperimentDAOTest.java | 45 +++++++++++++++++++ 5 files changed, 67 insertions(+), 31 deletions(-) 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 014314cfe81..d907300e208 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,7 +19,6 @@ 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; @@ -783,11 +782,10 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO throw createWrongSampleException(newSample, "the new sample is not connected to any experiment"); } + // move dataset to the experiment if needed - if (experiment.equals(data.getExperiment()) == false) - { - data.setExperiment(experiment); - } + updateExperiment(experiment); + data.setSample(newSample); } @@ -795,27 +793,14 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO { assert experimentIdentifier != null; ExperimentPE experiment = getExperimentByIdentifier(experimentIdentifier); - if (data.getExperiment() == null || data.getExperiment().getId() != experiment.getId()) - { - if (data.isContainer()) - { - updateExperimentForAllContainedDataSets(experiment); - } else - { - data.setExperiment(experiment); - } - } + updateExperiment(experiment); } - private void updateExperimentForAllContainedDataSets(ExperimentPE experiment) + private void updateExperiment(ExperimentPE experiment) { - List<TechId> listIds = Collections.singletonList(TechId.create(data)); - listIds = getDataDAO().listContainedDataSetsRecursively(listIds); - - for (TechId techId : listIds) + if (experiment.equals(data.getExperiment()) == false) { - DataPE dataObject = getDataDAO().getByTechId(techId); - dataObject.setExperiment(experiment); + data.setExperiment(experiment); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java index 2d4ef864d1f..3df8444bbc3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataPE.java @@ -523,6 +523,17 @@ public class DataPE extends AbstractIdAndCodeHolder<DataPE> implements if (experiment != null) { experiment.addDataSet(this); + + if (containedDataSets != null) + { + for (DataPE contained : containedDataSets) + { + if (false == contained.equals(this)) + { + contained.setExperiment(experiment); + } + } + } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ExperimentPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ExperimentPE.java index 617be0267ef..b7f946c701a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ExperimentPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/ExperimentPE.java @@ -374,15 +374,6 @@ public class ExperimentPE extends AttachmentHolderPE implements this.dataSets = dataSets; } - public final void setDataSets(final List<DataPE> dataSets) - { - getExperimentDataSets().clear(); - for (final DataPE child : dataSets) - { - addDataSet(child); - } - } - public void addDataSet(final DataPE child) { final ExperimentPE parent = child.getExperiment(); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java index 3093d0e7d38..1fccfc08a9f 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java @@ -576,6 +576,7 @@ public class DataBOTest extends AbstractBOTest { final ExperimentPE experiment = new ExperimentPE(); experiment.setCode(EXPERIMENT_IDENTIFIER.getExperimentCode()); + experiment.setProject(ManagerTestTool.EXAMPLE_PROJECT); final ExternalDataPE dataSet = createExternalData(null, experiment); DataSetUpdatesDTO dataSetUpdatesDTO = @@ -603,6 +604,7 @@ public class DataBOTest extends AbstractBOTest { final ExperimentPE experiment = new ExperimentPE(); experiment.setCode(EXPERIMENT_IDENTIFIER.getExperimentCode()); + experiment.setProject(ManagerTestTool.EXAMPLE_PROJECT); final ExternalDataPE dataSet = createExternalData(null, experiment); DataSetUpdatesDTO dataSetUpdatesDTO = @@ -638,6 +640,7 @@ public class DataBOTest extends AbstractBOTest { final ExperimentPE experiment = new ExperimentPE(); experiment.setCode(EXPERIMENT_IDENTIFIER.getExperimentCode()); + experiment.setProject(ManagerTestTool.EXAMPLE_PROJECT); final DataPE dataSet = createDataSet(null, experiment); DataSetUpdatesDTO dataSetUpdatesDTO = @@ -674,6 +677,7 @@ public class DataBOTest extends AbstractBOTest { final ExperimentPE experiment = new ExperimentPE(); experiment.setCode(EXPERIMENT_IDENTIFIER.getExperimentCode()); + experiment.setProject(ManagerTestTool.EXAMPLE_PROJECT); final DataPE dataSet = createDataSet(null, experiment); DataSetUpdatesDTO dataSetUpdatesDTO = diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java index c5eaeca7aa5..16b615cc7c5 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java @@ -25,6 +25,7 @@ import static org.testng.AssertJUnit.fail; import java.util.Collections; import java.util.Date; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import junit.framework.Assert; @@ -36,6 +37,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.server.dataaccess.DynamicPropertyEvaluationOperation; import ch.systemsx.cisd.openbis.generic.server.dataaccess.DynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO; import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -417,6 +419,49 @@ public class ExperimentDAOTest extends AbstractDAOTest Assert.assertFalse(modificationTimestamp.equals(experimentFound.getModificationDate())); } + public final void testChangeContainerExperimentUpdatesContainedElements() + { + // get data + IDataDAO dao = daoFactory.getDataDAO(); + + ExperimentPE exp = daoFactory.getExperimentDAO().getByTechId(new TechId(8)); + + ExperimentPE exp22 = daoFactory.getExperimentDAO().getByTechId(new TechId(22)); + + assertEquals("EXP-REUSE", exp.getCode()); + assertEquals("EXP-Y", exp22.getCode()); + + DataPE container = dao.tryToFindDataSetByCode("20110509092359990-10"); + + List<TechId> containedIds = + dao.listContainedDataSetsRecursively(Collections.singleton(TechId.create(container))); + + assertEquals(3, containedIds.size()); + + List<DataPE> contained = new LinkedList<DataPE>(); + for (TechId techId : containedIds) + { + contained.add(dao.getByTechId(techId)); + } + + // change experiment for container + container.setExperiment(exp22); + + // assert the contained datasets have experiment updated + for (DataPE data : contained) + { + assertEquals(exp22, data.getExperiment()); + } + + // revert to original state + container.setExperiment(exp); + + for (DataPE data : contained) + { + assertEquals(exp, data.getExperiment()); + } + } + @Test public void testCreateExperimentsOfDifferentTypes() throws Exception { -- GitLab