diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java index 60c64cee464953adce9056f7cc25e9f95a9412fc..686d9db7bdf13915d05a407a994e7f5566eb4c21 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractor.java @@ -323,7 +323,7 @@ public class DefaultDataSetInfoExtractor extends AbstractDataSetInfoExtractor dataSetInformation.setExperimentIdentifier(experimentIdentifier); if (experimentIdentifier == null) { - dataSetInformation.setSampleCode(entitiesProvider.getEntity(indexOfSampleCode)); + dataSetInformation.setSampleCode(extractSampleCode(entitiesProvider)); } dataSetInformation.setParentDataSetCodes(getParentDataSetCodes(entitiesProvider)); dataSetInformation.setProducerCode(tryGetDataProducerCode(entitiesProvider)); @@ -358,6 +358,14 @@ public class DefaultDataSetInfoExtractor extends AbstractDataSetInfoExtractor return identifier; } + private String extractSampleCode(final DataSetNameEntitiesProvider entitiesProvider) + { + // subEntitySeparator can be used instead of ':' for contained sample code + // (':' is not an allowed char some OS and it is not achievable in Mac OS Finder) + String sampleCode = entitiesProvider.getEntity(indexOfSampleCode); + return sampleCode.replace(subEntitySeparator, ':'); + } + private List<String> getParentDataSetCodes(final DataSetNameEntitiesProvider entitiesProvider) { if (indexOfParentDataSetCodes.isUndefined()) diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractorTest.java index 7e84f0db77e1e788df3afb8a87e8c1d0ef1a672b..cb485f04cc46d243f7cb2de60668844bcf9f0835 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractorTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/DefaultDataSetInfoExtractorTest.java @@ -54,6 +54,24 @@ public final class DefaultDataSetInfoExtractorTest extends CodeExtractortTestCas assertTrue(WORKING_DIRECTORY.mkdirs()); } + @Test + public void testExtractContainedSampleIdentifier() + { + Properties properties = new Properties(); + properties.setProperty(asPropertyName(GROUP_CODE), "my-group"); + final IDataSetInfoExtractor extractor = new DefaultDataSetInfoExtractor(properties); + + final DataSetInformation dsInfo1 = + extractor.getDataSetInformation(new File("BOX_1&S_1"), null); + final DataSetInformation dsInfo2 = + extractor.getDataSetInformation(new File("BOX_1:S_1"), null); + + assertEquals("BOX_1:S_1", dsInfo1.getSampleIdentifier().getSampleCode()); + assertEquals("S_1", dsInfo1.getSampleIdentifier().getSampleSubCode()); + assertEquals("BOX_1:S_1", dsInfo2.getSampleIdentifier().getSampleCode()); + assertEquals("S_1", dsInfo2.getSampleIdentifier().getSampleSubCode()); + } + @Test public void testExtractExperimentIdentifierWithoutGroup() { @@ -70,32 +88,32 @@ public final class DefaultDataSetInfoExtractorTest extends CodeExtractortTestCas assertEquals("123", dsInfo.getExperimentIdentifier().getExperimentCode()); assertEquals(null, dsInfo.getSampleIdentifier()); } - + @Test public void testExtractExperimentIdentifierWithGroup() { Properties properties = new Properties(); properties.setProperty(INDEX_OF_EXPERIMENT_IDENTIFIER, "1"); final IDataSetInfoExtractor extractor = new DefaultDataSetInfoExtractor(properties); - + final DataSetInformation dsInfo = - extractor.getDataSetInformation(new File("bla.abc&xy&123.bla"), null); - + extractor.getDataSetInformation(new File("bla.abc&xy&123.bla"), null); + assertEquals("ABC", dsInfo.getExperimentIdentifier().getSpaceCode()); assertEquals("XY", dsInfo.getExperimentIdentifier().getProjectCode()); assertEquals("123", dsInfo.getExperimentIdentifier().getExperimentCode()); assertEquals(null, dsInfo.getSampleIdentifier()); } - + @Test public void testHappyCaseWithDefaultProperties() { final String barcode = "XYZ123"; final IDataSetInfoExtractor extractor = new DefaultDataSetInfoExtractor(new Properties()); - + final DataSetInformation dsInfo = - extractor.getDataSetInformation(new File("bla.bla." + barcode), null); - + extractor.getDataSetInformation(new File("bla.bla." + barcode), null); + assertNull(dsInfo.getExperimentIdentifier()); assertEquals(barcode, dsInfo.getSampleIdentifier().getSampleCode()); assertEquals(0, dsInfo.getParentDataSetCodes().size()); @@ -186,7 +204,7 @@ public final class DefaultDataSetInfoExtractorTest extends CodeExtractortTestCas final Properties properties = new Properties(); final String separator = "="; properties.setProperty(ENTITY_SEPARATOR, separator); - String subSeparator = "%"; + String subSeparator = "%"; properties.setProperty(SUB_ENTITY_SEPARATOR, subSeparator); properties.setProperty(INDEX_OF_SAMPLE_CODE, "0"); properties.setProperty(INDEX_OF_PARENT_DATA_SET_CODE, "1");