From 5d1c9610e1b7670c99634b1abd1f675416c9a5ab Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 7 Feb 2011 14:27:07 +0000 Subject: [PATCH] LMS-1995 listByDatasetCodes() added to IDatasetLister, implemented and tested. SVN: 19796 --- .../bo/datasetlister/DatasetLister.java | 7 +++++ .../bo/datasetlister/IDatasetLister.java | 7 ++++- .../datasetlister/IDatasetListingQuery.java | 9 ++++++ .../bo/datasetlister/DatasetListerTest.java | 28 +++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java index 43e428643d1..36e1c6c7d9e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java @@ -325,6 +325,13 @@ public class DatasetLister extends AbstractLister implements IDatasetLister return enrichDatasets(query.getDatasets(new LongOpenHashSet(datasetIds))); } + public List<ExternalData> listByDatasetCodes(Collection<String> datasetCodes) + { + String[] codes = datasetCodes.toArray(new String[datasetCodes.size()]); + DataIterator<DatasetRecord> datasets = query.getDatasets(codes); + return asList(createPrimaryDatasets(asList(datasets))); + } + public List<ExternalData> listByTrackingCriteria(TrackingDataSetCriteria criteria) { Long sampleTypeId = diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java index 08583f96e07..9a9c2c22aaa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetLister.java @@ -70,9 +70,14 @@ public interface IDatasetLister Map<Sample, List<ExternalData>> listAllDataSetsFor(List<Sample> samples); // + /** + * Lists all data sets with specified codes. Unenriched data sets will be returned. + */ + List<ExternalData> listByDatasetCodes(Collection<String> datasetCodes); + /** @return datasets with given ids */ List<ExternalData> listByDatasetIds(Collection<Long> datasetIds); - + /** @return datasets specified by given criteria */ List<ExternalData> listByTrackingCriteria(TrackingDataSetCriteria criteria); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java index 499f1286790..f257f7b4f1c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister; import it.unimi.dsi.fastutil.longs.LongSet; import java.util.Date; +import java.util.List; import net.lemnik.eodsql.DataIterator; import net.lemnik.eodsql.Select; @@ -32,6 +33,8 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.common.IPropertyListi import ch.systemsx.cisd.openbis.generic.server.business.bo.common.MaterialEntityPropertyRecord; import ch.systemsx.cisd.openbis.generic.server.business.bo.common.VocabularyTermRecord; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.LongSetMapper; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.StringArrayMapper; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; /** * A {@link TransactionQuery} interface for obtaining large sets of dataset-related entities from @@ -171,6 +174,11 @@ public interface IDatasetListingQuery extends TransactionQuery, IPropertyListing { LongSetMapper.class }, fetchSize = FETCH_SIZE) public DataIterator<DatasetRecord> getDatasets(LongSet entityIds); + @Select(sql = "select * from data join external_data on data.id = external_data.data_id where data.code = any(?{1})", parameterBindings = + { StringArrayMapper.class }, fetchSize = FETCH_SIZE) + public DataIterator<DatasetRecord> getDatasets(String[] datasetCodes); + + /** * Returns the children dataset ids of the specified datasets. */ @@ -224,4 +232,5 @@ public interface IDatasetListingQuery extends TransactionQuery, IPropertyListing public DataIterator<MaterialEntityPropertyRecord> getEntityPropertyMaterialValues( LongSet entityIds); + } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java index fdf63680ab2..9332ce7a94e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java @@ -26,6 +26,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -165,6 +166,33 @@ public class DatasetListerTest extends AbstractDAOTest assertSameDataSetsForSameCode(dataSetsByCode, rootDataSets); } } + + @Test + public void testListDataSetsByCode() + { + List<ExternalData> dataSets = + lister.listByDatasetCodes(Arrays.asList("20081105092158673-1", "blabla", + "20081105092159188-3")); + + Collections.sort(dataSets, new Comparator<ExternalData>() + { + public int compare(ExternalData o1, ExternalData o2) + { + return (int) (o1.getId() - o2.getId()); + } + }); + assertEquals(2L, dataSets.get(0).getId().longValue()); + assertEquals("20081105092158673-1", dataSets.get(0).getCode()); + assertEquals("42", dataSets.get(0).getShareId()); + assertEquals("xxx/yyy/zzz", dataSets.get(0).getLocation()); + assertEquals(4711L, dataSets.get(0).getSize().longValue()); + assertEquals(4L, dataSets.get(1).getId().longValue()); + assertEquals("20081105092159188-3", dataSets.get(1).getCode()); + assertEquals(null, dataSets.get(1).getShareId()); + assertEquals("analysis/result", dataSets.get(1).getLocation()); + assertEquals(null, dataSets.get(1).getSize()); + assertEquals(2, dataSets.size()); + } private void assertSameDataSetsForSameCode(Map<String, ExternalData> dataSetsByCode, List<ExternalData> dataSets) -- GitLab