From 32c5794435c668bf8e1a5a044722c4fe7ef60ee3 Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Fri, 22 Mar 2013 14:43:45 +0000
Subject: [PATCH] SOB-114 BIS-373 SP-572 Improve performance of plate view

SVN: 28675
---
 .../server/business/bo/DataSetTable.java      |  9 +++++++++
 .../server/business/bo/IDataSetTable.java     |  6 ++++++
 .../generic/server/dataaccess/IDataDAO.java   |  9 +++++++++
 .../generic/server/dataaccess/db/DataDAO.java | 19 +++++++++++++++++++
 4 files changed, 43 insertions(+)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index f4a8cdde3ec..deaba0aa3ac 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -281,6 +281,15 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
         dataSets.addAll(getDataDAO().listDataSets(sample));
     }
 
+    @Override
+    public final void loadBySampleTechIdWithoutRelationships(final TechId sampleId)
+    {
+        assert sampleId != null : "Unspecified sample id";
+        final SamplePE sample = getSampleDAO().getByTechId(sampleId);
+        dataSets = new ArrayList<DataPE>();
+        dataSets.addAll(getDataDAO().listDataSetsWithoutRelationships(sample));
+    }
+
     @Override
     public void loadByExperimentTechId(final TechId experimentId)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
index d42922fcc8a..f61470a941a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IDataSetTable.java
@@ -53,6 +53,12 @@ public interface IDataSetTable
      */
     void loadBySampleTechId(final TechId sampleId);
 
+    /**
+     * Loads data sets which are linked to the sample with given <var>sampleId</var>. Datasets
+     * doesn't include relationships or properties.
+     */
+    void loadBySampleTechIdWithoutRelationships(final TechId sampleId);
+
     /**
      * Loads data sets which are linked to the experiment with given <var>experimentId</var>.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
index 6f44ba178c8..cce2e548b36 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDataDAO.java
@@ -63,6 +63,15 @@ public interface IDataDAO extends IGenericDAO<DataPE>
      */
     public List<DataPE> listDataSets(final SamplePE sample) throws DataAccessException;
 
+    /**
+     * List the {@link DataPE} for given <var>sample</var>. The datasets are fetched without the
+     * additional relationships or properties.
+     * 
+     * @returns list of {@link DataPE}s that are related to given {@link SamplePE}.
+     */
+    public List<DataPE> listDataSetsWithoutRelationships(final SamplePE sample)
+            throws DataAccessException;
+
     /**
      * List the {@link DataPE} for given <var>experiment</var>.
      * 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
index 0869b8fc13d..b646075da82 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
@@ -181,6 +181,25 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple
         return results;
     }
 
+    @Override
+    public final List<DataPE> listDataSetsWithoutRelationships(final SamplePE sample)
+            throws DataAccessException
+    {
+        assert sample != null : "Unspecified sample.";
+
+        final String query = String.format("from %s e where e.sampleInternal = ?", TABLE_NAME);
+        final List<DataPE> list = cast(getHibernateTemplate().find(query, toArray(sample)));
+
+        // distinct does not work properly in HQL for left joins
+        distinct(list);
+        if (operationLog.isDebugEnabled())
+        {
+            operationLog.debug(String.format("%d external data have been found for [sample=%s].",
+                    list.size(), sample));
+        }
+        return list;
+    }
+
     @Override
     public final List<DataPE> listDataSets(final SamplePE sample) throws DataAccessException
     {
-- 
GitLab