From d7bd34e06f60453b7ce8a85fac91983ef3c770b3 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Wed, 18 Nov 2009 08:51:24 +0000 Subject: [PATCH] [LMS-1263] enriched samples connected to tracked datasets SVN: 13441 --- .../generic/server/TrackingServer.java | 60 ++++++++++++++++--- .../generic/shared/ITrackingServer.java | 2 +- .../openbis/generic/OpenbisClientTest.java | 7 ++- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java index c6a9146e7bf..a3324303257 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java @@ -16,7 +16,10 @@ package ch.systemsx.cisd.openbis.generic.server; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import ch.systemsx.cisd.authentication.ISessionManager; import ch.systemsx.cisd.openbis.generic.server.business.bo.ICommonBusinessObjectFactory; @@ -65,22 +68,65 @@ public final class TrackingServer extends AbstractServer<ITrackingServer> implem // ITrackingServer // - public List<ExternalData> listDataSets(String sessionToken, TrackingDataSetCriteria criteria) + public List<Sample> listSamples(String sessionToken, TrackingSampleCriteria criteria) { final Session session = getSession(sessionToken); - final IDatasetLister datasetLister = - businessObjectFactory.createDatasetLister(session, getDataStoreBaseURL()); - return datasetLister.listByTrackingCriteria(criteria); + final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session); + final ListOrSearchSampleCriteria listerCriteria = new ListOrSearchSampleCriteria(criteria); + listerCriteria.setEnrichDependentSamplesWithProperties(true); + return sampleLister.list(listerCriteria); } - public List<Sample> listSamples(String sessionToken, TrackingSampleCriteria criteria) + public List<ExternalData> listDataSets(String sessionToken, TrackingDataSetCriteria criteria) { final Session session = getSession(sessionToken); + // retrieve data sets connected to samples of type specified in criteria + // (these samples don't have properties loaded but ids are loaded) + final IDatasetLister datasetLister = + businessObjectFactory.createDatasetLister(session, getDataStoreBaseURL()); + final List<ExternalData> dataSets = datasetLister.listByTrackingCriteria(criteria); + // retrieve samples enriched with their dependent samples and properties + // (drawback - samples directly connected to data sets are retrieved twice) final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session); - final ListOrSearchSampleCriteria listerCriteria = new ListOrSearchSampleCriteria(criteria); + final ListOrSearchSampleCriteria listerCriteria = + new ListOrSearchSampleCriteria(extractConnectedSampleIds(dataSets)); listerCriteria.setEnrichDependentSamplesWithProperties(true); - return sampleLister.list(listerCriteria); + final List<Sample> enrichedSamples = sampleLister.list(listerCriteria); + // replace data set samples with enriched ones + replaceConnectedSamples(dataSets, enrichedSamples); + return dataSets; + } + + private List<Long> extractConnectedSampleIds(List<ExternalData> dataSets) + { + final List<Long> sampleIds = new ArrayList<Long>(); + for (ExternalData dataSet : dataSets) + { + assert dataSet.getSample() != null : "data set is not connected to a sample"; + sampleIds.add(dataSet.getSample().getId()); + } + return sampleIds; } + + private void replaceConnectedSamples(List<ExternalData> dataSets, List<Sample> enrichedSamples) + { + // list orders are not the same - map is needed for quick search + // <sample id, sample> + final Map<Long, Sample> enrichedSamplesMap = + new HashMap<Long, Sample>(enrichedSamples.size()); + for (Sample sample : enrichedSamples) + { + enrichedSamplesMap.put(sample.getId(), sample); + } + + for (ExternalData dataSet : dataSets) + { + final Sample enrichedSample = enrichedSamplesMap.get(dataSet.getSample().getId()); + assert enrichedSample != null; + dataSet.setSample(enrichedSample); + } + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ITrackingServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ITrackingServer.java index daa92d1625c..823fc721c5c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ITrackingServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ITrackingServer.java @@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingSampleCriteria; /** - * Definition of the client-server interface. + * Definition of the client-server interface for tracking creation of samples and datasets. * * @author Piotr Buczek */ diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/OpenbisClientTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/OpenbisClientTest.java index 42c3b79fae0..5e3adc14e50 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/OpenbisClientTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/OpenbisClientTest.java @@ -104,7 +104,7 @@ public class OpenbisClientTest final String sampleTypeCode = "CELL_PLATE"; final int lastSeenSampleId = 1000; // compare with 0 - final int lastSeenDataSetId = 3; // compare with 0 + final int lastSeenDataSetId = 0; // compare with 3 final TrackingSampleCriteria sampleCriteria = new TrackingSampleCriteria(sampleTypeCode, lastSeenSampleId); @@ -202,10 +202,11 @@ public class OpenbisClientTest builder.append(" type", dataSet.getDataSetType()); builder.append(" properties", toString(dataSet.getProperties())); sb.append(builder.toString()); - final String indent = INDENT; if (dataSet.getSample() != null) { - sb.append("\n" + indent + toString(dataSet.getSample())); + final String indent = INDENT; + final String newIndent = indent + INDENT; + sb.append("\n" + indent + toString(dataSet.getSample(), newIndent)); } return sb.toString(); } -- GitLab