[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