provide separate notify() method for stateful objects to control notification by subclasses
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2563 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
592058cfc5
commit
b9a0105604
2 changed files with 12 additions and 8 deletions
|
@ -28,7 +28,6 @@ state.
|
||||||
We can now execute the `finish` Transition.
|
We can now execute the `finish` Transition.
|
||||||
|
|
||||||
>>> demo.doTransition('finish')
|
>>> demo.doTransition('finish')
|
||||||
'finish'
|
|
||||||
>>> demo.getState()
|
>>> demo.getState()
|
||||||
'finished'
|
'finished'
|
||||||
|
|
||||||
|
|
|
@ -53,14 +53,17 @@ class Stateful(object):
|
||||||
|
|
||||||
def doTransition(self, transition, historyInfo=None):
|
def doTransition(self, transition, historyInfo=None):
|
||||||
sd = self.getStatesDefinition()
|
sd = self.getStatesDefinition()
|
||||||
|
previousState = self.getState()
|
||||||
if isinstance(transition, basestring):
|
if isinstance(transition, basestring):
|
||||||
sd.doTransitionFor(self, transition)
|
sd.doTransitionFor(self, transition)
|
||||||
return transition
|
self.notify(transition, previousState)
|
||||||
|
return
|
||||||
available = [t.name for t in sd.getAvailableTransitionsFor(self)]
|
available = [t.name for t in sd.getAvailableTransitionsFor(self)]
|
||||||
for tr in transition:
|
for tr in transition:
|
||||||
if tr in available:
|
if tr in available:
|
||||||
sd.doTransitionFor(self, tr)
|
sd.doTransitionFor(self, tr)
|
||||||
return tr
|
self.notify(tr, previousState)
|
||||||
|
return
|
||||||
raise ValueError("None of the transitions '%s' is available for state '%s'."
|
raise ValueError("None of the transitions '%s' is available for state '%s'."
|
||||||
% (repr(transition), self.getState()))
|
% (repr(transition), self.getState()))
|
||||||
|
|
||||||
|
@ -74,6 +77,10 @@ class Stateful(object):
|
||||||
def getStatesDefinition(self):
|
def getStatesDefinition(self):
|
||||||
return statesDefinitions.get(self.statesDefinition, None)
|
return statesDefinitions.get(self.statesDefinition, None)
|
||||||
|
|
||||||
|
def notify(self, transition, previousState):
|
||||||
|
""" To be implemented by subclass.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class StatefulAdapter(Stateful):
|
class StatefulAdapter(Stateful):
|
||||||
""" An adapter for persistent objects to make them stateful.
|
""" An adapter for persistent objects to make them stateful.
|
||||||
|
@ -98,11 +105,9 @@ class StatefulAdapter(Stateful):
|
||||||
statesAttr[self.statesDefinition] = value
|
statesAttr[self.statesDefinition] = value
|
||||||
state = property(getState, setState)
|
state = property(getState, setState)
|
||||||
|
|
||||||
def doTransition(self, transition, historyInfo=None):
|
def notify(self, transition, previousState):
|
||||||
previousState = self.getState()
|
transObject = self.getStatesDefinition().transitions[transition]
|
||||||
transition = super(StatefulAdapter, self).doTransition(transition, historyInfo)
|
notify(TransitionEvent(self.context, transObject, previousState))
|
||||||
transition = self.getStatesDefinition().transitions[transition]
|
|
||||||
notify(TransitionEvent(self.context, transition, previousState))
|
|
||||||
|
|
||||||
|
|
||||||
class IndexInfo(object):
|
class IndexInfo(object):
|
||||||
|
|
Loading…
Add table
Reference in a new issue