From 9761e618ffca8928793211554f34392e3078d9d3 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 19 Feb 2013 12:58:04 +0000 Subject: [PATCH] SP-523 Recent bug fix improved and tested. SVN: 28393 --- .../server/EntityExistenceChecker.java | 18 +++++-- .../server/EntityExistenceCheckerTest.java | 51 +++++++++++++++++++ 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java index 0301841573a..beb664c7fca 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java @@ -357,12 +357,20 @@ class EntityExistenceChecker { String value = property.getValue(); MaterialTypePE materialType = propertyTypePE.getMaterialType(); - if (materialType != null) // if material type is null, it means, the property is of - // "any material type", so we don't need to check if it - // exist + MaterialIdentifier materialIdentifier; + if (materialType != null) + { + materialIdentifier = new MaterialIdentifier(value, materialType.getCode()); + } else + { + materialIdentifier = MaterialIdentifier.tryParseIdentifier(value); + } + if (materialIdentifier == null) + { + errors.add("Material identifier not in the form '<material code> (<material type code>)': " + + value); + } else { - MaterialIdentifier materialIdentifier = - new MaterialIdentifier(value, materialType.getCode()); materialExistenceManager.exists(materialIdentifier); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java index 6ddaa805600..d4e8b2869cd 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java @@ -448,6 +448,57 @@ public class EntityExistenceCheckerTest extends AssertJUnit sample("/S1/A3", null, null, "material:B"))))); assertThat(checker.getErrors(), containsExactly(new String[0])); + context.assertIsSatisfied(); + } + + @Test + public void testCheckNewSamplesWithMaterialPropertOfAnyType() + { + MaterialType type = new MaterialType(); + type.setCode("M1"); + MaterialTypePE materialType = materialType(type, "ALPHA"); + prepareForAssertMaterialTypeExists(type.getCode(), materialType); + SampleType sampleType = new SampleType(); + sampleType.setCode("S1"); + prepareForAssertSampleTypeExists(sampleType.getCode(), + sampleType((MaterialTypePE) null, "MATERIAL")); + context.checking(new Expectations() + { + { + one(materialDAO).tryFindMaterial(new MaterialIdentifier("B", "M1")); + will(returnValue(new MaterialPE())); + } + }); + + checker.checkNewMaterials(Arrays.asList(new NewMaterialsWithTypes(type, Arrays + .asList(material("A", "alpha:12"))))); + checker.checkNewSamples(Arrays.asList(new NewSamplesWithTypes(sampleType, Arrays.asList( + sample("/S1/A1", null, null, "material:A (M1)"), + sample("/S1/A2", null, null, "material:B (M1)"), + sample("/S1/A3", null, null, "material:B (M1)"))))); + + assertThat(checker.getErrors(), containsExactly(new String[0])); + context.assertIsSatisfied(); + } + + @Test + public void testCheckNewSamplesWithMaterialPropertyOfAnyTypeWithInvalidMaterialIdentifier() + { + SampleType sampleType = new SampleType(); + sampleType.setCode("S1"); + prepareForAssertSampleTypeExists(sampleType.getCode(), + sampleType((MaterialTypePE) null, "MATERIAL")); + + checker.checkNewSamples(Arrays.asList(new NewSamplesWithTypes(sampleType, Arrays.asList( + sample("/S1/A1", null, null, "material:A"), + sample("/S1/A2", null, null, "material:B"), + sample("/S1/A3", null, null, "material:B"))))); + + assertEquals("[Material identifier not in the form " + + "'<material code> (<material type code>)': A, " + + "Material identifier not in the form '<material code> " + + "(<material type code>)': B]", checker.getErrors().toString()); + context.assertIsSatisfied(); } @Test -- GitLab