Skip to content
Snippets Groups Projects
Commit ee45cced authored by buczekp's avatar buczekp
Browse files

[LMS-1212] relaxed business rules for sample child-parent groups

SVN: 12830
parent 149de484
No related branches found
No related tags found
No related merge requests found
...@@ -38,8 +38,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; ...@@ -38,8 +38,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
public class SampleGenericBusinessRules public class SampleGenericBusinessRules
{ {
static private void assertValidParentRelation(final SamplePE parent, final SamplePE child) static private void assertValidParentRelation(final SamplePE parent, final SamplePE child,
throws UserFailureException final String childRelationName) throws UserFailureException
{ {
if (parent == null || child == null) if (parent == null || child == null)
return; return;
...@@ -53,18 +53,13 @@ public class SampleGenericBusinessRules ...@@ -53,18 +53,13 @@ public class SampleGenericBusinessRules
if (childId.isDatabaseInstanceLevel()) if (childId.isDatabaseInstanceLevel())
{ {
throwUserFailureException("The database instance sample '%s' " throwUserFailureException("The database instance sample '%s' "
+ "can not be derived from the group sample '%s'.", child, parent); + "can not be %s the group sample '%s'.", child, parent, childRelationName);
}
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);
} }
} }
} }
static private void assertValidChildrenRelation(final List<SamplePE> children, 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) if (children == null || children.size() == 0 || parent == null)
return; return;
...@@ -80,12 +75,8 @@ public class SampleGenericBusinessRules ...@@ -80,12 +75,8 @@ public class SampleGenericBusinessRules
if (childId.isDatabaseInstanceLevel()) if (childId.isDatabaseInstanceLevel())
{ {
throwUserFailureException("Sample '%s' can not be a group sample because of " throwUserFailureException("Sample '%s' can not be a group sample because of "
+ "a derived database instance sample '%s'.", parent, child); + "a %s database instance sample '%s'.", parent, child,
} childRelationName);
if (parentId.getGroupLevel().equals(childId.getGroupLevel()) == false)
{
throwUserFailureException("Sample '%s' can not have different group "
+ "from its derived sample '%s'.", child, parent);
} }
} }
} }
...@@ -95,22 +86,22 @@ public class SampleGenericBusinessRules ...@@ -95,22 +86,22 @@ public class SampleGenericBusinessRules
{ {
if (sample == null) if (sample == null)
return; return;
assertValidParentRelation(sample.getContainer(), sample); assertValidParentRelation(sample.getContainer(), sample, "contained in");
assertValidParentRelation(sample.getGeneratedFrom(), sample); assertValidParentRelation(sample.getGeneratedFrom(), sample, "derived from");
} }
static public void assertValidChildren(SamplePE sample) static public void assertValidChildren(SamplePE sample)
{ {
if (sample == null) if (sample == null)
return; return;
assertValidChildrenRelation(sample.getContained(), sample); assertValidChildrenRelation(sample.getContained(), sample, "contained");
assertValidChildrenRelation(sample.getGenerated(), sample); assertValidChildrenRelation(sample.getGenerated(), sample, "derived");
} }
static private void throwUserFailureException(String messageTemplate, SamplePE sample1, static private void throwUserFailureException(String messageTemplate, SamplePE sample1,
SamplePE sample2) SamplePE sample2, String childRelationName)
{ {
throw UserFailureException.fromTemplate(messageTemplate, sample1.getSampleIdentifier(), throw UserFailureException.fromTemplate(messageTemplate, sample1.getSampleIdentifier(),
sample2.getSampleIdentifier()); childRelationName, sample2.getSampleIdentifier());
} }
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.generic.server.business.bo; package ch.systemsx.cisd.openbis.generic.server.business.bo;
import org.testng.AssertJUnit;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
...@@ -28,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; ...@@ -28,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
* *
* @author Izabela Adamczyk * @author Izabela Adamczyk
*/ */
public final class SampleGenericBusinessRulesTest public final class SampleGenericBusinessRulesTest extends AssertJUnit
{ {
private static final String DB = "db"; private static final String DB = "db";
...@@ -77,89 +78,115 @@ public final class SampleGenericBusinessRulesTest ...@@ -77,89 +78,115 @@ public final class SampleGenericBusinessRulesTest
public void testGroupSampleCanHaveParentFromTheSameGroup() throws Exception public void testGroupSampleCanHaveParentFromTheSameGroup() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); 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); SamplePE generator = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2);
newSample.setGeneratedFrom(generator);
SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_3); SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_3);
newSample.setContainer(container);
SampleGenericBusinessRules.assertValidParents(newSample); setBidirectionalRelationships(child, generator, container);
checkBusinessRules(child);
} }
@Test @Test
public void testGroupSampleCanHaveSharedParent() throws Exception public void testGroupSampleCanHaveSharedParent() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); DatabaseInstancePE databaseInstance = createDatabaseInstance(DB);
SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1);
SamplePE generator = createSharedSample(databaseInstance, SAMPLE_2);
SamplePE parent = createSharedSample(databaseInstance, SAMPLE_2);
newSample.setGeneratedFrom(parent);
SamplePE container = createSharedSample(databaseInstance, SAMPLE_3); SamplePE container = createSharedSample(databaseInstance, SAMPLE_3);
newSample.setContainer(container);
SampleGenericBusinessRules.assertValidParents(newSample); setBidirectionalRelationships(child, generator, container);
checkBusinessRules(child);
} }
@Test(expectedExceptions = UserFailureException.class) @Test
public void testGroupSampleCannotBeContainedByParentFromDifferentGroup() throws Exception public void testGroupSampleCanBeContainedByParentFromDifferentGroup() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); DatabaseInstancePE databaseInstance = createDatabaseInstance(DB);
SamplePE newSample = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1); SamplePE child = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_1);
SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2);
SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_2), SAMPLE_2);
newSample.setContainer(parent);
SampleGenericBusinessRules.assertValidParents(newSample); setBidirectionalRelationships(child, null, container);
checkBusinessRules(child);
} }
@Test(expectedExceptions = UserFailureException.class) @Test
public void testGroupSampleCannotBeDerivedFromParentFromDifferentGroup() throws Exception public void testGroupSampleCanBeDerivedFromParentFromDifferentGroup() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); 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); setBidirectionalRelationships(child, generator, null);
newSample.setGeneratedFrom(parent); checkBusinessRules(child);
SampleGenericBusinessRules.assertValidParents(newSample);
} }
@Test @Test
public void testInstanceSampleCanHaveInstanceSampleParents() throws Exception public void testInstanceSampleCanHaveInstanceSampleParents() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); DatabaseInstancePE databaseInstance = createDatabaseInstance(DB);
SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); SamplePE child = createSharedSample(databaseInstance, SAMPLE_1);
SamplePE generator = createSharedSample(databaseInstance, SAMPLE_2); SamplePE generator = createSharedSample(databaseInstance, SAMPLE_2);
newSample.setGeneratedFrom(generator);
SamplePE container = createSharedSample(databaseInstance, SAMPLE_3); SamplePE container = createSharedSample(databaseInstance, SAMPLE_3);
newSample.setContainer(container);
SampleGenericBusinessRules.assertValidParents(newSample); setBidirectionalRelationships(child, generator, container);
checkBusinessRules(child);
} }
@Test(expectedExceptions = UserFailureException.class) @Test(expectedExceptions = UserFailureException.class)
public void testInstanceSampleCannotBeContainedByGroupSample() throws Exception public void testInstanceSampleCannotBeContainedByGroupSample() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); DatabaseInstancePE databaseInstance = createDatabaseInstance(DB);
SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); SamplePE child = createSharedSample(databaseInstance, SAMPLE_1);
SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); SamplePE container = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2);
newSample.setContainer(parent);
SampleGenericBusinessRules.assertValidParents(newSample); setBidirectionalRelationships(child, null, container);
// two asserts need to fail
try
{
SampleGenericBusinessRules.assertValidParents(child);
} catch (UserFailureException e)
{
SampleGenericBusinessRules.assertValidChildren(container);
}
} }
@Test(expectedExceptions = UserFailureException.class) @Test(expectedExceptions = UserFailureException.class)
public void testInstanceSampleCannotBeDerivedFromGroupSample() throws Exception public void testInstanceSampleCannotBeDerivedFromGroupSample() throws Exception
{ {
DatabaseInstancePE databaseInstance = createDatabaseInstance(DB); DatabaseInstancePE databaseInstance = createDatabaseInstance(DB);
SamplePE newSample = createSharedSample(databaseInstance, SAMPLE_1); SamplePE child = createSharedSample(databaseInstance, SAMPLE_1);
SamplePE parent = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2); SamplePE generator = createGroupSample(createGroup(databaseInstance, GROUP_1), SAMPLE_2);
newSample.setGeneratedFrom(parent);
SampleGenericBusinessRules.assertValidParents(newSample); 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
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