From e425997234bec5df48094adba06b0f7a97d4e7f6 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 6 Oct 2010 08:57:28 +0000
Subject: [PATCH] improve performance of gathering parent samples

SVN: 18166
---
 .../server/business/SampleProvider.java        | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleProvider.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleProvider.java
index 85ab7e45ebb..fb0e3ddca45 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleProvider.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleProvider.java
@@ -17,8 +17,10 @@
 package ch.systemsx.cisd.openbis.plugin.phosphonetx.server.business;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister;
@@ -59,15 +61,21 @@ class SampleProvider implements ISampleProvider
             ListOrSearchSampleCriteria criteria)
     {
         List<Sample> list = lister.list(criteria);
+        Set<Long> sampleIDs = new HashSet<Long>();
         for (Sample sample : list)
         {
             samplesByPermIDs.put(sample.getPermId(), sample);
-            ListSampleCriteria criteria2 =
-                    ListSampleCriteria.createForChild(new TechId(sample.getId()));
-            ListOrSearchSampleCriteria criteria3 = new ListOrSearchSampleCriteria(criteria2);
-            criteria3.setEnrichDependentSamplesWithProperties(true);
-            gatherSamplesAndAncestorsRecursively(lister, criteria3);
+            sampleIDs.add(sample.getId());
         }
+        if (sampleIDs.isEmpty())
+        {
+            return;
+        }
+        ListSampleCriteria criteria2 =
+            ListSampleCriteria.createForChildren(sampleIDs);
+        ListOrSearchSampleCriteria criteria3 = new ListOrSearchSampleCriteria(criteria2);
+        criteria3.setEnrichDependentSamplesWithProperties(true);
+        gatherSamplesAndAncestorsRecursively(lister, criteria3);
     }
 
     public Sample getSample(String permID)
-- 
GitLab