[Erp5-report] r30729 - /erp5/trunk/products/ERP5/Document/StringDivergenceTester.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Nov 18 14:49:00 CET 2009
Author: kazuhiko
Date: Wed Nov 18 14:48:59 2009
New Revision: 30729
URL: http://svn.erp5.org?rev=30729&view=rev
Log:
initial implement of new string divergence tester.
Modified:
erp5/trunk/products/ERP5/Document/StringDivergenceTester.py
Modified: erp5/trunk/products/ERP5/Document/StringDivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/StringDivergenceTester.py?rev=30729&r1=30728&r2=30729&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/StringDivergenceTester.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/StringDivergenceTester.py [utf8] Wed Nov 18 14:48:59 2009
@@ -32,14 +32,14 @@
from AccessControl import ClassSecurityInfo
from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5Type.DivergenceMessage import DivergenceMessage
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
consistency between delivery movement and simulation movement
- for some specific properties.
+ for a specific property.
"""
meta_type = 'ERP5 String Divergence Tester'
portal_type = 'String Divergence Tester'
@@ -49,9 +49,6 @@
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
- # Declarative interfaces
- zope.interface.implements( interfaces.IDivergenceTester, )
-
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
@@ -60,3 +57,70 @@
, PropertySheet.DivergenceTester
, 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
More information about the Erp5-report
mailing list