DivergenceSolutionDecision.py 3.68 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
#                    Łukasz Nowak <luke@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
##############################################################################

30
from Products.ERP5Type.Globals import InitializeClass
31 32 33 34
from Products.PythonScripts.Utility import allow_class
from AccessControl import ClassSecurityInfo
from Persistence import Persistent

35
class DivergenceSolutionDecision(Persistent):
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
  """Decision class

    Represent decision took during solving divergence between reality and
    simulation

    Provides possibility to override movement's property value in case of
    accepting decision with forcing.

    Properties are two types - historical only and really used.

    Historical only are for information traceability:

      * delivery_solver_name
      * target_solver_name

    Really used shall impact property value of movement:

      * divergence
      * decision
      * force_property

    divergence
      instance of DivergenceMessage

    decision
      string representing took decision:
        * accept
        * adopt
        * split

    delivery_solver_name
      delivery solver used during taking decision

    target_solver_name
      target solver used during taking decision

    force_property
      If set, property on decision overrides

    split_kw
      Dictionary passed to TargetSolver in case of splitting.
  """
78
  meta_type = "DivergenceSolutionDecision"
79 80 81 82 83 84 85 86 87 88 89 90 91 92
  security = ClassSecurityInfo()
  security.declareObjectPublic() # FIXME need to be decided

  # XXX: Is there any place to know all possible decisions?
  ALLOWED_DECISION_TUPLE = ('accept', 'adopt', 'split')

  def __repr__(self):
    repr_str = '<%s object at 0x%x\n' % (self.__class__.__name__, id(self))
    for prop in 'divergence', 'decision', 'delivery_solver_name', \
                'target_solver_name', 'force_property':
      repr_str += '%s = %r\n' % (prop, getattr(self, prop))
    repr_str += '>'
    return repr_str

93 94
  def __init__(self, divergence, decision, delivery_solver_name=None,
      target_solver_name=None, force_property=False, split_kw=None):
95 96 97 98 99 100 101 102 103 104
    self.divergence = divergence
    self.decision = decision
    self.delivery_solver_name = delivery_solver_name
    self.target_solver_name = target_solver_name
    self.force_property = force_property
    self.split_kw = split_kw
    if not (self.decision in self.ALLOWED_DECISION_TUPLE):
      raise ValueError(
        'Decision %s is not supported' % self.decision)

105 106
InitializeClass(DivergenceSolutionDecision)
allow_class(DivergenceSolutionDecision)