From d0b91be8a8c5411d7773cda2d0d99f613585b00e Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Fri, 16 Sep 2011 13:43:06 +0000
Subject: [PATCH] [LMS-2531] 1) revert previous changes. 2) Imports should
 treat Gene SYMBOLS as a whitespace-separated list of values (not a single
 code)

SVN: 22972
---
 ...QiagenScreeningLibraryColumnExtractor.java |  2 +-
 .../server/LibraryRegistrationTask.java       | 52 +++++++----------
 .../server/LibraryRegistrationTaskTest.java   | 58 ++-----------------
 3 files changed, 28 insertions(+), 84 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/QiagenScreeningLibraryColumnExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/QiagenScreeningLibraryColumnExtractor.java
index 59d3fa5791c..64776f778c0 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/QiagenScreeningLibraryColumnExtractor.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/QiagenScreeningLibraryColumnExtractor.java
@@ -109,7 +109,7 @@ public class QiagenScreeningLibraryColumnExtractor extends AbstractColumnExtract
 
     public String getGeneSymbol(String[] row)
     {
-        return getCodeValue(row, GENE_SYMBOL);
+        return getValue(row, GENE_SYMBOL);
     }
 
     public String getGeneDescription(String[] row)
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTask.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTask.java
index 9a6215b1b51..1160a83af40 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTask.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTask.java
@@ -193,44 +193,36 @@ class LibraryRegistrationTask implements IASyncAction
             return;
         }
 
-        String normalizedValue = normalizeGeneValue(newGeneProp.getValue());
-        String mergedGeneType = mergeGeneTypes(existingGene, normalizedValue);
-        newGeneProp.setValue(mergedGeneType);
+        String mergedGeneSymbols = mergeGeneSymbols(existingGene, newGeneProp.getValue());
+        newGeneProp.setValue(mergedGeneSymbols);
     }
 
-    private String mergeGeneTypes(String existingType, String newType)
+    private String mergeGeneSymbols(String existingSymbols, String newSymbolString)
     {
-        if (StringUtils.isBlank(newType) || newType.equals(existingType))
+        if (StringUtils.isBlank(newSymbolString) || newSymbolString.equals(existingSymbols))
         {
-            return existingType;
+            return existingSymbols;
         }
-
-        boolean ignoreNewType =
-                existingType.startsWith(newType + DELIM) || existingType.endsWith(DELIM + newType)
-                        || (existingType.indexOf(DELIM + newType + DELIM) > 0);
-
-        if (ignoreNewType)
+        
+        String[] newSymbols = newSymbolString.split("\\s+");
+        StringBuilder result = new StringBuilder(existingSymbols);
+        for (String newSymbol : newSymbols)
         {
-            return existingType;
-        } else
-        {
-            return existingType + DELIM + newType;
-        }
-    }
+            if (StringUtils.isBlank(newSymbol))
+            {
+                continue;
+            }
+            boolean alreadyExisting =
+                existingSymbols.startsWith(newSymbol + DELIM) || existingSymbols.endsWith(DELIM + newSymbol)
+                        || (existingSymbols.indexOf(DELIM + newSymbol + DELIM) > 0);
 
-    /**
-     * Remove leading and trailing underscores.
-     */
-    private String normalizeGeneValue(String value)
-    {
-        final String UNDERSCORE = "_";
-        if (value.startsWith(UNDERSCORE) || value.endsWith(UNDERSCORE))
-        {
-            String normalized = value.replaceAll("_*$", "");
-            normalized = normalized.replaceAll("^_*", "");
-            return normalized;
+            if (false == alreadyExisting)
+            {
+                result.append(DELIM);
+                result.append(newSymbol);
+            }
         }
-        return value;
+        return result.toString();
     }
 
     public boolean doAction(Writer messageWriter)
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTaskTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTaskTest.java
index ffe0cbb1e69..e73e7602343 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTaskTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/LibraryRegistrationTaskTest.java
@@ -89,15 +89,15 @@ public class LibraryRegistrationTaskTest extends AssertJUnit
     {
         NewMaterial g1 = createNewGene("G1", "AB");
         NewMaterial g2 = createNewGene("G2", "AB");
-        NewMaterial g3 = createNewGene("G3", "AB");
-        NewMaterial g4 = createNewGene("G4", "AB");
-        NewMaterial g5 = createNewGene("G5", "AB");
+        NewMaterial g3 = createNewGene("G3", "BC AB");
+        NewMaterial g4 = createNewGene("G4", "AB AB");
+        NewMaterial g5 = createNewGene("G5", "AB DDD");
 
         final List<NewMaterial> newGenes = Arrays.asList(g1, g2, g3, g4, g5);
         final List<Material> existingGenes =
                 Arrays.asList(createExistingGene("G1", "ABC A"), createExistingGene("G2", "AB"),
                         createExistingGene("G3", "AB BC"), createExistingGene("G4", "XY AB"),
-                        createExistingGene("G5", "XY AB YZ"));
+                        createExistingGene("G5", "XY AB YZ DDD"));
         final RecordingMatcher<List<NewMaterialsWithTypes>> materialsWithTypesMatcher =
                 new RecordingMatcher<List<NewMaterialsWithTypes>>();
 
@@ -130,7 +130,7 @@ public class LibraryRegistrationTaskTest extends AssertJUnit
         assertEquals("AB", extractGeneSymbol(g2));
         assertEquals("AB BC", extractGeneSymbol(g3));
         assertEquals("XY AB", extractGeneSymbol(g4));
-        assertEquals("XY AB YZ", extractGeneSymbol(g5));
+        assertEquals("XY AB YZ DDD", extractGeneSymbol(g5));
 
         List<NewMaterialsWithTypes> materialsWithTypes =
                 LibraryRegistrationTask.createMaterialsWithTypes(
@@ -147,54 +147,6 @@ public class LibraryRegistrationTaskTest extends AssertJUnit
         }
     }
 
-    @Test
-    public void testUpdateWithUnderscores()
-    {
-        NewMaterial g1 = createNewGene("G1", "_AB_");
-        NewMaterial g2 = createNewGene("G2", "_AB_");
-        NewMaterial g3 = createNewGene("G3", "_AB_");
-        NewMaterial g4 = createNewGene("G4", "_AB_");
-        NewMaterial g5 = createNewGene("G5", "_AB_");
-
-        final List<NewMaterial> newGenes = Arrays.asList(g1, g2, g3, g4, g5);
-        final List<Material> existingGenes =
-                Arrays.asList(createExistingGene("G1", "ABC A"), createExistingGene("G2", "AB"),
-                        createExistingGene("G3", "AB BC"), createExistingGene("G4", "XY AB"),
-                        createExistingGene("G5", "XY AB YZ"));
-        final RecordingMatcher<List<NewMaterialsWithTypes>> materialsWithTypesMatcher =
-                new RecordingMatcher<List<NewMaterialsWithTypes>>();
-
-        task =
-                new LibraryRegistrationTask(SESSION_TOKEN, newGenes, null, null, commonServer,
-                        genericServer, daoFactory);
-
-        context.checking(new Expectations()
-            {
-                {
-                    one(daoFactory).getEntityTypeDAO(EntityKind.MATERIAL);
-                    will(returnValue(entityTypeDAO));
-
-                    one(entityTypeDAO).tryToFindEntityTypeByCode(
-                            ScreeningConstants.GENE_PLUGIN_TYPE_CODE);
-                    will(returnValue(new MaterialTypePE()));
-
-                    one(commonServer).listMaterials(with(SESSION_TOKEN),
-                            with(any(ListMaterialCriteria.class)), with(true));
-                    will(returnValue(existingGenes));
-
-                    one(genericServer).registerOrUpdateMaterials(with(SESSION_TOKEN),
-                            with(materialsWithTypesMatcher));
-                }
-            });
-
-        task.doAction(new StringWriter());
-
-        assertEquals("ABC A AB", extractGeneSymbol(g1));
-        assertEquals("AB", extractGeneSymbol(g2));
-        assertEquals("AB BC", extractGeneSymbol(g3));
-        assertEquals("XY AB", extractGeneSymbol(g4));
-        assertEquals("XY AB YZ", extractGeneSymbol(g5));
-    }
     private NewMaterial createNewGene(String code, String geneSymbol)
     {
         IEntityProperty geneSymbolProperty = createGeneSymbolProperty(geneSymbol);
-- 
GitLab