From a6b8eb2a4b911e1ae9f10261d87cd28dcbc9e50f Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Wed, 21 Jul 2010 11:29:47 +0000
Subject: [PATCH] LMS-1652 screening migration: fixes

SVN: 17115
---
 .../cisd/dbmigration/java/IMigrationStep.java | 10 ++-
 .../java/MigrationStepAdapter.java            | 10 ++-
 .../java/MigrationStepExecutor.java           | 14 +--
 .../java/MigrationStepAdminFrom001To002.java  | 14 +--
 .../java/MigrationStepFrom001To002.java       |  6 +-
 .../java/MigrationStepFrom002To003.java       | 12 +--
 .../migration/MigrationStepFrom022To023.java  | 10 ++-
 .../migration/MigrationStepFrom023To024.java  |  9 +-
 .../migration/MigrationStepFrom025To026.java  |  6 +-
 .../migration/MigrationStepFrom036To037.java  |  6 +-
 .../migration/MigrationStepFrom046To047.java  |  6 +-
 .../migration/MigrationStepFrom002To003.java  | 53 +++++------
 .../migration/MigrationStepFrom004To005.java  |  7 +-
 .../dss/etl/ImagingDatabaseVersionHolder.java |  4 +-
 .../migration/MigrationStepFrom003To004.java  | 89 ++++++++++++-------
 .../featurevector/FeatureVectorUploader.java  |  7 +-
 16 files changed, 153 insertions(+), 110 deletions(-)

diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/IMigrationStep.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/IMigrationStep.java
index 7b9aa7389d0..34f3026f317 100644
--- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/IMigrationStep.java
+++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/IMigrationStep.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.dbmigration.java;
 
+import javax.sql.DataSource;
+
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 
@@ -43,12 +45,12 @@ public interface IMigrationStep
     /**
      * Called before the SQL migration is performed.
      */
-    public void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException;
+    public void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException;
 
     /**
      * Called after the SQL migration has been performed.
      */
-    public void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException;
+    public void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException;
 }
diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdapter.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdapter.java
index 408f4a1f2ac..599dcbab6e8 100644
--- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdapter.java
+++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdapter.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.dbmigration.java;
 
+import javax.sql.DataSource;
+
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 
@@ -34,13 +36,13 @@ public class MigrationStepAdapter implements IMigrationStep
     // IMigrationStep
     //
 
-    public void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
     }
 
-    public void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
     }
 
diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepExecutor.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepExecutor.java
index e4e601be24e..c86915657ca 100644
--- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepExecutor.java
+++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/java/MigrationStepExecutor.java
@@ -78,12 +78,12 @@ public class MigrationStepExecutor extends SimpleJdbcDaoSupport implements IMigr
         }
         final ParserUtilities.LineSplitter splitter =
                 new ParserUtilities.LineSplitter(content, new ILineFilter()
-                {
-                    public boolean acceptLine(String line, int lineNumber)
                     {
-                        return StringUtils.isNotBlank(line) && line.startsWith("--");
-                    }
-                });
+                        public boolean acceptLine(String line, int lineNumber)
+                        {
+                            return StringUtils.isNotBlank(line) && line.startsWith("--");
+                        }
+                    });
         IMigrationStep stepOrNull = null;
         Line lineOrNull;
         while (stepOrNull == null && (lineOrNull = splitter.tryNextLine()) != null)
@@ -151,7 +151,7 @@ public class MigrationStepExecutor extends SimpleJdbcDaoSupport implements IMigr
         assert inited : "Executor not initialized.";
         if (migrationStep != null)
         {
-            migrationStep.performPreMigration(getSimpleJdbcTemplate());
+            migrationStep.performPreMigration(getSimpleJdbcTemplate(), getDataSource());
         }
     }
 
@@ -160,7 +160,7 @@ public class MigrationStepExecutor extends SimpleJdbcDaoSupport implements IMigr
         assert inited : "Executor not initialized.";
         if (migrationStep != null)
         {
-            migrationStep.performPostMigration(getSimpleJdbcTemplate());
+            migrationStep.performPostMigration(getSimpleJdbcTemplate(), getDataSource());
         }
     }
 
diff --git a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdminFrom001To002.java b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdminFrom001To002.java
index 6e0bc139ed3..729ca81eda8 100644
--- a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdminFrom001To002.java
+++ b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepAdminFrom001To002.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.dbmigration.java;
 
+import javax.sql.DataSource;
+
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 import org.testng.AssertJUnit;
@@ -33,9 +35,9 @@ public final class MigrationStepAdminFrom001To002 implements IMigrationStep
     public static MigrationStepAdminFrom001To002 instance;
 
     public final DatabaseConfigurationContext context;
-    
+
     public boolean preMigrationPerformed;
-    
+
     public boolean postMigrationPerformed;
 
     public MigrationStepAdminFrom001To002(DatabaseConfigurationContext context)
@@ -50,14 +52,14 @@ public final class MigrationStepAdminFrom001To002 implements IMigrationStep
     // IMigrationStep
     //
 
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         postMigrationPerformed = true;
     }
 
-    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         preMigrationPerformed = true;
     }
diff --git a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom001To002.java b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom001To002.java
index f82fa54a83c..439c6a2a5a5 100644
--- a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom001To002.java
+++ b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom001To002.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.dbmigration.java;
 
+import javax.sql.DataSource;
+
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 
@@ -31,12 +33,12 @@ public final class MigrationStepFrom001To002 implements IMigrationStep
     // IMigrationStep
     //
 
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate, DataSource dataSource)
             throws DataAccessException
     {
     }
 
-    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
+    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate, DataSource dataSource)
             throws DataAccessException
     {
     }
diff --git a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom002To003.java b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom002To003.java
index 640d3eb50b2..9b0b8c47d80 100644
--- a/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom002To003.java
+++ b/dbmigration/sourceTest/java/ch/systemsx/cisd/dbmigration/java/MigrationStepFrom002To003.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.dbmigration.java;
 
+import javax.sql.DataSource;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataIntegrityViolationException;
@@ -36,19 +38,19 @@ public final class MigrationStepFrom002To003 implements IMigrationStep
     {
         AssertJUnit.assertNotNull(context);
     }
-    
+
     //
     // IMigrationStep
     //
 
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         throw new EmptyResultDataAccessException(1);
     }
 
-    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         throw new DataIntegrityViolationException(StringUtils.EMPTY);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom022To023.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom022To023.java
index 98ca2991d31..f1341919896 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom022To023.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom022To023.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.server.dataaccess.migration;
 
+import javax.sql.DataSource;
+
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.IncorrectResultSizeDataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
@@ -40,8 +42,8 @@ public final class MigrationStepFrom022To023 implements IMigrationStep
     // IMigrationStep
     //
 
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         final String uuid = UuidUtil.generateUUID();
         final int count =
@@ -57,8 +59,8 @@ public final class MigrationStepFrom022To023 implements IMigrationStep
         }
     }
 
-    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom023To024.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom023To024.java
index 4da1aaee7f8..ee59d53ad29 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom023To024.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom023To024.java
@@ -38,8 +38,9 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames;
 /**
  * A migration step from database version <code>v23</code> to version <code>v24</code>.
  * <p>
- * This migration step does the following: it migrate the dataset locations in the database (<code>Instance_&lt;instance code&gt;</code>
- * renamed Instance_&lt;UUID&gt; when &lt;instance code&gt; is the original source).
+ * This migration step does the following: it migrate the dataset locations in the database (
+ * <code>Instance_&lt;instance code&gt;</code> renamed Instance_&lt;UUID&gt; when &lt;instance
+ * code&gt; is the original source).
  * </p>
  * 
  * @author Christian Ribeaud
@@ -112,8 +113,8 @@ public final class MigrationStepFrom023To024 extends MigrationStepAdapter
     //
 
     @Override
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            javax.sql.DataSource dataSource) throws DataAccessException
     {
         final DatabaseInstance databaseInstance = getDatabaseInstance(simpleJdbcTemplate);
         final List<ExternalData> externalDatas =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom025To026.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom025To026.java
index 74d5a39e122..074f0b3189e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom025To026.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom025To026.java
@@ -21,6 +21,8 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.sql.DataSource;
+
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
@@ -89,8 +91,8 @@ public final class MigrationStepFrom025To026 extends MigrationStepAdapter
     //
 
     @Override
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
 
         final List<ExternalData> externalDatas =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom036To037.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom036To037.java
index f59cbda3101..d5a848e7a91 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom036To037.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom036To037.java
@@ -21,6 +21,8 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.sql.DataSource;
+
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
@@ -79,8 +81,8 @@ public final class MigrationStepFrom036To037 extends MigrationStepAdapter
     //
 
     @Override
-    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPostMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         for (EntityKind entityKind : EntityKind.values())
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom046To047.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom046To047.java
index 6858e3d8cdf..9328916592f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom046To047.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/migration/MigrationStepFrom046To047.java
@@ -20,6 +20,8 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.List;
 
+import javax.sql.DataSource;
+
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.IncorrectResultSizeDataAccessException;
@@ -77,8 +79,8 @@ public final class MigrationStepFrom046To047 extends MigrationStepAdapter
     //
 
     @Override
-    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate)
-            throws DataAccessException
+    public final void performPreMigration(final SimpleJdbcTemplate simpleJdbcTemplate,
+            DataSource dataSource) throws DataAccessException
     {
         final List<PersonWithDisplaySettings> persons =
                 simpleJdbcTemplate.query(String.format(SELECT_PERSON_WITH_DISPLAY_SETTINGS_QUERY,
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/migration/MigrationStepFrom002To003.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/migration/MigrationStepFrom002To003.java
index ec250df1430..fdba93930a8 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/migration/MigrationStepFrom002To003.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/migration/MigrationStepFrom002To003.java
@@ -25,6 +25,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.sql.DataSource;
+
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcOperations;
@@ -38,25 +40,25 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.basic.dto.Occurrence;
 import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.basic.dto.OccurrenceUtil;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public class MigrationStepFrom002To003 extends MigrationStepAdapter
 {
     private static final long MB = 1024 * 1024;
+
     private static final Logger operationLog =
-        LogFactory.getLogger(LogCategory.OPERATION, MigrationStepFrom002To003.class);
-    
+            LogFactory.getLogger(LogCategory.OPERATION, MigrationStepFrom002To003.class);
+
     @Override
-    public void performPostMigration(SimpleJdbcTemplate simpleJdbcTemplate)
+    public void performPostMigration(SimpleJdbcTemplate simpleJdbcTemplate, DataSource dataSource)
             throws DataAccessException
     {
         List<Object[]> coverageValues = calculateCoverageValues(simpleJdbcTemplate);
         operationLog.info("update " + coverageValues.size() + " identified proteins");
-        simpleJdbcTemplate.batchUpdate("update identified_proteins set coverage = ? where id = ?", coverageValues);
+        simpleJdbcTemplate.batchUpdate("update identified_proteins set coverage = ? where id = ?",
+                coverageValues);
     }
-    
+
     private List<Object[]> calculateCoverageValues(SimpleJdbcTemplate simpleJdbcTemplate)
     {
         logMemory();
@@ -64,31 +66,31 @@ public class MigrationStepFrom002To003 extends MigrationStepAdapter
         final Map<Long, List<String>> peptides = getPeptides(jdbcOperations);
         logMemory();
         final List<Object[]> values = new ArrayList<Object[]>();
-        jdbcOperations.query(
-                "select ip.id, ip.prot_id, s.amino_acid_sequence " +
-                "from identified_proteins as ip " +
-                "join sequences as s on ip.sequ_id = s.id where coverage is null",
+        jdbcOperations.query("select ip.id, ip.prot_id, s.amino_acid_sequence "
+                + "from identified_proteins as ip "
+                + "join sequences as s on ip.sequ_id = s.id where coverage is null",
                 new ResultSetExtractor()
-                {
-                    public Object extractData(ResultSet rs) throws SQLException,
-                    DataAccessException
                     {
-                        while (rs.next())
+                        public Object extractData(ResultSet rs) throws SQLException,
+                                DataAccessException
                         {
-                            long id = rs.getLong(1);
-                            long proteinID = rs.getLong(2);
-                            String sequence = rs.getString(3);
-                            List<String> peptideSequences = peptides.get(proteinID);
-                            double coverage = calculateCoverage(sequence, peptideSequences);
-                            values.add(new Object[] { coverage, id });
+                            while (rs.next())
+                            {
+                                long id = rs.getLong(1);
+                                long proteinID = rs.getLong(2);
+                                String sequence = rs.getString(3);
+                                List<String> peptideSequences = peptides.get(proteinID);
+                                double coverage = calculateCoverage(sequence, peptideSequences);
+                                values.add(new Object[]
+                                    { coverage, id });
+                            }
+                            return null;
                         }
-                        return null;
-                    }
-                });
+                    });
         logMemory();
         return values;
     }
-    
+
     private Map<Long, List<String>> getPeptides(JdbcOperations jdbcOperations)
     {
         final Map<Long, List<String>> peptides = new HashMap<Long, List<String>>();
@@ -140,4 +142,3 @@ public class MigrationStepFrom002To003 extends MigrationStepAdapter
         operationLog.info(usedMemory + " MB used, " + runtime.totalMemory() / MB + " MB total");
     }
 }
-
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/migration/MigrationStepFrom004To005.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/migration/MigrationStepFrom004To005.java
index b8485a92861..8fadc0473a9 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/migration/MigrationStepFrom004To005.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/migration/MigrationStepFrom004To005.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.yeastx.db.migration;
 
+import javax.sql.DataSource;
+
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
@@ -25,8 +27,6 @@ import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.dbmigration.java.MigrationStepAdapter;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
 public class MigrationStepFrom004To005 extends MigrationStepAdapter
@@ -35,7 +35,7 @@ public class MigrationStepFrom004To005 extends MigrationStepAdapter
             LogFactory.getLogger(LogCategory.OPERATION, MigrationStepFrom004To005.class);
 
     @Override
-    public void performPostMigration(SimpleJdbcTemplate simpleJdbcTemplate)
+    public void performPostMigration(SimpleJdbcTemplate simpleJdbcTemplate, DataSource dataSource)
             throws DataAccessException
     {
         operationLog.warn("!!!!!!!! METABOL DATABASE MIGRATED WITH OUT MIGRATING TABLE MZ_PEAKS. "
@@ -43,5 +43,4 @@ public class MigrationStepFrom004To005 extends MigrationStepAdapter
                 + "Please, delete MZ_PEAKS manually if it no longer needed.");
     }
 
-    
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java
index 9bf19aec9c0..16f79dcb957 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java
@@ -20,7 +20,7 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IDatabaseVersionHolder;
 
 /**
  * Version holder for imaging database.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class ImagingDatabaseVersionHolder implements IDatabaseVersionHolder
@@ -28,7 +28,7 @@ public class ImagingDatabaseVersionHolder implements IDatabaseVersionHolder
 
     public String getDatabaseVersion()
     {
-        return "003"; // S83
+        return "004"; // changed in S86
     }
 
 }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/migration/MigrationStepFrom003To004.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/migration/MigrationStepFrom003To004.java
index 32244776695..9cbfd37fa08 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/migration/MigrationStepFrom003To004.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/migration/MigrationStepFrom003To004.java
@@ -25,6 +25,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.sql.DataSource;
+
+import net.lemnik.eodsql.QueryTool;
+
 import org.apache.log4j.Logger;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
@@ -44,7 +48,6 @@ import ch.systemsx.cisd.openbis.dss.etl.featurevector.CsvToCanonicalFeatureVecto
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.DatasetFileLines;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DatasetLocationUtil;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil;
-import ch.systemsx.cisd.openbis.dss.shared.DssScreeningUtils;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
 import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO;
 import ch.systemsx.cisd.utils.CsvFileReaderHelper;
@@ -58,8 +61,6 @@ import ch.systemsx.cisd.utils.CsvFileReaderHelper.ICsvFileReaderConfiguration;
  */
 public class MigrationStepFrom003To004 implements IMigrationStep
 {
-    private static final char DEFAULT_COLUMNS_SEPARATOR = ',';
-
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, MigrationStepFrom003To004.class);
 
@@ -119,8 +120,10 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         }
     }
 
-    public void performPostMigration(SimpleJdbcTemplate jdbc) throws DataAccessException
+    public void performPostMigration(SimpleJdbcTemplate jdbc, DataSource dataSource)
+            throws DataAccessException
     {
+        IImagingQueryDAO dao = QueryTool.getQuery(dataSource, IImagingQueryDAO.class);
         File storeRootDir = getStoreRootDir();
         String dbUUID = tryGetDatabaseInstanceUUID(storeRootDir);
         if (dbUUID == null)
@@ -131,52 +134,58 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         List<MigrationDatasetRef> datasets = fetchImagingDatasets(jdbc);
         Map<MigrationDatasetRef, DatasetFileLines> fileMap =
                 createFileMap(datasets, storeRootDir, dbUUID);
-        boolean ok = migrateDatasets(fileMap, jdbc);
+        boolean ok = migrateDatasets(fileMap, jdbc, dao);
+        dao.commit();
+        dao.close();
         if (ok == false)
         {
-            throw new EnvironmentFailureException("Feature vector migration failed!");
+            operationLog.warn("There were some error during feature vector migration!");
         }
     }
 
     private boolean migrateDatasets(Map<MigrationDatasetRef, DatasetFileLines> fileMap,
-            SimpleJdbcTemplate jdbc)
+            SimpleJdbcTemplate jdbc, IImagingQueryDAO dao)
     {
         boolean wholeMigrationOk = true;
         for (Entry<MigrationDatasetRef, DatasetFileLines> entry : fileMap.entrySet())
         {
             long datasetId = entry.getKey().getId();
+            String permId = entry.getKey().getPermId();
             DatasetFileLines featureVectorLines = entry.getValue();
             try
             {
-                migrateDataset(jdbc, datasetId, featureVectorLines);
+                operationLog.info("Migrating dataset: " + permId);
+                migrateDataset(jdbc, dao, datasetId, featureVectorLines);
             } catch (Exception ex)
             {
-                operationLog.error("Cannot migrate dataset " + entry.getKey().getPermId() + ": "
-                        + ex.getMessage());
+                operationLog.error("Cannot migrate dataset " + permId + ": " + ex.getMessage());
+                if (ex instanceof IllegalArgumentException == false)
+                {
+                    ex.printStackTrace();
+                }
                 wholeMigrationOk = false;
             }
         }
         return wholeMigrationOk;
     }
 
-    private void migrateDataset(SimpleJdbcTemplate jdbc, long datasetId,
+    private void migrateDataset(SimpleJdbcTemplate jdbc, IImagingQueryDAO dao, long datasetId,
             DatasetFileLines featureVectorLines)
     {
         List<CanonicalFeatureVector> fvecs = extractFeatureVectors(featureVectorLines);
-        deleteFeatureVectors(datasetId, jdbc);
-        uploadFeatureVectors(datasetId, fvecs);
-    }
-
-    private void deleteFeatureVectors(long datasetId, SimpleJdbcTemplate jdbc)
-    {
-        int deleted = jdbc.update("delete from feature_defs defs where defs.ds_id = ?", datasetId);
-        operationLog.info(String.format("%d features deleted for the dataset %d.", deleted,
-                datasetId));
+        int deleted = deleteFeatureVectors(datasetId, jdbc);
+        if (deleted != fvecs.size())
+        {
+            operationLog.error(String.format(
+                    "Dataset techId(%d) had %d features, but now it has %d.", datasetId, deleted,
+                    fvecs.size()));
+        }
+        uploadFeatureVectors(datasetId, fvecs, dao);
     }
 
-    private void uploadFeatureVectors(long datasetId, List<CanonicalFeatureVector> fvecs)
+    private void uploadFeatureVectors(long datasetId, List<CanonicalFeatureVector> fvecs,
+            IImagingQueryDAO dao)
     {
-        IImagingQueryDAO dao = DssScreeningUtils.createQuery();
         FeatureVectorUploader.uploadFeatureVectors(dao, fvecs, datasetId);
     }
 
@@ -187,24 +196,31 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         return new CsvToCanonicalFeatureVector(featureVectorLines, convertorConfig).convert();
     }
 
-    private static DatasetFileLines getDatasetFileLines(File file) throws IOException
+    private static DatasetFileLines getDatasetFileLines(File file, final char separator)
+            throws IOException
     {
         ICsvFileReaderConfiguration configuration = new DefaultCsvFileReaderConfiguration()
             {
                 @Override
                 public char getColumnDelimiter()
                 {
-                    return DEFAULT_COLUMNS_SEPARATOR;
+                    return separator;
                 }
             };
         return CsvFileReaderHelper.getDatasetFileLines(file, configuration);
     }
 
+    private int deleteFeatureVectors(long datasetId, SimpleJdbcTemplate jdbc)
+    {
+        return jdbc.update("delete from feature_defs defs where defs.ds_id = ?", datasetId);
+    }
+
     private List<MigrationDatasetRef> fetchImagingDatasets(SimpleJdbcTemplate simpleJdbcTemplate)
     {
-        return simpleJdbcTemplate.query(
-                "select id, perm_id from feature_defs defs, data_sets d where d.if = defs.ds_id",
-                DATASET_ROW_MAPPER);
+        return simpleJdbcTemplate
+                .query(
+                        "select distinct d.id, d.perm_id from feature_defs defs, data_sets d where d.id = defs.ds_id",
+                        DATASET_ROW_MAPPER);
     }
 
     private String tryGetDatabaseInstanceUUID(File storeRootDir)
@@ -244,13 +260,18 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         File[] datasetFiles = origDir.listFiles();
         if (datasetFiles == null || datasetFiles.length == 0)
         {
+            operationLog.warn("Empty dataset dir: " + datasetDir);
             return null;
         }
 
         for (File datasetFile : datasetFiles)
         {
-            DatasetFileLines fileLines = tryReadFeatureVectors(datasetFile);
-            if (fileLines != null)
+            DatasetFileLines fileLines = tryReadFeatureVectors(datasetFile, ',');
+            if (fileLines == null || fileLines.getHeaderTokens().length <= 2)
+            {
+                fileLines = tryReadFeatureVectors(datasetFile, ';');
+            }
+            if (fileLines != null && fileLines.getHeaderTokens().length > 2)
             {
                 return fileLines;
             }
@@ -258,15 +279,15 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         throw new EnvironmentFailureException(
                 "Cannot find the file with feature vectors for the dataset. "
                         + "Delete this dataset from openBIS and restart the server to perform migration again. Dataset: "
-                        + datasetDir.getName() + ". Diretcory: " + datasetDir);
+                        + datasetDir.getName() + ". Directory: " + datasetDir);
     }
 
-    private static DatasetFileLines tryReadFeatureVectors(File datasetFile)
+    private static DatasetFileLines tryReadFeatureVectors(File datasetFile, char separator)
     {
         try
         {
-            return getDatasetFileLines(datasetFile);
-        } catch (IOException ex)
+            return getDatasetFileLines(datasetFile, separator);
+        } catch (Exception ex)
         {
             operationLog.warn("Cannot read the file or file has the wrong format: " + datasetFile
                     + ": " + ex.getMessage());
@@ -274,7 +295,7 @@ public class MigrationStepFrom003To004 implements IMigrationStep
         }
     }
 
-    public void performPreMigration(SimpleJdbcTemplate simpleJdbcTemplate)
+    public void performPreMigration(SimpleJdbcTemplate simpleJdbcTemplate, DataSource dataSource)
             throws DataAccessException
     {
         // do nothing
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorUploader.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorUploader.java
index bd1bfa7df6b..93a7ac8d55f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorUploader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/featurevector/FeatureVectorUploader.java
@@ -41,7 +41,10 @@ public class FeatureVectorUploader
         this.info = info;
     }
 
-    /** creates a dataset and uploads feature vectors, creates experiment and container if needed */
+    /**
+     * Creates a dataset and uploads feature vectors, creates experiment and container if needed.
+     * Commit on the dao is NOT performed.
+     */
     public void uploadFeatureVectors(List<CanonicalFeatureVector> fvecs)
     {
         ScreeningContainerDatasetInfoHelper helper = new ScreeningContainerDatasetInfoHelper(dao);
@@ -51,7 +54,7 @@ public class FeatureVectorUploader
         uploadFeatureVectors(dao, fvecs, dataSetId);
     }
 
-    /** uploads feature vectors for a given dataset id */
+    /** Uploads feature vectors for a given dataset id. Commit on the dao is NOT performed. */
     public static void uploadFeatureVectors(IImagingQueryDAO dao,
             List<CanonicalFeatureVector> fvecs, long dataSetId)
     {
-- 
GitLab