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