From 54d0c56130cdda5c2e1011114b936b1498fb886b Mon Sep 17 00:00:00 2001
From: Jean-Paul Smets <jp@nexedi.com>
Date: Mon, 1 Jan 2007 08:51:08 +0000
Subject: [PATCH] Moved from ERP5OOo

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11827 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../Constraint/DocumentReferenceConstraint.py | 76 +++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 product/ERP5/Constraint/DocumentReferenceConstraint.py

diff --git a/product/ERP5/Constraint/DocumentReferenceConstraint.py b/product/ERP5/Constraint/DocumentReferenceConstraint.py
new file mode 100644
index 0000000000..69835e34fc
--- /dev/null
+++ b/product/ERP5/Constraint/DocumentReferenceConstraint.py
@@ -0,0 +1,76 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+#          Jerome Perrin <jerome@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability 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
+# garantees and support are strongly adviced 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.
+#
+##############################################################################
+
+from Products.ERP5Type.Constraint import Constraint
+from Products.ERP5Type.Message import Message
+N_ = lambda msg, **kw: Message('erp5_ui', msg, **kw)
+_MARKER = []
+
+class DocumentReferenceConstraint(Constraint):
+  """
+  This constraint checks if the document has all required coordinates
+  (reference, version and language) and if there is no other document with
+  the same coordinates.
+
+  Fixing is not implemented on purpose
+  (although we could, e.g. by changing version number)
+  """
+
+  def checkConsistency(self, object, fixit=0, throw=False): # XXX-JPS throw is not part of API - Please remove
+    """
+      Implement here the consistency checker
+    """
+    # XXX we probably could check reference syntax here, based on regexp in preferences?
+    error_list = []
+
+    for req in ('reference', 'language', 'version'):
+      if object.getProperty(req) in (None, ''):
+        message = '%s is not defined' % req # XXX-JPS Is translation required here with a Message class ?
+        error_list.append(self._generateError(object, N_(message)))
+    if error_list:
+      if throw: # XXX-JPS throw is not part of API - Please remove
+        raise Exception(str(error_list))
+      return error_list
+    res = object.portal_catalog(reference=object.getReference(), language=object.getLanguage(),
+                                version=object.getVersion(), portal_type=object.getPortalDocumentTypeList())
+    res = list(res)
+    if len(res) == 2: # this object and another object
+      message = 'E: another object %s - %s - %s exists' % (object.getReference(),
+                                     object.getLanguage(), object.getVersion())
+      error_list.append(self._generateError(object, N_(message)))
+    if len(res) > 2: # this is very serious since there are many objects with the same reference
+      raise Exception('Fatal error: multiple objects %s - %s - %s exist' % (object.getReference(),
+                                                      object.getLanguage(), object.getVersion()))
+      #error_list.append(self._generateError(object, N_(s)))
+    if hasattr(object, 'Document_additionalConsistencyCheck'):
+      message = object.Document_additionalConsistencyCheck()
+      if message not in (None, ''):
+        error_list.append(self._generateError(object, N_(message)))
+    if error_list and throw: # XXX-JPS throw is not part of API - Please remove
+      raise Exception(str(error_list))
+    return error_list
-- 
2.30.9