From 3921ff16e30d7886f6122a110871a13c9ce08a88 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 1 Dec 2010 08:17:07 +0000
Subject: [PATCH] LMS-1883 bug fixed

SVN: 18944
---
 .../CsvFeatureVectorMigrator.java             |  3 +--
 .../CsvToCanonicalFeatureVector.java          | 24 +++++++++++++++----
 .../FeatureVectorStorageProcessor.java        |  3 +--
 ...reVectorStorageProcessorConfiguration.java | 14 +++++++++++
 4 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvFeatureVectorMigrator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvFeatureVectorMigrator.java
index a7dd36f72da..1ebcb450341 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvFeatureVectorMigrator.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvFeatureVectorMigrator.java
@@ -49,8 +49,7 @@ public class CsvFeatureVectorMigrator extends AbstractFeatureVectorMigrator
 
         this.configuration = new FeatureVectorStorageProcessorConfiguration(properties);
         convertorConfig =
-                new CsvToCanonicalFeatureVectorConfiguration(configuration.getWellRow(),
-                        configuration.getWellColumn());
+                new CsvToCanonicalFeatureVectorConfiguration(configuration);
     }
 
     @Override
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvToCanonicalFeatureVector.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvToCanonicalFeatureVector.java
index fff41bff674..e79cb1d878d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvToCanonicalFeatureVector.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/CsvToCanonicalFeatureVector.java
@@ -52,10 +52,23 @@ public class CsvToCanonicalFeatureVector
 
         private final boolean isSplit;
 
+        private final Set<String> columnsToBeIgnored;
+        
+        public CsvToCanonicalFeatureVectorConfiguration(FeatureVectorStorageProcessorConfiguration config)
+        {
+            this(config.getWellRow(), config.getWellColumn(), config.getColumnsToBeIgnored());
+        }
+
         public CsvToCanonicalFeatureVectorConfiguration(String wellRow, String wellColumn)
+        {
+            this(wellRow, wellColumn, Collections.<String> emptySet());
+        }
+        
+        public CsvToCanonicalFeatureVectorConfiguration(String wellRow, String wellColumn, Set<String> columnsToBeIgnored)
         {
             this.wellRowColumn = wellRow;
             this.wellColumnColumn = wellColumn;
+            this.columnsToBeIgnored = columnsToBeIgnored;
 
             isSplit = (false == wellRow.equals(wellColumn));
         }
@@ -74,6 +87,11 @@ public class CsvToCanonicalFeatureVector
         {
             return isSplit;
         }
+        
+        public boolean shouldColumnBeIgnored(String column)
+        {
+            return columnsToBeIgnored.contains(column);
+        }
     }
 
     private final CsvToCanonicalFeatureVectorConfiguration configuration;
@@ -257,16 +275,14 @@ public class CsvToCanonicalFeatureVector
         for (int i = 0; i < header.length; ++i)
         {
             String headerName = header[i];
-            boolean isWellName;
+            boolean isWellName = true;
             if (configuration.getWellRowColumn().equals(headerName))
             {
                 xColumn = i;
-                isWellName = true;
             } else if (configuration.getWellColumnColumn().equals(headerName))
             {
                 yColumn = i;
-                isWellName = true;
-            } else
+            } else if (configuration.shouldColumnBeIgnored(headerName) == false)
             {
                 isWellName = false;
             }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessor.java
index f4506727b96..326cd5db600 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessor.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessor.java
@@ -67,8 +67,7 @@ public class FeatureVectorStorageProcessor extends AbstractDelegatingStorageProc
         super(properties);
         this.configuration = new FeatureVectorStorageProcessorConfiguration(properties);
         convertorConfig =
-                new CsvToCanonicalFeatureVectorConfiguration(configuration.getWellRow(),
-                        configuration.getWellColumn());
+                new CsvToCanonicalFeatureVectorConfiguration(configuration);
         this.dataSource = ServiceProvider.getDataSourceProvider().getDataSource(properties);
         this.openBisService = ServiceProvider.getOpenBISService();
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessorConfiguration.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessorConfiguration.java
index 1c443f6c6a3..d6780668f84 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessorConfiguration.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorStorageProcessorConfiguration.java
@@ -16,7 +16,10 @@
 
 package ch.systemsx.cisd.openbis.dss.etl.featurevector;
 
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Properties;
+import java.util.Set;
 
 import ch.systemsx.cisd.common.utilities.PropertyUtils;
 import ch.systemsx.cisd.utils.CsvFileReaderHelper.ICsvFileReaderConfiguration;
@@ -48,6 +51,8 @@ class FeatureVectorStorageProcessorConfiguration implements
 
     private final String wellColumn;
 
+    private final Set<String> columnsToBeIgnored;
+
     FeatureVectorStorageProcessorConfiguration(Properties properties)
     {
         comment = '#';
@@ -60,6 +65,10 @@ class FeatureVectorStorageProcessorConfiguration implements
         this.wellRow = properties.getProperty(WELL_NAME_ROW_PROPERTY_KEY, DEFAULT_WELL_ROW);
 
         this.wellColumn = properties.getProperty(WELL_NAME_COL_PROPERTY_KEY, DEFAULT_WELL_COL);
+        
+        columnsToBeIgnored =
+                new HashSet<String>(Arrays.asList(properties.getProperty("columns-to-be-ignored",
+                        "barcode").split(", *")));
     }
 
     public char getColumnDelimiter()
@@ -91,4 +100,9 @@ class FeatureVectorStorageProcessorConfiguration implements
     {
         return wellColumn;
     }
+
+    public final Set<String> getColumnsToBeIgnored()
+    {
+        return columnsToBeIgnored;
+    }
 }
\ No newline at end of file
-- 
GitLab