From bd3129bdb937e23c84a8893d924753d2f6135664 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Thu, 19 Mar 2015 13:12:33 +0000 Subject: [PATCH] SSDM-1621: ExperimentBOTest fixed. SVN: 33696 --- .../business/bo/AbstractBusinessObject.java | 25 ++++++++++++---- .../server/business/bo/ExperimentBO.java | 2 +- .../generic/server/business/bo/SampleBO.java | 2 +- .../DataSetTypeWithoutExperimentChecker.java | 7 ++++- .../server/business/bo/ExperimentBOTest.java | 29 +++++++++++++++---- 5 files changed, 51 insertions(+), 14 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java index 423ca746236..c08c58e991d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -29,6 +30,7 @@ import org.apache.commons.lang.StringUtils; import org.hibernate.SessionFactory; import org.springframework.dao.DataAccessException; +import ch.systemsx.cisd.common.collection.CollectionUtils; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.IDataStoreServiceFactory; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker; @@ -731,18 +733,29 @@ abstract class AbstractBusinessObject implements IDAOFactory } } - protected void checkSampleWithoutDatasets(IDataDAO dataDAO, SamplePE sample) + protected void checkSampleWithoutDatasets(SamplePE sample) { List<DataPE> dataSets = getDataDAO().listDataSets(sample); + String sampleIdentifier = sample.getIdentifier(); + checkDataSetsDoNotNeedAnExperiment(sampleIdentifier, dataSets); + } + + private void checkDataSetsDoNotNeedAnExperiment(String sampleIdentifier, List<DataPE> dataSets) + { + List<String> dataSetsNeedingExperiment = new ArrayList<String>(); for (DataPE dataSet : dataSets) { + String dataSetTypeCode = dataSet.getDataSetType().getCode(); + if (dataSetTypeChecker.isDataSetTypeWithoutExperiment(dataSetTypeCode) == false) + { + dataSetsNeedingExperiment.add(dataSet.getCode()); + } } - if (hasDatasets2(dataDAO, sample)) + if (dataSetsNeedingExperiment.isEmpty() == false) { - throw UserFailureException - .fromTemplate( - "Operation cannot be performed, because some datasets have been already produced for the sample '%s'.", - sample.getSampleIdentifier()); + throw new UserFailureException("Operation cannot be performed, because the sample " + + sampleIdentifier + " has the following datasets which need an experiment: " + + CollectionUtils.abbreviate(dataSetsNeedingExperiment, 10)); } } 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 ccafafc89c1..0484f767014 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 @@ -517,7 +517,7 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper { for (SamplePE sample : samples) { - checkSampleWithoutDatasets(getDataDAO(), sample); + checkSampleWithoutDatasets(sample); relationshipService.unassignSampleFromExperiment(session, sample); } 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 7706876db03..e3142b829b6 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 @@ -239,7 +239,7 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam checkAvailable(sample); checkSpaceSample(sample); checkSampleUnused(sample); - checkSampleWithoutDatasets(getDataDAO(), sample); + checkSampleWithoutDatasets(sample); this.relationshipService.assignSampleToExperiment(session, sample, experiment); try diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/DataSetTypeWithoutExperimentChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/DataSetTypeWithoutExperimentChecker.java index fc9d912efb0..a104cd35731 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/DataSetTypeWithoutExperimentChecker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/DataSetTypeWithoutExperimentChecker.java @@ -41,7 +41,12 @@ public class DataSetTypeWithoutExperimentChecker public DataSetTypeWithoutExperimentChecker(Properties properties) { - regularExpressions = properties.getProperty(PROPERTY_KEY); + this(properties.getProperty(PROPERTY_KEY)); + } + + public DataSetTypeWithoutExperimentChecker(String regularExpressions) + { + this.regularExpressions = regularExpressions; if (StringUtils.isNotBlank(regularExpressions)) { String[] splittedRegexes = regularExpressions.split(","); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java index e81e36b1be7..d8017e33892 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBOTest.java @@ -36,6 +36,7 @@ import org.testng.annotations.Test; import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool; +import ch.systemsx.cisd.openbis.generic.server.business.bo.util.DataSetTypeWithoutExperimentChecker; import ch.systemsx.cisd.openbis.generic.server.util.TimeIntervalChecker; import ch.systemsx.cisd.openbis.generic.shared.CommonTestUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -43,6 +44,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; 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.dto.AttachmentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE; @@ -93,7 +96,7 @@ public final class ExperimentBOTest extends AbstractBOTest private final ExperimentBO createExperimentBO() { return new ExperimentBO(daoFactory, ManagerTestTool.EXAMPLE_SESSION, relationshipService, - managedPropertyEvaluatorFactory, null); + managedPropertyEvaluatorFactory, new DataSetTypeWithoutExperimentChecker("NE.*")); } @BeforeMethod @@ -811,7 +814,7 @@ public final class ExperimentBOTest extends AbstractBOTest context.assertIsSatisfied(); } - @Test(expectedExceptionsMessageRegExp = ".*datasets.*", expectedExceptions = UserFailureException.class) + @Test public void testUpdateByRemovingASampleWithDataSets() { ExperimentIdentifier identifier = CommonTestUtils.createExperimentIdentifier(); @@ -826,7 +829,15 @@ public final class ExperimentBOTest extends AbstractBOTest prepareRemoveSamplesFromExperiment(experiment, true, "S1"); ExperimentBO experimentBO = loadExperiment(identifier, experiment); - experimentBO.update(update); + try + { + experimentBO.update(update); + fail("UserFailureException expected"); + } catch (UserFailureException ex) + { + assertEquals("Operation cannot be performed, because the sample /S1 has the " + + "following datasets which need an experiment: [DS1]", ex.getMessage()); + } context.assertIsSatisfied(); } @@ -901,11 +912,19 @@ public final class ExperimentBOTest extends AbstractBOTest SamplePE sample = createSampleWithCode(sampleCode); will(returnValue(sample)); - one(dataDAO).hasDataSet(sample); - will(returnValue(samplesHaveDataSets)); + one(dataDAO).listDataSets(sample); if (samplesHaveDataSets) { + DataPE dataPE = new DataPE(); + dataPE.setCode("DS1"); + DataSetTypePE dataSetType = new DataSetTypePE(); + dataSetType.setCode("A"); + dataPE.setDataSetType(dataSetType); + will(returnValue(Arrays.asList(dataPE))); break; + } else + { + will(returnValue(Arrays.asList())); } one(relationshipService).unassignSampleFromExperiment(EXAMPLE_SESSION, sample); -- GitLab