[Zope3-checkins] CVS: Zope3/src/zope/app/workflow - configure.zcml:1.13 definition.py:1.8 service.py:1.14

Stephan Richter srichter at cosmos.phy.tufts.edu
Wed Mar 3 15:21:04 EST 2004


Update of /cvs-repository/Zope3/src/zope/app/workflow
In directory cvs.zope.org:/tmp/cvs-serv21735/src/zope/app/workflow

Modified Files:
	configure.zcml definition.py service.py 
Log Message:


Converted process definitions from being arbitrary registerable components to
be local utilities. This drastically simplified the local workflow and process
definition implementation, since they do not have to worry about any
registration stuff anymore. What an improvement!


=== Zope3/src/zope/app/workflow/configure.zcml 1.12 => 1.13 ===
--- Zope3/src/zope/app/workflow/configure.zcml:1.12	Wed Mar  3 05:38:57 2004
+++ Zope3/src/zope/app/workflow/configure.zcml	Wed Mar  3 15:20:33 2004
@@ -58,38 +58,20 @@
         id="ProcessDefinition"
         permission="zope.ManageServices"
         />
-    <require
-        permission="zope.ManageServices"
-        interface="zope.app.workflow.interfaces.IProcessDefinition" 
+    <implements
+        interface="zope.app.interfaces.services.utility.ILocalUtility" 
         />
     <implements 
         interface="zope.app.interfaces.annotation.IAttributeAnnotatable" 
         />
-  </content>
-
-
-  <!-- Process Definition Registration -->
-
-  <content class="zope.app.workflow.service.ProcessDefinitionRegistration">
-    <factory
-        id="ProcessDefinitionRegistration"
-        permission="zope.ManageServices"
-        />
     <require
         permission="zope.ManageServices"
-        interface="zope.app.workflow.interfaces.IProcessDefinitionRegistration"
-        set_schema="zope.app.workflow.interfaces.IProcessDefinitionRegistration"
-        />
-    <require
-        permission="zope.ManageServices"
-        interface="zope.app.container.interfaces.IAddNotifiable"
-        />
-    <require
-        permission="zope.ManageServices"
-        interface="zope.app.container.interfaces.IRemoveNotifiable"
+        interface="zope.app.workflow.interfaces.IProcessDefinition" 
         />
   </content>
 
+  <!-- Process Definition Name Vocabualry -->
+
   <vocabulary
      name="ProcessDefinitions"
      factory=".service.ProcessDefinitionVocabulary"
@@ -107,7 +89,8 @@
 
   <!-- Process Instance Container -->
 
-  <content class="zope.app.workflow.definition.ProcessDefinitionElementContainer">
+  <content 
+        class="zope.app.workflow.definition.ProcessDefinitionElementContainer">
 
     <implements interface="zope.app.container.interfaces.IContentContainer" />
 


=== Zope3/src/zope/app/workflow/definition.py 1.7 => 1.8 ===
--- Zope3/src/zope/app/workflow/definition.py:1.7	Wed Mar  3 12:07:23 2004
+++ Zope3/src/zope/app/workflow/definition.py	Wed Mar  3 15:20:33 2004
@@ -29,7 +29,6 @@
 
     Must be inherited by a particular implementation.
     """ 
-
     implements(IProcessDefinition)
 
     name = None


=== Zope3/src/zope/app/workflow/service.py 1.13 => 1.14 ===
--- Zope3/src/zope/app/workflow/service.py:1.13	Fri Feb 27 11:50:37 2004
+++ Zope3/src/zope/app/workflow/service.py	Wed Mar  3 15:20:33 2004
@@ -13,136 +13,87 @@
 ##############################################################################
 """Workflow service implementation.
 
-Revision information:
 $Id$
 """
-__metaclass__ = type
-
 from persistent import Persistent
-from zope.component import getService
-from zope.app.component.nextservice import queryNextService
-from zope.app.interfaces.services.registration import INameComponentRegistry
-from zope.app.interfaces.services.registration import IRegistered
-from zope.app.interfaces.services.service import ISimpleService
-from zope.app.workflow.interfaces import IProcessDefinition
-from zope.app.workflow.interfaces import IProcessDefinitionRegistration
-from zope.app.workflow.interfaces import IWorkflowService
-from zope.app.services.registration import NameComponentRegistry
-from zope.app.services.registration import NamedComponentRegistration
-from zope.app.services.servicenames import Workflows
-from zope.app.traversing import getPath
-from zope.component import getAdapter
-from zope.app.container.contained import Contained
+
 from zope.interface import implements
 from zope.schema.interfaces import \
      ITokenizedTerm, IVocabulary, IVocabularyTokenized
 
+from zope.app import zapi
+from zope.app.container.contained import Contained
+from zope.app.interfaces.services.service import ISimpleService
+from zope.app.services.servicenames import Workflows
+from zope.app.workflow.interfaces import IProcessDefinition, IWorkflowService
+
+
+class ILocalWorkflowService(IWorkflowService):
+    """A Local Workflow Service."""
 
-class ILocalWorkflowService(IWorkflowService, INameComponentRegistry):
-    """A Local WorkflowService.
-    """
 
-class WorkflowService(Persistent, NameComponentRegistry, Contained):
-    __doc__ = IWorkflowService.__doc__
+class WorkflowService(Persistent, Contained):
+    """Local Workflow Service implementation."""
     implements(ILocalWorkflowService, ISimpleService)
 
     def getProcessDefinitionNames(self):
         """See zope.app.workflow.interfaces.IWorkflowService"""
-        definition_names = {}
-        for name in self.listRegistrationNames():
-            registry = self.queryRegistrations(name)
-            if registry.active() is not None:
-                definition_names[name] = 0
-        service = queryNextService(self, Workflows)
-        if service is not None:
-            for name in service.getProcessDefinitionNames():
-                definition_names[name] = 0
-        return definition_names.keys()
+        names = {}
+        for name, util in zapi.getUtilitiesFor(self, IProcessDefinition):
+            names[name] = None
+        return names.keys()
 
     def getProcessDefinition(self, name):
         """See zope.app.workflow.interfaces.IWorkflowService"""
-        pd = self.queryActiveComponent(name)
-        if pd is not None:
-            return pd
-        service = queryNextService(self, Workflows)
-        if service is not None:
-            return service.getProcessDefinition(name)
-        raise KeyError, name
+        return zapi.getUtility(self, IProcessDefinition, name)
 
     def queryProcessDefinition(self, name, default=None):
         """See zope.app.workflow.interfaces.IWorkflowService"""
-        try:
-            return self.getProcessDefinition(name)
-        except KeyError:
-            return default
+        return zapi.queryUtility(self, IProcessDefinition, default, name)
 
-    def createProcessInstance(self, definition_name):
+    def createProcessInstance(self, name):
         """See zope.app.workflow.interfaces.IWorkflowService"""
-        pd = self.getProcessDefinition(definition_name)
-        return pd.createProcessInstance(definition_name)
+        pd = self.getProcessDefinition(name)
+        return pd.createProcessInstance(name)
 
-class ProcessDefinitionRegistration(NamedComponentRegistration):
-    __doc__ = IProcessDefinitionRegistration.__doc__
-    implements(IProcessDefinitionRegistration)
-
-    serviceType = Workflows
-
-    def getInterface(self):
-        return IProcessDefinition
-
-    # The following hooks are called only if we implement
-    # IAddNotifiable and IRemoveNotifiable.
-
-    def addNotify(self, event):
-        """Hook method will call after an object is added to container.
-
-        Defined in IAddNotifiable.
-        """
-        super(ProcessDefinitionRegistration, self).addNotify(event)
-        pd = self.getComponent()
-        adapter = getAdapter(pd, IRegistered)
-        adapter.addUsage(getPath(self))
-
-
-    def removeNotify(self, event):
-        """Hook method will call before object is removed from container.
-
-        Defined in IRemoveNotifiable.
-        """
-        pd = self.getComponent()
-        adapter = getAdapter(pd, IRegistered)
-        adapter.removeUsage(getPath(self))
-        super(ProcessDefinitionRegistration, self).removeNotify(event)
 
 class ProcessDefinitionTerm:
+    """A term representing the name of a process definition."""
     implements(ITokenizedTerm)
 
     def __init__(self, name):
-        self.value = name
-        self.token = name
+        self.value = self.token = name
+
 
 class ProcessDefinitionVocabulary:
+    """Vocabulary providing available process definition names."""
     implements(IVocabulary, IVocabularyTokenized)
 
     def __init__(self, context):
-        self.workflows = getService(context, Workflows)
+        self.workflows = zapi.getService(context, Workflows)
 
     def __contains__(self, value):
+        """See zope.schema.interfaces.IVocabulary"""
         return value in self.workflows.getProcessDefinitionNames()
 
     def __iter__(self):
+        """See zope.schema.interfaces.IVocabulary"""
         terms = map(lambda p: ProcessDefinitionTerm(p),
                     self.workflows.getProcessDefinitionNames())
         return iter(terms)
 
     def __len__(self):
+        """See zope.schema.interfaces.IVocabulary"""
         return len(self.workflows.getProcessDefinitionNames())
 
     def getQuery(self):
+        """See zope.schema.interfaces.IVocabulary"""
         return None
 
     def getTerm(self, value):
+        """See zope.schema.interfaces.IVocabulary"""
         return ProcessDefinitionTerm(value)
 
     def getTermByToken(self, token):
+        """See zope.schema.interfaces.IVocabularyTokenized"""
         return self.getTerm(token)




More information about the Zope3-Checkins mailing list