[Checkins] SVN: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/
zope.wfmc finishWorkitem temporary fix
Adam Groszer
adamg at fw.hu
Thu Sep 21 05:12:07 EDT 2006
Log message for revision 70280:
zope.wfmc finishWorkitem temporary fix
read ExtendedAttributes from xpdl
Changed:
U z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/interfaces.py
U z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/process.py
D z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/wfmcpersistent-configure.zcml
U z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/xpdl.py
A z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/z3c.wfmcpersistent-configure.zcml
-=-
Modified: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/interfaces.py
===================================================================
--- z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/interfaces.py 2006-09-21 05:36:16 UTC (rev 70279)
+++ z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/interfaces.py 2006-09-21 09:12:04 UTC (rev 70280)
@@ -20,25 +20,30 @@
from zope import interface
class IProcessDefinitionRegistry(interface.Interface):
- """Process definition registry."""
+ """Process definition registry."""
- def addProcessDefinition(processDefinition):
- """Add a new process definition.
- the ID will be the processDefinition.id"""
+ def addProcessDefinition(processDefinition):
+ """Add a new process definition.
+ the ID will be the processDefinition.id"""
- def getProcessDefinition(id):
- """Returns a definition given its ID.
-
- Raise a KeyError if no process definition is available.
- """
+ def getProcessDefinition(id):
+ """Returns a definition given its ID.
+
+ Raise a KeyError if no process definition is available.
+ """
- def getProcessDefinitions():
- """Returns all process definitions."""
+ def getProcessDefinitions():
+ """Returns all process definitions."""
- def getProcessDefinitionIDs():
- """Returns all process definition IDs."""
-
- def delProcessDefinition(id):
- """Del a process definition given its ID."""
-
-
+ def getProcessDefinitionIDs():
+ """Returns all process definition IDs."""
+
+ def delProcessDefinition(id):
+ """Del a process definition given its ID."""
+
+class IExtendedAttribute(interface.Interface):
+ """Extended XPDL attributes."""
+
+ __name__ = interface.Attribute("Name of the extended attribute")
+ value = interface.Attribute("Value of the extended attribute")
+ content = interface.Attribute("XML content, long value of the extended attribute")
\ No newline at end of file
Modified: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/process.py
===================================================================
--- z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/process.py 2006-09-21 05:36:16 UTC (rev 70279)
+++ z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/process.py 2006-09-21 09:12:04 UTC (rev 70280)
@@ -30,7 +30,8 @@
name = u''
def __repr__(self):
- return "TransitionDefinitionPersistent(from=%r, to=%r)" %(self.from_, self.to)
+ return "TransitionDefinitionPersistent(from=%r, to=%r)" %(self.from_,
+ self.to)
class ProcessDefinition(zope.wfmc.process.ProcessDefinition, Persistent):
@@ -68,10 +69,66 @@
self.process_definition_identifier)
definition = property(definition)
+
+ #Activity is buggy in zope.wfmc, until it's solved here is patched
+ def transition(self, activity, transitions):
+ if transitions:
+ definition = self.definition
+ for transition in transitions:
+ activity_definition = definition.activities[transition.to]
+ next = None
+ if activity_definition.andJoinSetting:
+ # If it's an and-join, we want only one.
+ for i, a in self.activities.items():
+ if a.activity_definition_identifier == transition.to:
+ # we already have the activity -- use it
+ next = a
+ break
+
+ if next is None:
+ next = Activity(self, activity_definition)
+ self.nextActivityId += 1
+ next.id = self.nextActivityId
+
+ zope.event.notify(zope.wfmc.process.Transition(activity, next))
+ self.activities[next.id] = next
+ next.start(transition)
+
+ if activity is not None:
+ del self.activities[activity.id]
+ if not self.activities:
+ self._finish()
+
+ self._p_changed = True
+ #Activity is buggy in zope.wfmc, until it's solved here is patched
+
def __repr__(self):
return "ProcessPersistent(%r)" % self.process_definition_identifier
+class Activity(zope.wfmc.process.Activity):
+ #Activity is buggy in zope.wfmc, until it's solved here is patched
+ def finish(self):
+ zope.event.notify(zope.wfmc.process.ActivityFinished(self))
+
+ definition = self.definition
+
+ transitions = []
+ for transition in definition.outgoing:
+ if transition.condition(self.process.workflowRelevantData):
+ transitions.append(transition)
+ if not definition.andSplitSetting:
+ break # xor split, want first one
+
+ #THIS is the difference
+ if not transitions and definition.outgoing:
+ raise zope.wfmc.interfaces.ProcessError(
+ "No valid transitions found")
+ #THIS is the difference
+
+ self.process.transition(self, transitions)
+ #Activity is buggy in zope.wfmc, until it's solved here is patched
+
class Application(zope.wfmc.process.Application, Persistent):
def __repr__(self):
@@ -79,7 +136,8 @@
if param.input == True])
output = u', '.join([param.__name__ for param in self.parameters
if param.output == True])
- return "<ApplicationPersistent %r: (%s) --> (%s)>" %(self.__name__, input, output)
+ return "<ApplicationPersistent %r: (%s) --> (%s)>" %(self.__name__,
+ input, output)
class Participant(zope.wfmc.process.Participant, Persistent):
Deleted: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/wfmcpersistent-configure.zcml
===================================================================
--- z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/wfmcpersistent-configure.zcml 2006-09-21 05:36:16 UTC (rev 70279)
+++ z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/wfmcpersistent-configure.zcml 2006-09-21 09:12:04 UTC (rev 70280)
@@ -1 +0,0 @@
-<include package="z3c.wfmcpersistent"/>
Modified: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/xpdl.py
===================================================================
--- z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/xpdl.py 2006-09-21 05:36:16 UTC (rev 70279)
+++ z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/xpdl.py 2006-09-21 09:12:04 UTC (rev 70280)
@@ -20,8 +20,13 @@
import xml.sax.xmlreader
import xml.sax.handler
+from persistent.dict import PersistentDict
+
+from zope.interface import implements
+
import zope.wfmc.xpdl
+from z3c.wfmcpersistent.interfaces import IExtendedAttribute
import z3c.wfmcpersistent.process
class XPDLHandler(zope.wfmc.xpdl.XPDLHandler):
@@ -32,6 +37,36 @@
ActivityDefinitionFactory = z3c.wfmcpersistent.process.ActivityDefinition
TransitionDefinitionFactory = z3c.wfmcpersistent.process.TransitionDefinition
+ def __init__(self, package):
+ zope.wfmc.xpdl.XPDLHandler.__init__(self, package)
+ self.start_handlers[(zope.wfmc.xpdl.xpdlns,
+ 'ExtendedAttribute')] = \
+ XPDLHandler.ExtendedAttributeHnd
+ self.end_handlers[(zope.wfmc.xpdl.xpdlns,
+ 'ExtendedAttribute')] = \
+ XPDLHandler.extendedattributeHnd
+
+ def ExtendedAttributeHnd(self, attrs):
+ name = attrs.get((None, 'Name'))
+ value = attrs.get((None, 'Value'))
+ return ExtendedAttribute(name, value)
+
+ def extendedattributeHnd(self, eattribute):
+ obj = self.stack[-1]
+ if not hasattr(obj, 'ExtendedAttributes'):
+ obj.ExtendedAttributes = PersistentDict()
+ complex = self.text.strip()
+ eattribute.content = complex
+ obj.ExtendedAttributes[eattribute.__name__]=eattribute
+
+class ExtendedAttribute(object):
+ implements(IExtendedAttribute)
+
+ def __init__(self, name, value=None):
+ self.__name__ = name
+ self.value = value
+ self.content = None
+
def read(file):
src = xml.sax.xmlreader.InputSource(getattr(file, 'name', '<string>'))
src.setByteStream(file)
Copied: z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/z3c.wfmcpersistent-configure.zcml (from rev 70096, z3c.wfmcpersistent/trunk/src/z3c/wfmcpersistent/wfmcpersistent-configure.zcml)
More information about the Checkins
mailing list