From aa0597f4a9c25c8d177fea46538a591a86ff9d83 Mon Sep 17 00:00:00 2001
From: tpylak <tpylak>
Date: Mon, 10 May 2010 13:02:38 +0000
Subject: [PATCH] LMS-1529 separate generic exp/sample/dataset DTOs in yeastx

SVN: 15871
---
 .../cisd/yeastx/db/AbstractDatasetLoader.java |   5 +-
 .../ch/systemsx/cisd/yeastx/db/DBUtils.java   |  77 --------------
 .../cisd/yeastx/db/IDatasetLoader.java        |   2 +
 .../yeastx/db/{ => generic}/DMDataSetDTO.java |   8 +-
 .../db/{ => generic}/DMExperimentDTO.java     |   5 +-
 .../yeastx/db/{ => generic}/DMSampleDTO.java  |   5 +-
 .../cisd/yeastx/db/generic/GenericUtils.java  | 100 ++++++++++++++++++
 .../yeastx/db/{ => generic}/IGenericDAO.java  |   3 +-
 .../cisd/yeastx/eicml/EICML2Database.java     |   2 +-
 .../cisd/yeastx/eicml/IEICMSRunDAO.java       |   2 +-
 .../cisd/yeastx/etl/ML2DatabaseUploader.java  |   2 +-
 .../cisd/yeastx/etl/MLArchiverTask.java       |   2 +-
 .../cisd/yeastx/fiaml/FIAML2Database.java     |   2 +-
 .../cisd/yeastx/fiaml/IFIAMSRunDAO.java       |   2 +-
 .../systemsx/cisd/yeastx/mzxml/IMzXmlDAO.java |   4 +-
 .../cisd/yeastx/mzxml/MzXml2Database.java     |   2 +-
 .../cisd/yeastx/quant/IQuantMSDAO.java        |   2 +-
 .../cisd/yeastx/quant/QuantML2Database.java   |   2 +-
 .../systemsx/cisd/yeastx/eicml/EICMLTest.java |   2 +-
 .../systemsx/cisd/yeastx/fiaml/FIAMLTest.java |   7 +-
 .../cisd/yeastx/mzxml/MzXml2DatabaseTest.java |   2 +-
 .../cisd/yeastx/mzxml/MzXmlDAOTest.java       |   2 +-
 .../cisd/yeastx/quant/QuantMSDAOTest.java     |   2 +-
 23 files changed, 136 insertions(+), 106 deletions(-)
 rename rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/{ => generic}/DMDataSetDTO.java (95%)
 rename rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/{ => generic}/DMExperimentDTO.java (92%)
 rename rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/{ => generic}/DMSampleDTO.java (94%)
 create mode 100644 rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/GenericUtils.java
 rename rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/{ => generic}/IGenericDAO.java (98%)

diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java
index da604dc960e..ce76f575497 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java
@@ -21,6 +21,9 @@ import javax.sql.DataSource;
 import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.GenericUtils;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 
 /**
  * Abstract class for dataset loaders. Provides commit and rollback functionality and creation of
@@ -73,7 +76,7 @@ abstract public class AbstractDatasetLoader<T extends IGenericDAO> implements ID
             throw new IllegalStateException(
                     "The previous transaction of uploading a dataset has been neither commited nor rollbacked.");
         }
-        DBUtils.createDataSet(getDao(), dataSet);
+        GenericUtils.createDataSet(getDao(), dataSet);
         isTransactionCompleted = false;
     }
 
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBUtils.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBUtils.java
index 1c7b4a06d4e..598bc408135 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBUtils.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBUtils.java
@@ -71,81 +71,4 @@ public class DBUtils
         }
     }
 
-    /**
-     * Creates the data set based on the information given in <var>dataSet</var>. The sample and
-     * experiment of the data set may already exist in the database. If they don't, they are created
-     * as well.<br>
-     * Sets sample, experiment and dataset id fields of the specified dataset.
-     * <p>
-     * NOTE: Code responsible for trying to get sample and experiment from the DB and creating them
-     * if they don't exist is in synchronized block and uses currently opened transaction. Then the
-     * transaction is closed and data set is added to the DB in second transaction. If second
-     * transaction will be rolled back sample and experiment created in first transaction will stay
-     * in the DB.
-     */
-    public static void createDataSet(IGenericDAO dao, DMDataSetDTO dataSet)
-    {
-        synchronized (IGenericDAO.class)
-        {
-            DMExperimentDTO experiment = getOrCreateExperiment(dao, dataSet);
-            dataSet.setExperimentId(experiment.getId()); // make sure all the ids are set correctly.
-
-            if (dataSet.getSample() != null)
-            {
-                String permId = dataSet.getSample().getPermId();
-                DMSampleDTO sample;
-                // it may have happened that the sample has been created by another thread after
-                // we checked that it does not exist
-
-                sample = dao.getSampleByPermId(permId);
-                if (sample == null)
-                {
-                    sample = dataSet.getSample();
-                    sample.setExperiment(experiment);
-                    sample = createSample(dao, sample, permId);
-                }
-
-                sample.setExperiment(experiment);
-                dataSet.setSample(sample); // make sure all the ids are set correctly.
-            }
-            dao.close(true);
-        }
-
-        long dataSetId = dao.addDataSet(dataSet);
-        dataSet.setId(dataSetId);
-    }
-
-    private static DMSampleDTO createSample(IGenericDAO dao, DMSampleDTO sample, String samplePermId)
-    {
-        final long sampleId = dao.addSample(sample);
-        sample.setId(sampleId);
-        return sample;
-    }
-
-    private static DMExperimentDTO getOrCreateExperiment(IGenericDAO dao, DMDataSetDTO dataSet)
-    {
-        String permId = dataSet.getExperiment().getPermId();
-        // it may have happened that the experiment has been created by another thread after
-        // we checked that it does not exist
-        synchronized (IGenericDAO.class)
-        {
-            DMExperimentDTO experiment = dao.getExperimentByPermId(permId);
-            if (experiment == null)
-            {
-                experiment = createExperiment(dao, dataSet, permId);
-            }
-            return experiment;
-        }
-    }
-
-    private static DMExperimentDTO createExperiment(IGenericDAO dao, DMDataSetDTO dataSet,
-            String permId)
-    {
-        DMExperimentDTO experiment;
-        experiment = dataSet.getExperiment();
-        long experimentId = dao.addExperiment(experiment);
-        experiment.setId(experimentId);
-        return experiment;
-    }
-
 }
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IDatasetLoader.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IDatasetLoader.java
index 1e1fd4d9edf..799c49eae91 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IDatasetLoader.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IDatasetLoader.java
@@ -19,6 +19,8 @@ package ch.systemsx.cisd.yeastx.db;
 import java.io.File;
 import java.sql.SQLException;
 
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
+
 /**
  * @author Tomasz Pylak
  */
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMDataSetDTO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMDataSetDTO.java
similarity index 95%
rename from rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMDataSetDTO.java
rename to rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMDataSetDTO.java
index dfb88d75743..777097b59c2 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMDataSetDTO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMDataSetDTO.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.yeastx.db;
+package ch.systemsx.cisd.yeastx.db.generic;
 
 import net.lemnik.eodsql.AutoGeneratedKeys;
 import net.lemnik.eodsql.ResultColumn;
@@ -53,11 +53,13 @@ public class DMDataSetDTO
             String expePermId, String expeName)
     {
         this.permId = dsPermId;
-        final DMExperimentDTO experiment = new DMExperimentDTO(expePermId, expeName);
+        final DMExperimentDTO experiment = new DMExperimentDTO(expePermId);
+        experiment.setName(expeName);
         if (sampPermIdOrNull != null)
         {
             assert sampNameOrNull != null : "sample name must be given when sample permId is given";
-            this.sampleOrNull = new DMSampleDTO(sampPermIdOrNull, sampNameOrNull);
+            this.sampleOrNull = new DMSampleDTO(sampPermIdOrNull);
+            sampleOrNull.setName(sampNameOrNull);
             sampleOrNull.setExperiment(experiment);
         } else
         {
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMExperimentDTO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMExperimentDTO.java
similarity index 92%
rename from rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMExperimentDTO.java
rename to rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMExperimentDTO.java
index 3df4cd07c45..340c4206540 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMExperimentDTO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMExperimentDTO.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.yeastx.db;
+package ch.systemsx.cisd.yeastx.db.generic;
 
 import net.lemnik.eodsql.AutoGeneratedKeys;
 import net.lemnik.eodsql.ResultColumn;
@@ -39,10 +39,9 @@ public class DMExperimentDTO
         // Bean compatibility.
     }
     
-    public DMExperimentDTO(String permId, String name)
+    public DMExperimentDTO(String permId)
     {
         this.permId = permId;
-        this.name = name;
     }
     
     public long getId()
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMSampleDTO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMSampleDTO.java
similarity index 94%
rename from rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMSampleDTO.java
rename to rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMSampleDTO.java
index e44efaa844d..25894dc005e 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DMSampleDTO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/DMSampleDTO.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.yeastx.db;
+package ch.systemsx.cisd.yeastx.db.generic;
 
 import net.lemnik.eodsql.AutoGeneratedKeys;
 import net.lemnik.eodsql.ResultColumn;
@@ -45,10 +45,9 @@ public class DMSampleDTO
         // Bean compatibility.
     }
     
-    public DMSampleDTO(String permId, String name)
+    public DMSampleDTO(String permId)
     {
         this.permId = permId;
-        this.name = name;
     }
 
     public long getId()
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/GenericUtils.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/GenericUtils.java
new file mode 100644
index 00000000000..0ead41406fc
--- /dev/null
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/GenericUtils.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.yeastx.db.generic;
+
+/**
+ * @author Tomasz Pylak
+ */
+public class GenericUtils
+{
+    /**
+     * Creates the data set based on the information given in <var>dataSet</var>. The sample and
+     * experiment of the data set may already exist in the database. If they don't, they are created
+     * as well.<br>
+     * Sets sample, experiment and dataset id fields of the specified dataset.
+     * <p>
+     * NOTE: Code responsible for trying to get sample and experiment from the DB and creating them
+     * if they don't exist is in synchronized block and uses currently opened transaction. Then the
+     * transaction is closed and data set is added to the DB in second transaction. If second
+     * transaction will be rolled back sample and experiment created in first transaction will stay
+     * in the DB.
+     */
+    public static void createDataSet(IGenericDAO dao, DMDataSetDTO dataSet)
+    {
+        synchronized (IGenericDAO.class)
+        {
+            DMExperimentDTO experiment = getOrCreateExperiment(dao, dataSet);
+            dataSet.setExperimentId(experiment.getId()); // make sure all the ids are set correctly.
+
+            if (dataSet.getSample() != null)
+            {
+                String permId = dataSet.getSample().getPermId();
+                DMSampleDTO sample;
+                // it may have happened that the sample has been created by another thread after
+                // we checked that it does not exist
+
+                sample = dao.getSampleByPermId(permId);
+                if (sample == null)
+                {
+                    sample = dataSet.getSample();
+                    sample.setExperiment(experiment);
+                    sample = createSample(dao, sample, permId);
+                }
+
+                sample.setExperiment(experiment);
+                dataSet.setSample(sample); // make sure all the ids are set correctly.
+            }
+            dao.close(true);
+        }
+
+        long dataSetId = dao.addDataSet(dataSet);
+        dataSet.setId(dataSetId);
+    }
+
+    private static DMSampleDTO createSample(IGenericDAO dao, DMSampleDTO sample, String samplePermId)
+    {
+        final long sampleId = dao.addSample(sample);
+        sample.setId(sampleId);
+        return sample;
+    }
+
+    private static DMExperimentDTO getOrCreateExperiment(IGenericDAO dao, DMDataSetDTO dataSet)
+    {
+        String permId = dataSet.getExperiment().getPermId();
+        // it may have happened that the experiment has been created by another thread after
+        // we checked that it does not exist
+        synchronized (IGenericDAO.class)
+        {
+            DMExperimentDTO experiment = dao.getExperimentByPermId(permId);
+            if (experiment == null)
+            {
+                experiment = createExperiment(dao, dataSet, permId);
+            }
+            return experiment;
+        }
+    }
+
+    private static DMExperimentDTO createExperiment(IGenericDAO dao, DMDataSetDTO dataSet,
+            String permId)
+    {
+        DMExperimentDTO experiment;
+        experiment = dataSet.getExperiment();
+        long experimentId = dao.addExperiment(experiment);
+        experiment.setId(experimentId);
+        return experiment;
+    }
+}
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IGenericDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/IGenericDAO.java
similarity index 98%
rename from rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IGenericDAO.java
rename to rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/IGenericDAO.java
index 8e03104e266..63528310ea9 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/IGenericDAO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/generic/IGenericDAO.java
@@ -14,10 +14,11 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.yeastx.db;
+package ch.systemsx.cisd.yeastx.db.generic;
 
 import java.util.List;
 
+
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.TransactionQuery;
 import net.lemnik.eodsql.Update;
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java
index 86441c7123f..8d6eb6166de 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java
@@ -23,7 +23,7 @@ import java.util.List;
 import javax.sql.DataSource;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IChromatogramObserver;
 import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IMSRunObserver;
 
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java
index 7374352a384..d20462cee5d 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java
@@ -20,7 +20,7 @@ import net.lemnik.eodsql.DataIterator;
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.Update;
 
-import ch.systemsx.cisd.yeastx.db.IGenericDAO;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 
 /**
  * Interface for querying / updating the metabol database.
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/ML2DatabaseUploader.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/ML2DatabaseUploader.java
index f3debfcbac1..45216aa01a2 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/ML2DatabaseUploader.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/ML2DatabaseUploader.java
@@ -32,8 +32,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.db.IDatasetLoader;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.eicml.EICML2Database;
 import ch.systemsx.cisd.yeastx.fiaml.FIAML2Database;
 import ch.systemsx.cisd.yeastx.mzxml.MzXml2Database;
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
index 7a0e3a8c3f4..fded06e24dd 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java
@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
 import ch.systemsx.cisd.yeastx.db.DBUtils;
-import ch.systemsx.cisd.yeastx.db.IGenericDAO;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 
 /**
  * Archiver that removes/adds data related to given data set from/to metabol database.
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java
index 79246af8086..a98aa196162 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java
@@ -23,7 +23,7 @@ import java.util.Iterator;
 import javax.sql.DataSource;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.fiaml.FIAMLParser.IMSRunObserver;
 
 /**
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java
index 26c302eea00..93831612b50 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java
@@ -20,7 +20,7 @@ import net.lemnik.eodsql.DataIterator;
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.Update;
 
-import ch.systemsx.cisd.yeastx.db.IGenericDAO;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 
 /**
  * Interface for querying / updating the metabol database.
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/IMzXmlDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/IMzXmlDAO.java
index 74809ffcc21..8d8e2e8ebac 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/IMzXmlDAO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/IMzXmlDAO.java
@@ -19,8 +19,8 @@ package ch.systemsx.cisd.yeastx.mzxml;
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.Update;
 
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
-import ch.systemsx.cisd.yeastx.db.IGenericDAO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzInstrumentDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzPrecursorDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzScanDTO;
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java
index 773f3870a3f..9af38d4413e 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java
@@ -27,7 +27,7 @@ import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.NotImplementedException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzPrecursorDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzRunDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzScanDTO;
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/IQuantMSDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/IQuantMSDAO.java
index e03ddcf1fe0..522a5e2305c 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/IQuantMSDAO.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/IQuantMSDAO.java
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.yeastx.quant;
 import net.lemnik.eodsql.Select;
 import net.lemnik.eodsql.Update;
 
-import ch.systemsx.cisd.yeastx.db.IGenericDAO;
+import ch.systemsx.cisd.yeastx.db.generic.IGenericDAO;
 import ch.systemsx.cisd.yeastx.quant.dto.MSConcentrationDTO;
 import ch.systemsx.cisd.yeastx.quant.dto.MSQuantificationDTO;
 
diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java
index fda48a38ce4..ac6b783778b 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java
@@ -23,7 +23,7 @@ import java.util.List;
 import javax.sql.DataSource;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.quant.dto.ConcentrationCompounds;
 import ch.systemsx.cisd.yeastx.quant.dto.MSConcentrationDTO;
 import ch.systemsx.cisd.yeastx.quant.dto.MSQuantificationDTO;
diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/EICMLTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/EICMLTest.java
index 3e6af129b79..fbae0e68946 100644
--- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/EICMLTest.java
+++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/EICMLTest.java
@@ -32,7 +32,7 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDBTest;
 import ch.systemsx.cisd.yeastx.db.DBUtils;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 
 /**
  * A test for thhe eicML tables.
diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/fiaml/FIAMLTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/fiaml/FIAMLTest.java
index 559d1231625..7f53610483a 100644
--- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/fiaml/FIAMLTest.java
+++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/fiaml/FIAMLTest.java
@@ -31,7 +31,8 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDBTest;
 import ch.systemsx.cisd.yeastx.db.DBUtils;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.GenericUtils;
 
 /**
  * A test for the fiaML tables.
@@ -114,10 +115,10 @@ public class FIAMLTest extends AbstractDBTest
     {
         try
         {
-            DBUtils.createDataSet(fiamsDAO, new DMDataSetDTO("data set perm id 4",
+            GenericUtils.createDataSet(fiamsDAO, new DMDataSetDTO("data set perm id 4",
                     "sample perm id4", "sample name", "experiment perm id", "experiment name"));
             // This will fail with a DataIntegrityViolationException.
-            DBUtils.createDataSet(fiamsDAO, new DMDataSetDTO("data set perm id 4",
+            GenericUtils.createDataSet(fiamsDAO, new DMDataSetDTO("data set perm id 4",
                     "sample perm id4", "sample name", "experiment perm id", "experiment name"));
             // There is transaction commit inside createDataSet method before DS is added to DB.
             // DS created in first invocation will be be commited in second invocation.
diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java
index 6837a6cf9c7..6b6f24028c9 100644
--- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java
+++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java
@@ -30,7 +30,7 @@ import org.testng.annotations.Test;
 import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.base.convert.NativeData;
 import ch.systemsx.cisd.base.convert.NativeData.ByteOrder;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzInstrumentDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzPeaksDTO;
 import ch.systemsx.cisd.yeastx.mzxml.dto.MzPrecursorDTO;
diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXmlDAOTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXmlDAOTest.java
index d3f6c0b3cd1..1a6ce0bad34 100644
--- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXmlDAOTest.java
+++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXmlDAOTest.java
@@ -25,7 +25,7 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDBTest;
 import ch.systemsx.cisd.yeastx.db.DBUtils;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 
 /**
  * @author Tomasz Pylak
diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/quant/QuantMSDAOTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/quant/QuantMSDAOTest.java
index 7ef67e5b061..469b1ff9d89 100644
--- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/quant/QuantMSDAOTest.java
+++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/quant/QuantMSDAOTest.java
@@ -25,7 +25,7 @@ import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.yeastx.db.AbstractDBTest;
 import ch.systemsx.cisd.yeastx.db.DBUtils;
-import ch.systemsx.cisd.yeastx.db.DMDataSetDTO;
+import ch.systemsx.cisd.yeastx.db.generic.DMDataSetDTO;
 
 /**
  * @author Tomasz Pylak
-- 
GitLab