Skip to content
Snippets Groups Projects
Commit 5d1c9610 authored by felmer's avatar felmer
Browse files

LMS-1995 listByDatasetCodes() added to IDatasetLister, implemented and tested.

SVN: 19796
parent d29bdaed
No related branches found
No related tags found
No related merge requests found
......@@ -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 =
......
......@@ -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);
......
......@@ -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);
}
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment