Salome HOME
1er mise en coherence avec la 7_6
[tools/eficas.git] / Validation / V_MCSIMP.py
index 1fb7bee4b7d4b6313d07f27485fe12e42e7e28e3..6f0e8a5bf180e95bfecca0bcf48129f2d21d0363 100644 (file)
@@ -1,30 +1,31 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2013   EDF R&D
+# coding=utf-8
+# person_in_charge: mathieu.courtois at edf.fr
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2015  EDF R&D                  WWW.CODE-ASTER.ORG
+# 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 library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# 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.
 #
-# This library 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
-# Lesser 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 EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+# ======================================================================
 
 """
-   Ce module contient la classe mixin MCSIMP qui porte les méthodes
-   nécessaires pour réaliser la validation d'un objet de type MCSIMP
-   dérivé de OBJECT.
+   Ce module contient la classe mixin MCSIMP qui porte les méthodes
+   nécessaires pour réaliser la validation d'un objet de type MCSIMP
+   dérivé de OBJECT.
 
    Une classe mixin porte principalement des traitements et est
-   utilisée par héritage multiple pour composer les traitements.
+   utilisée par héritage multiple pour composer les traitements.
 """
 # Modules Python
 import traceback
@@ -32,180 +33,172 @@ import traceback
 # Modules EFICAS
 from Noyau import N_CR
 from Noyau.N_Exception import AsException
-from Noyau.N_VALIDATOR import ValError,TypeProtocol,CardProtocol,IntoProtocol
+from Noyau.N_VALIDATOR import ValError, TypeProtocol, CardProtocol, IntoProtocol
 from Noyau.N_VALIDATOR import listProto
 from Noyau.strfunc import ufmt
 
-try :
-  from Extensions.i18n import tr
-except :
-  def tr(txt):
-    return txt
 
-print '___________'
-print (tr(u"None n'est pas une valeur autorisée"))
-print '___________'
 class MCSIMP:
-   """
-      COMMENTAIRE CCAR:
-      Cette classe est quasiment identique à la classe originale d'EFICAS
-      a part quelques changements cosmétiques et des chagements pour la
-      faire fonctionner de facon plus autonome par rapport à l'environnement
-      EFICAS
-
-      A mon avis, il faudrait aller plus loin et réduire les dépendances
-      amont au strict nécessaire.
-
-          - Est il indispensable de faire l'évaluation de la valeur dans le contexte
-            du jdc dans cette classe.
-
-          - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
-            pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
-            d'ailleurs modifié la classe pour éviter l'import de GEOM
-   """
-
-   CR=N_CR.CR
-
-   def __init__(self):
-      self.state='undetermined'
-      self.typeProto=TypeProtocol("type",typ=self.definition.type)
-      self.intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
-      self.cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
-
-   def get_valid(self):
-       if hasattr(self,'valid'):
-          return self.valid
-       else:
-          self.valid=None
-          return None
-
-   def set_valid(self,valid):
-       old_valid=self.get_valid()
-       self.valid = valid
-       self.state = 'unchanged'
-       if not old_valid or old_valid != self.valid :
-           self.init_modif_up()
-
-   def isvalid(self,cr='non'):
-      """
-         Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
-
-           - 0 si l'objet est invalide
-           - 1 si l'objet est valide
-
-         Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
-         la méthode construit également un comte-rendu de validation
-         dans self.cr qui doit avoir été créé préalablement.
-      """
-      if self.state == 'unchanged':
-        return self.valid
-      else:
-        valid = 1
-        v=self.valeur
-        #  verification presence
-        if self.isoblig() and v == None :
-          if cr == 'oui' :
-            self.cr.fatal(_(tr(u"Mot-clé : %s obligatoire non valorisé")), self.nom)
-          valid = 0
-
-        lval=listProto.adapt(v)
-        #Pour tenir compte des Tuples
-        if hasattr(self.definition.type[0],'ntuple') :
-           try :
-              if not (type(lval[0]) is tuple) : lval=(lval,)
-           except :
-              pass
-        if lval is None:
-           valid=0
-           if cr == 'oui' :
-              self.cr.fatal(_(tr(u"None n'est pas une valeur autorisée")))
-        else:
-           # type,into ...
-           #typeProto=TypeProtocol("type",typ=self.definition.type)
-           #intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
-           #cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
-           #typeProto=self.definition.typeProto
-           #intoProto=self.definition.intoProto
-           #cardProto=self.definition.cardProto
-           typeProto=self.typeProto
-           intoProto=self.intoProto
-           cardProto=self.cardProto
-           if cr == 'oui' :
-               #un cr est demandé : on collecte tous les types d'erreur
-               try:
-                   for val in lval:
-                       typeProto.adapt(val)
-               except ValError,e:
-                   valid=0
-                   self.cr.fatal(*e)
-               try:
-                   for val in lval:
-                       intoProto.adapt(val)
-               except ValError,e:
-                   valid=0
-                   self.cr.fatal(*e)
-                   #self.cr.fatal(unicode(e))
-               try:
-                   cardProto.adapt(lval)
-               except ValError,e:
-                   valid=0
-                   self.cr.fatal(*e)
-                   #self.cr.fatal(unicode(e))
-               #
-               # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
-               #
-               if valid and self.definition.validators:
-                   try:
-                       self.definition.validators.convert(lval)
-                   except ValError,e:
-                       self.cr.fatal(_(tr(u"Mot-clé %s invalide : %s\nCritère de validité: %s")),
-                            self.nom, str(e), self.definition.validators.info())
-                       valid=0
-           else:
-               #si pas de cr demande, on sort a la toute premiere erreur
-               try:
-                   for val in lval:
-                       typeProto.adapt(val)
-                       intoProto.adapt(val)
-                   cardProto.adapt(lval)
-                   if self.definition.validators:
-                       if hasattr(self.definition.validators,'set_MCSimp'):
-                          self.definition.validators.set_MCSimp(self)
-                       self.definition.validators.convert(lval)
-               except ValError,e:
-                   valid=0
-
-        self.set_valid(valid)
-        return self.valid
-
-   def isoblig(self):
-      """ indique si le mot-clé est obligatoire
-      """
-      return self.definition.statut=='o'
-
-   def init_modif_up(self):
-      """
-         Propage l'état modifié au parent s'il existe et n'est l'objet
-         lui-meme
-      """
-      if self.parent and self.parent != self :
-        self.parent.state = 'modified'
-
-   def report(self):
-      """ génère le rapport de validation de self """
-      self.cr=self.CR()
-      self.cr.debut = tr("Mot-clef simple : ")+tr(self.nom)
-      self.cr.fin = tr(u"Fin Mot-clé simple : ")+tr(self.nom)
-      self.state = 'modified'
-      try:
-        self.isvalid(cr='oui')
-      except AsException,e:
-        if CONTEXT.debug : traceback.print_exc()
-        self.cr.fatal(_(tr(u"Mot-clé simple : %s %s")), self.nom, e)
-      return self.cr
-
-
-
-
-
 
+    """
+       COMMENTAIRE CCAR:
+       Cette classe est quasiment identique à la classe originale d'EFICAS
+       a part quelques changements cosmétiques et des chagements pour la
+       faire fonctionner de facon plus autonome par rapport à l'environnement
+       EFICAS
+
+       A mon avis, il faudrait aller plus loin et réduire les dépendances
+       amont au strict nécessaire.
+
+           - Est il indispensable de faire l'évaluation de la valeur dans le contexte
+             du jdc dans cette classe.
+
+           - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
+             pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
+             d'ailleurs modifié la classe pour éviter l'import de GEOM
+    """
+
+    CR = N_CR.CR
+
+    def __init__(self):
+        self.state = 'undetermined'
+        self.typeProto = TypeProtocol("type", typ=self.definition.type)
+        self.intoProto = IntoProtocol(
+            "into", into=self.definition.into, val_min=self.definition.val_min, val_max=self.definition.val_max)
+        self.cardProto = CardProtocol(
+            "card", min=self.definition.min, max=self.definition.max)
+
+    def get_valid(self):
+        if hasattr(self, 'valid'):
+            return self.valid
+        else:
+            self.valid = None
+            return None
+
+    def set_valid(self, valid):
+        old_valid = self.get_valid()
+        self.valid = valid
+        self.state = 'unchanged'
+        if not old_valid or old_valid != self.valid:
+            self.init_modif_up()
+
+    def isvalid(self, cr='non'):
+        """
+           Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
+
+             - 0 si l'objet est invalide
+             - 1 si l'objet est valide
+
+           Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
+           la méthode construit également un comte-rendu de validation
+           dans self.cr qui doit avoir été créé préalablement.
+        """
+        if self.state == 'unchanged':
+            return self.valid
+        else:
+            valid = 1
+            v = self.valeur
+            #  verification presence
+            if self.isoblig() and v == None:
+                if cr == 'oui':
+                    self.cr.fatal(
+                        _(u"Mot-clé : %s obligatoire non valorisé"), self.nom)
+                valid = 0
+
+            lval = listProto.adapt(v)
+            # Ajout PN
+            # Pour tenir compte des Tuples
+            if hasattr(self.definition.type[0],'ntuple') :
+               try :
+                  if not (type(lval[0]) is tuple) : lval=(lval,)
+               except :
+                  pass
+
+            if lval is None:
+                valid = 0
+                if cr == 'oui':
+                    self.cr.fatal(_(u"None n'est pas une valeur autorisée"))
+            else:
+                # type,into ...
+                # typeProto=TypeProtocol("type",typ=self.definition.type)
+                # intoProto=IntoProtocol("into",into=self.definition.into,val_min=self.definition.val_min,val_max=self.definition.val_max)
+                # cardProto=CardProtocol("card",min=self.definition.min,max=self.definition.max)
+                # typeProto=self.definition.typeProto
+                # intoProto=self.definition.intoProto
+                # cardProto=self.definition.cardProto
+                typeProto = self.typeProto
+                intoProto = self.intoProto
+                cardProto = self.cardProto
+                if cr == 'oui':
+                    # un cr est demandé : on collecte tous les types d'erreur
+                    try:
+                        for val in lval:
+                            typeProto.adapt(val)
+                    except ValError, e:
+                        valid = 0
+                        self.cr.fatal(*e)
+                    try:
+                        for val in lval:
+                            intoProto.adapt(val)
+                    except ValError, e:
+                        valid = 0
+                        self.cr.fatal(*e)
+                    try:
+                        cardProto.adapt(lval)
+                    except ValError, e:
+                        valid = 0
+                        self.cr.fatal(*e)
+                    #
+                    # On verifie les validateurs s'il y en a et si necessaire (valid == 1)
+                    #
+                    if valid and self.definition.validators:
+                        try:
+                            self.definition.validators.convert(lval)
+                        except ValError, e:
+                            self.cr.fatal(
+                                _(u"Mot-clé %s invalide : %s\nCritère de validité: %s"),
+                                self.nom, str(e), self.definition.validators.info())
+                            valid = 0
+                else:
+                    # si pas de cr demande, on sort a la toute premiere erreur
+                    try:
+                        for val in lval:
+                            typeProto.adapt(val)
+                            intoProto.adapt(val)
+                        cardProto.adapt(lval)
+                        if self.definition.validators:
+                            if hasattr(self.definition.validators, 'set_MCSimp'):
+                                self.definition.validators.set_MCSimp(self)
+                            self.definition.validators.convert(lval)
+                    except ValError, e:
+                        valid = 0
+
+            self.set_valid(valid)
+            return self.valid
+
+    def isoblig(self):
+        """ indique si le mot-clé est obligatoire
+        """
+        return self.definition.statut == 'o'
+
+    def init_modif_up(self):
+        """
+           Propage l'état modifié au parent s'il existe et n'est l'objet
+           lui-meme
+        """
+        if self.parent and self.parent != self:
+            self.parent.state = 'modified'
+
+    def report(self):
+        """ génère le rapport de validation de self """
+        self.cr = self.CR()
+        self.cr.debut = u"Mot-clé simple : " + self.nom
+        self.cr.fin = u"Fin Mot-clé simple : " + self.nom
+        self.state = 'modified'
+        try:
+            self.isvalid(cr='oui')
+        except AsException, e:
+            if CONTEXT.debug:
+                traceback.print_exc()
+            self.cr.fatal(_(u"Mot-clé simple : %s %s"), self.nom, e)
+        return self.cr