From bbb58095024f3b12aebf6b3f0a039503565d8ebc Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Mon, 13 Dec 2004 17:57:15 +0000
Subject: [PATCH] Support queued indexing.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@2004 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/Base.py            | 21 +++++++++++++++++++--
 product/ERP5Type/Document/Folder.py | 29 ++++++++++++++++++++++-------
 2 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py
index 67a910b9e2..42f31a34e3 100755
--- a/product/ERP5Type/Base.py
+++ b/product/ERP5Type/Base.py
@@ -1376,7 +1376,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ):
     """
     if self.isIndexable:
       #LOG("immediateReindexObject",0,self.getRelativeUrl())
-      PortalContent.reindexObject(self)
+      PortalContent.reindexObject(self, *args, **kw)
     else:
       pass
       #LOG("No reindex now",0,self.getRelativeUrl())
@@ -1391,7 +1391,24 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ):
       args / kw required since we must follow API
     """
     if self.isIndexable:
-      self.activate().immediateReindexObject()
+      self.activate().immediateReindexObject(*args, **kw)
+
+  def immediateQueueCataloggedObject(self, *args, **kw):
+    if self.isIndexable:
+      catalog_tool = getToolByName(self, 'portal_catalog', None)
+      if catalog_tool is not None:
+        catalog_tool.queueCataloggedObject(self, *args, **kw)
+
+  security.declarePublic('queueCataloggedObject')
+  def queueCataloggedObject(self, *args, **kw):
+    """
+      Index an object in a deferred manner.
+    """
+    if self.isIndexable:
+      self.activate().immediateQueueCataloggedObject(*args, **kw)
+
+  security.declarePublic('recursiveQueueCataloggedObject')
+  recursiveQueueCataloggedObject = queueCataloggedObject
 
   security.declareProtected( Permissions.AccessContentsInformation, 'asXML' )
   def asXML(self, ident=0):
diff --git a/product/ERP5Type/Document/Folder.py b/product/ERP5Type/Document/Folder.py
index 6b6e8ceb61..d644fc7ea6 100755
--- a/product/ERP5Type/Document/Folder.py
+++ b/product/ERP5Type/Document/Folder.py
@@ -429,25 +429,25 @@ be a problem)."""
 
   # Catalog related
   security.declarePublic( 'reindexObject' )
-  def reindexObject(self, idxs=[]):
+  def reindexObject(self, *args, **kw):
     """
       Fixes the hierarchy structure (use of Base class)
       XXXXXXXXXXXXXXXXXXXXXXXX
       BUG here : when creating a new base category
     """
-    return Base.reindexObject(self)
+    return Base.reindexObject(self, *args, **kw)
 
   security.declarePublic( 'recursiveReindexObject' )
-  def recursiveReindexObject(self):
+  def recursiveReindexObject(self, *args, **kw):
     """
       Fixes the hierarchy structure (use of Base class)
       XXXXXXXXXXXXXXXXXXXXXXXX
       BUG here : when creating a new base category
     """
-    self.activate().recursiveImmediateReindexObject()
+    self.activate().recursiveImmediateReindexObject(*args, **kw)
 
   security.declarePublic( 'recursiveImmediateReindexObject' )
-  def recursiveImmediateReindexObject(self):
+  def recursiveImmediateReindexObject(self, *args, **kw):
       """
         Applies immediateReindexObject recursively
       """
@@ -455,11 +455,26 @@ be a problem)."""
       self.flushActivity(invoke = 0, method_id='immediateReindexObject') # This might create a recursive lock
       self.flushActivity(invoke = 0, method_id='recursiveImmediateReindexObject') # This might create a recursive lock
       if self.isIndexable:
-        self.immediateReindexObject()
+        self.immediateReindexObject(*args, **kw)
       # Reindex contents
       for c in self.objectValues():
         if hasattr(aq_base(c), 'recursiveImmediateReindexObject'):
-          c.recursiveImmediateReindexObject()
+          c.recursiveImmediateReindexObject(*args, **kw)
+
+  security.declarePublic( 'recursiveQueueCataloggedObject' )
+  def recursiveQueueCataloggedObject(self, *args, **kw):
+      """
+        Apply queueCataloggedObject recursively
+      """
+      # Index self
+      self.flushActivity(invoke = 0, method_id='queueCataloggedObject') # This might create a recursive lock
+      self.flushActivity(invoke = 0, method_id='recursiveQueueCataloggedObject') # This might create a recursive lock
+      if self.isIndexable:
+        self.queueCataloggedObject(*args, **kw)
+      # Index contents
+      for c in self.objectValues():
+        if hasattr(aq_base(c), 'recursiveQueueCataloggedObject'):
+          c.recursiveQueueCataloggedObject(*args, **kw)
 
   security.declareProtected( Permissions.ModifyPortalContent, 'recursiveMoveObject' )
   def recursiveMoveObject(self):
-- 
2.30.9