From 75ad8a71a19b7c9118771934eeaa42a90d0b6619 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 7 Jun 2010 08:41:35 +0000
Subject: [PATCH] [SE-255] use subEntitySeparator for contained sample codes

SVN: 16290
---
 .../DefaultDataSetInfoExtractor.java          | 10 +++++-
 .../DefaultDataSetInfoExtractorTest.java      | 36 ++++++++++++++-----
 2 files changed, 36 insertions(+), 10 deletions(-)

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 60c64cee464..686d9db7bdf 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 7e84f0db77e..cb485f04cc4 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");
-- 
GitLab