[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/C - split up CMFCatalogAware mixin

Yvo Schubbe y.2009 at wcm-solutions.de
Thu Aug 13 16:17:07 EDT 2009


Log message for revision 102742:
  - split up CMFCatalogAware mixin

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-08-13 20:07:30 UTC (rev 102741)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2009-08-13 20:17:07 UTC (rev 102742)
@@ -4,6 +4,9 @@
 2.2.0 (unreleased)
 ------------------
 
+- CMFCatalogAware: Split up CMFCatalogAware mixin.
+  CatalogAware, WorkflowAware and OpaqueItemManager are now separate mixins.
+
 - Changed testing.py to directly load zope.traversing's ZCML instead of going
   via the Five traversing.zcml BBB shim.
 

Modified: Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2009-08-13 20:07:30 UTC (rev 102741)
+++ Products.CMFCore/trunk/Products/CMFCore/CMFCatalogAware.py	2009-08-13 20:17:07 UTC (rev 102742)
@@ -45,12 +45,12 @@
 logger = logging.getLogger('CMFCore.CMFCatalogAware')
 
 
-class CMFCatalogAware(Base):
+class CatalogAware(Base):
 
-    """Mix-in for notifying portal_catalog and portal_workflow
+    """Mix-in for notifying the catalog tool.
     """
 
-    implements(ICatalogAware, IWorkflowAware, IOpaqueItemManager)
+    implements(ICatalogAware)
 
     security = ClassSecurityInfo()
 
@@ -122,6 +122,58 @@
                                   update_metadata=0, uid=brain_path)
             if s is None: ob._p_deactivate()
 
+InitializeClass(CatalogAware)
+
+
+class WorkflowAware(Base):
+
+    """Mix-in for notifying the workflow tool.
+    """
+
+    implements(IWorkflowAware)
+
+    security = ClassSecurityInfo()
+
+    manage_options = ({'label': 'Workflows',
+                       'action': 'manage_workflowsTab'},)
+
+    _manage_workflowsTab = DTMLFile('zmi_workflows', _dtmldir)
+
+    #
+    #   ZMI methods
+    #
+    security.declareProtected(ManagePortal, 'manage_workflowsTab')
+    def manage_workflowsTab(self, REQUEST, manage_tabs_message=None):
+        """ Tab displaying the current workflows for the content object.
+        """
+        ob = self
+        wftool = self._getWorkflowTool()
+        # XXX None ?
+        if wftool is not None:
+            wf_ids = wftool.getChainFor(ob)
+            states = {}
+            chain = []
+            for wf_id in wf_ids:
+                wf = wftool.getWorkflowById(wf_id)
+                if wf is not None:
+                    # XXX a standard API would be nice
+                    if hasattr(wf, 'getReviewStateOf'):
+                        # Default Workflow
+                        state = wf.getReviewStateOf(ob)
+                    elif hasattr(wf, '_getWorkflowStateOf'):
+                        # DCWorkflow
+                        state = wf._getWorkflowStateOf(ob, id_only=1)
+                    else:
+                        state = '(Unknown)'
+                    states[wf_id] = state
+                    chain.append(wf_id)
+        return self._manage_workflowsTab(
+            REQUEST,
+            chain=chain,
+            states=states,
+            management_view='Workflows',
+            manage_tabs_message=manage_tabs_message)
+
     # The following method can be overridden using inheritance so that it's
     # possible to specify another workflow tool for a given content type
     def _getWorkflowTool(self):
@@ -138,6 +190,18 @@
         if wftool is not None:
             wftool.notifyCreated(self)
 
+InitializeClass(WorkflowAware)
+
+
+class OpaqueItemManager(Base):
+
+    """Mix-in for managing opaque items.
+    """
+
+    implements(IOpaqueItemManager)
+
+    security = ClassSecurityInfo()
+
     # Opaque subitems
     # ---------------
 
@@ -185,52 +249,15 @@
         """
         return [t[1] for t in self.opaqueItems()]
 
-    # ZMI
-    # ---
+InitializeClass(OpaqueItemManager)
 
-    manage_options = ({'label': 'Workflows',
-                       'action': 'manage_workflowsTab',
-                       },
-                       )
 
-    _manage_workflowsTab = DTMLFile('zmi_workflows', _dtmldir)
+class CMFCatalogAware(CatalogAware, WorkflowAware, OpaqueItemManager):
 
-    security.declareProtected(ManagePortal, 'manage_workflowsTab')
-    def manage_workflowsTab(self, REQUEST, manage_tabs_message=None):
-        """
-            Tab displaying the current workflows for the content object.
-        """
-        ob = self
-        wftool = self._getWorkflowTool()
-        # XXX None ?
-        if wftool is not None:
-            wf_ids = wftool.getChainFor(ob)
-            states = {}
-            chain = []
-            for wf_id in wf_ids:
-                wf = wftool.getWorkflowById(wf_id)
-                if wf is not None:
-                    # XXX a standard API would be nice
-                    if hasattr(wf, 'getReviewStateOf'):
-                        # Default Workflow
-                        state = wf.getReviewStateOf(ob)
-                    elif hasattr(wf, '_getWorkflowStateOf'):
-                        # DCWorkflow
-                        state = wf._getWorkflowStateOf(ob, id_only=1)
-                    else:
-                        state = '(Unknown)'
-                    states[wf_id] = state
-                    chain.append(wf_id)
-        return self._manage_workflowsTab(
-            REQUEST,
-            chain=chain,
-            states=states,
-            management_view='Workflows',
-            manage_tabs_message=manage_tabs_message)
+    """Mix-in for notifying catalog and workflow and managing opaque items.
+    """
 
-InitializeClass(CMFCatalogAware)
 
-
 def handleContentishEvent(ob, event):
     """ Event subscriber for (IContentish, IObjectEvent) events.
     """



More information about the Checkins mailing list