Commit a118d9d1 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

initial implement of new string divergence tester.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@30729 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 48dcded0
...@@ -32,14 +32,14 @@ import zope.interface ...@@ -32,14 +32,14 @@ import zope.interface
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5.Document.Predicate import Predicate from Products.ERP5.Document.Predicate import Predicate
from Products.ERP5Type.DivergenceMessage import DivergenceMessage
from Products.ERP5Type import Permissions, PropertySheet, interfaces from Products.ERP5Type import Permissions, PropertySheet, interfaces
from Products.ERP5.mixin.divergence_tester import DivergenceTesterMixin
class StringDivergenceTester(Predicate): class StringDivergenceTester(Predicate, DivergenceTesterMixin):
""" """
The purpose of this divergence tester is to check the The purpose of this divergence tester is to check the
consistency between delivery movement and simulation movement consistency between delivery movement and simulation movement
for some specific properties. for a specific property.
""" """
meta_type = 'ERP5 String Divergence Tester' meta_type = 'ERP5 String Divergence Tester'
portal_type = 'String Divergence Tester' portal_type = 'String Divergence Tester'
...@@ -49,9 +49,6 @@ class StringDivergenceTester(Predicate): ...@@ -49,9 +49,6 @@ class StringDivergenceTester(Predicate):
security = ClassSecurityInfo() security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation) security.declareObjectProtected(Permissions.AccessContentsInformation)
# Declarative interfaces
zope.interface.implements( interfaces.IDivergenceTester, )
# Declarative properties # Declarative properties
property_sheets = ( PropertySheet.Base property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject , PropertySheet.XMLObject
...@@ -60,3 +57,70 @@ class StringDivergenceTester(Predicate): ...@@ -60,3 +57,70 @@ class StringDivergenceTester(Predicate):
, PropertySheet.DivergenceTester , PropertySheet.DivergenceTester
, PropertySheet.SolverSelection , PropertySheet.SolverSelection
) )
# Declarative interfaces
zope.interface.implements( interfaces.IDivergenceTester, )
def _compare(self, prevision_movement, decision_movement):
"""
If prevision_movement and decision_movement don't match, it returns a
list : (prevision_value, decision_value, message, mapping)
"""
tested_property = self.getTestedProperty()
decision_value = decision_movement.getProperty(tested_property)
if prevision_movement.isPropertyRecorded(tested_property):
prevision_value = prevision_movement.getRecordedProperty(tested_property)
if isinstance(prevision_value, (list, tuple)):
prevision_value = prevision_value[0]
else:
prevision_value = prevision_movement.getProperty(tested_property)
# XXX do we have configurable parameter for this divergence tester ?
# like ambiguity...
if decision_value != prevision_value:
return (
prevision_value, decision_value,
'The value of ${prperty_name} is different between decision and prevision.',
dict(property_name=tested_property))
return None
def getUpdatablePropertyDict(self, prevision_movement, decision_movement):
"""
Returns a list of properties to update on decision_movement
prevision_movement so that next call to compare returns True.
prevision_movement -- a simulation movement (prevision)
decision_movement -- a delivery movement (decision)
"""
tested_property = self.getTestedProperty()
if prevision_movement.isPropertyRecorded(tested_property):
prevision_value = prevision_movement.getRecordedProperty(tested_property)
if isinstance(prevision_value, (list, tuple)):
prevision_value = prevision_value[0]
else:
prevision_value = prevision_movement.getProperty(tested_property)
return {tested_property:prevision_value}
def accept(self, simulation_movement):
"""
Copies the properties handled by the divergence tester
from the related delivery movement to simulation_movement.
NOTE: the future existence of this method is still unknown
because it is likely to be implemented in TargetSolver
instead.
"""
raise NotImplementedError
def adopt(self, simulation_movement):
"""
Copies the properties handled by the divergence tester
from simulation_movement to the related delivery movement
NOTE: the future existence of this method is still unknown
because it is likely to be implemented in TargetSolver
instead.
"""
raise NotImplementedError
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment