From ee45ccedc54d21c44552f7748c5a37213611679e Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Sat, 3 Oct 2009 18:21:58 +0000 Subject: [PATCH] [LMS-1212] relaxed business rules for sample child-parent groups SVN: 12830 --- .../bo/SampleGenericBusinessRules.java | 33 ++---- .../bo/SampleGenericBusinessRulesTest.java | 111 +++++++++++------- 2 files changed, 81 insertions(+), 63 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java index 0112feeb447..b63b8c97dfc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRules.java @@ -38,8 +38,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; public class SampleGenericBusinessRules { - static private void assertValidParentRelation(final SamplePE parent, final SamplePE child) - throws UserFailureException + static private void assertValidParentRelation(final SamplePE parent, final SamplePE child, + final String childRelationName) throws UserFailureException { if (parent == null || child == null) return; @@ -53,18 +53,13 @@ public class SampleGenericBusinessRules if (childId.isDatabaseInstanceLevel()) { throwUserFailureException("The database instance sample '%s' " - + "can not be derived from the group sample '%s'.", child, parent); - } - if (parentId.getGroupLevel().equals(childId.getGroupLevel()) == false) - { - throwUserFailureException("The sample '%s' has to be in the same group as " - + "the sample '%s' from which it is derived.", child, parent); + + "can not be %s the group sample '%s'.", child, parent, childRelationName); } } } static private void assertValidChildrenRelation(final List<SamplePE> children, - final SamplePE parent) throws UserFailureException + final SamplePE parent, final String childRelationName) throws UserFailureException { if (children == null || children.size() == 0 || parent == null) return; @@ -80,12 +75,8 @@ public class SampleGenericBusinessRules if (childId.isDatabaseInstanceLevel()) { throwUserFailureException("Sample '%s' can not be a group sample because of " - + "a derived database instance sample '%s'.", parent, child); - } - if (parentId.getGroupLevel().equals(childId.getGroupLevel()) == false) - { - throwUserFailureException("Sample '%s' can not have different group " - + "from its derived sample '%s'.", child, parent); + + "a %s database instance sample '%s'.", parent, child, + childRelationName); } } } @@ -95,22 +86,22 @@ public class SampleGenericBusinessRules { if (sample == null) return; - assertValidParentRelation(sample.getContainer(), sample); - assertValidParentRelation(sample.getGeneratedFrom(), sample); + assertValidParentRelation(sample.getContainer(), sample, "contained in"); + assertValidParentRelation(sample.getGeneratedFrom(), sample, "derived from"); } static public void assertValidChildren(SamplePE sample) { if (sample == null) return; - assertValidChildrenRelation(sample.getContained(), sample); - assertValidChildrenRelation(sample.getGenerated(), sample); + assertValidChildrenRelation(sample.getContained(), sample, "contained"); + assertValidChildrenRelation(sample.getGenerated(), sample, "derived"); } static private void throwUserFailureException(String messageTemplate, SamplePE sample1, - SamplePE sample2) + SamplePE sample2, String childRelationName) { throw UserFailureException.fromTemplate(messageTemplate, sample1.getSampleIdentifier(), - sample2.getSampleIdentifier()); + childRelationName, sample2.getSampleIdentifier()); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRulesTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRulesTest.java index ebca0dac7a0..728d10d9335 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRulesTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleGenericBusinessRulesTest.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; +import org.testng.AssertJUnit; import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.UserFailureException; @@ -28,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; * * @author Izabela Adamczyk */ -public final class SampleGenericBusinessRulesTest +public final class SampleGenericBusinessRulesTest extends AssertJUnit { private static final String DB = "db"; @@ -77,89 +78,115 @@ public final class SampleGenericBusinessRulesTest public void testGroupSampleCanHaveParentFromTheSameGroup() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); - + SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); SamplePE generator = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); - newSample.setGeneratedFrom(generator); - SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_3); - newSample.setContainer(container); - SampleGenericBusinessRules.assertValidParents(newSample); + setBidirectionalRelationships(child, generator, container); + checkBusinessRules(child); } @Test public void testGroupSampleCanHaveSharedParent() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); - - SamplePE parent = createSharedSample(databaseInstance, SAMPLE_2); - newSample.setGeneratedFrom(parent); - + SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); + SamplePE generator = createSharedSample(databaseInstance, SAMPLE_2); SamplePE container = createSharedSample(databaseInstance, SAMPLE_3); - newSample.setContainer(container); - SampleGenericBusinessRules.assertValidParents(newSample); + setBidirectionalRelationships(child, generator, container); + checkBusinessRules(child); } - @Test(expectedExceptions = UserFailureException.class) - public void testGroupSampleCannotBeContainedByParentFromDifferentGroup() throws Exception + @Test + public void testGroupSampleCanBeContainedByParentFromDifferentGroup() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); - - SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2); - newSample.setContainer(parent); + SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); + SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2); - SampleGenericBusinessRules.assertValidParents(newSample); + setBidirectionalRelationships(child, null, container); + checkBusinessRules(child); } - @Test(expectedExceptions = UserFailureException.class) - public void testGroupSampleCannotBeDerivedFromParentFromDifferentGroup() throws Exception + @Test + public void testGroupSampleCanBeDerivedFromParentFromDifferentGroup() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); + SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); + SamplePE generator = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2); - SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2); - newSample.setGeneratedFrom(parent); - - SampleGenericBusinessRules.assertValidParents(newSample); + setBidirectionalRelationships(child, generator, null); + checkBusinessRules(child); } @Test public void testInstanceSampleCanHaveInstanceSampleParents() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); - + SamplePE child = createSharedSample(databaseInstance, SAMPLE_1); SamplePE generator = createSharedSample(databaseInstance, SAMPLE_2); - newSample.setGeneratedFrom(generator); - SamplePE container = createSharedSample(databaseInstance, SAMPLE_3); - newSample.setContainer(container); - SampleGenericBusinessRules.assertValidParents(newSample); + setBidirectionalRelationships(child, generator, container); + checkBusinessRules(child); } @Test(expectedExceptions = UserFailureException.class) public void testInstanceSampleCannotBeContainedByGroupSample() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); - SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); - newSample.setContainer(parent); - SampleGenericBusinessRules.assertValidParents(newSample); + SamplePE child = createSharedSample(databaseInstance, SAMPLE_1); + SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); + + setBidirectionalRelationships(child, null, container); + // two asserts need to fail + try + { + SampleGenericBusinessRules.assertValidParents(child); + } catch (UserFailureException e) + { + SampleGenericBusinessRules.assertValidChildren(container); + } } @Test(expectedExceptions = UserFailureException.class) public void testInstanceSampleCannotBeDerivedFromGroupSample() throws Exception { DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); - SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); - SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); - newSample.setGeneratedFrom(parent); - SampleGenericBusinessRules.assertValidParents(newSample); + SamplePE child = createSharedSample(databaseInstance, SAMPLE_1); + SamplePE generator = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); + + setBidirectionalRelationships(child, generator, null); + // two asserts need to fail + try + { + SampleGenericBusinessRules.assertValidParents(child); + } catch (UserFailureException e) + { + SampleGenericBusinessRules.assertValidChildren(generator); + } } + private void setBidirectionalRelationships(SamplePE child, SamplePE generatorOrNull, + SamplePE containerOrNull) + { + child.setContainer(containerOrNull); + child.setGeneratedFrom(generatorOrNull); + if (generatorOrNull != null) + { + generatorOrNull.getGenerated().add(child); + } + if (containerOrNull != null) + { + containerOrNull.getContained().add(child); + } + } + + private void checkBusinessRules(SamplePE child) + { + SampleGenericBusinessRules.assertValidParents(child); + SampleGenericBusinessRules.assertValidChildren(child.getContainer()); + SampleGenericBusinessRules.assertValidChildren(child.getGeneratedFrom()); + } } \ No newline at end of file -- GitLab