From 6b6580400da367977ebcedd81e5aa2ee273f9b71 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Mon, 9 May 2016 14:24:58 +0000
Subject: [PATCH] SSDM-3597 : Missing Lucene reindexing datasets

SVN: 36511
---
 .../generic/server/dataaccess/db/DataDAO.java | 24 ++++++++++++-------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
index 26525f578b5..505eb787e89 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -1329,27 +1330,34 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple
 
         flushWithSqlExceptionHandling(getHibernateTemplate());
         scheduleDynamicPropertiesEvaluation(dataSets);
-
-        //Schedule contained datasets for index update, they also have the experiment and samples ids the index at least
-        for(DataPE dataSet:dataSets) {
-            scheduleDynamicPropertiesEvaluation(dataSet.getContainedDataSets());
-        }
         
         // if session is not cleared registration of many samples slows down after each batch
         hibernateTemplate.clear();
     }
-
+    
     @Override
     public final void validateAndSaveUpdatedEntity(DataPE entity) throws DataAccessException
     {
         this.currentSession().flush();
         super.validateAndSaveUpdatedEntity(entity);
         scheduleDynamicPropertiesEvaluation(Arrays.asList(entity));
+    }
+
+    public void scheduleDynamicPropertiesEvaluation(List<DataPE> dataSets) 
+    {
+        Deque<DataPE> toSchedule = new LinkedList<DataPE>(dataSets);
+        List<DataPE> toUpdate = new ArrayList<DataPE>();
         
         //Schedule contained datasets for index update, they also have the experiment and samples ids the index at least
-        scheduleDynamicPropertiesEvaluation(entity.getContainedDataSets());
+        while(false == toSchedule.isEmpty()) {
+            DataPE next = toSchedule.removeFirst();
+            toUpdate.add(next);
+            toSchedule.addAll(next.getContainedDataSets());
+        }
+        
+        super.scheduleDynamicPropertiesEvaluation(toUpdate);
     }
-
+    
     @Override
     public List<TechId> listDataSetIdsBySampleIds(final Collection<TechId> samples)
     {
-- 
GitLab