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