From 5461c95f4c6a263aea537ace36638e52bf9a937e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Mon, 17 Dec 2007 16:39:38 +0000
Subject: [PATCH] Use new style messages in Constraints. Also change the
 behaviour a bit, don't raise an Exception directly, constraints should *not*
 raise exceptions, simply use _generateError. What we should do is add support
 for different severity in Constraints framework.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@18369 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../Constraint/DocumentReferenceConstraint.py | 61 ++++++++++++++-----
 1 file changed, 45 insertions(+), 16 deletions(-)

diff --git a/product/ERP5/Constraint/DocumentReferenceConstraint.py b/product/ERP5/Constraint/DocumentReferenceConstraint.py
index 5cc03a46f6..7aa2e6f8cc 100644
--- a/product/ERP5/Constraint/DocumentReferenceConstraint.py
+++ b/product/ERP5/Constraint/DocumentReferenceConstraint.py
@@ -27,10 +27,10 @@
 ##############################################################################
 
 from Products.ERP5Type.Constraint import Constraint
-from Products.ERP5Type.Message import Message
-N_ = lambda msg, **kw: Message('erp5_ui', msg, **kw)
+N_ = lambda msg, **kw: msg # just to extract messages
 _MARKER = []
 
+
 class DocumentReferenceConstraint(Constraint):
   """
   This constraint checks if the document has all required coordinates
@@ -41,28 +41,57 @@ class DocumentReferenceConstraint(Constraint):
   (although we could, e.g. by changing version number)
   """
 
+  _message_id_list = [ 'message_property_not_defined',
+                       'message_another_document_exists',
+                       'message_multiple_documents_exists' ]
+  
+  message_property_not_defined = N_(
+      'Property ${property_id} was not defined')
+  message_another_document_exists = N_(
+      'Another document ${document_reference} - '
+      '${document_language} - ${document_version} already exists')
+  message_multiple_documents_exists = N_(
+      'Multiple (${document_count}) documents ${document_reference} - '
+      '${document_language} - ${document_version} already exists')
+
   def checkConsistency(self, object, fixit=0):
     """
       Implement here the consistency checker
     """
-    # XXX we probably could check reference syntax here, based on regexp in preferences?
+    # 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)))
+    for property_id in ('reference', 'language', 'version'):
+      if object.getProperty(property_id) in (None, ''):
+        error_list.append(self._generateError(object,
+             self._getMessage('message_property_not_defined'),
+             mapping=dict(property_id=property_id)))
     if error_list:
       return error_list
-    res = object.portal_catalog(reference=object.getReference(), language=object.getLanguage(),
-                                version=object.getVersion(), portal_type=object.getPortalDocumentTypeList())
+
+    # XXX isn't it better to use unrestrictedSearchResults ?
+    #   potential problem is that we would get deleted documents aswell
+    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)))
+      error_list.append(self._generateError(object,
+                self._getMessage('message_another_document_exists'),
+                mapping=dict(document_reference=object.getReference(),
+                             document_language=object.getLanguage(),
+                             document_version=object.getVersion())))
+
+    if len(res) > 2:
+      # this is very serious since there are many objects with the same
+      # reference
+      error_list.append(self._generateError(object,
+                self._getMessage('message_multiple_documents_exists'),
+                mapping=dict(document_count=len(res),
+                             document_reference=object.getReference(),
+                             document_language=object.getLanguage(),
+                             document_version=object.getVersion())))
     return error_list
+
-- 
2.30.9