]> SALOME platform Git repositories - tools/eficas.git/blobdiff - Noyau/N_FACT.py
Salome HOME
travail sur monPlusieurs
[tools/eficas.git] / Noyau / N_FACT.py
index 0f3def1241ae07b660c769ed8cf75a8175fbffbc..c8797c0c8b4ab1793b0a5d1b792ca6ce843d6b17 100644 (file)
@@ -1,23 +1,24 @@
-#@ MODIF N_FACT Noyau  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  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.                                 
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013   EDF R&D
 #
 #
-# 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 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.
 #
 #
-# 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.      
-#                                                                       
-#                                                                       
-# ======================================================================
+# 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 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 de definition FACT
     qui permet de spécifier les caractéristiques des mots clés facteurs
 """
 """ Ce module contient la classe de definition FACT
     qui permet de spécifier les caractéristiques des mots clés facteurs
 """
@@ -27,20 +28,25 @@ import types
 import N_ENTITE
 import N_MCFACT
 import N_MCLIST
 import N_ENTITE
 import N_MCFACT
 import N_MCLIST
+from N__F import _F
+from N_types import is_sequence
+from strfunc import ufmt
+
+import N_OBJECT
 
 class FACT(N_ENTITE.ENTITE):
    """
     Classe pour definir un mot cle facteur
 
 
 class FACT(N_ENTITE.ENTITE):
    """
     Classe pour definir un mot cle facteur
 
-    Cette classe a trois attributs de classe 
+    Cette classe a trois attributs de classe
 
 
-    - class_instance qui indique la classe qui devra etre utilisée 
-            pour créer l'objet qui servira à controler la conformité d'un 
-            mot-clé facteur avec sa définition
+      - class_instance qui indique la classe qui devra etre utilisée
+        pour créer l'objet qui servira à controler la conformité d'un
+        mot-clé facteur avec sa définition
 
 
-    - list_instance
+      - list_instance
 
 
-    - label qui indique la nature de l'objet de définition (ici, FACT)
+      - label qui indique la nature de l'objet de définition (ici, FACT)
    """
    class_instance = N_MCFACT.MCFACT
    list_instance = N_MCLIST.MCList
    """
    class_instance = N_MCFACT.MCFACT
    list_instance = N_MCLIST.MCList
@@ -48,27 +54,19 @@ class FACT(N_ENTITE.ENTITE):
 
    def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None,
                      min=0,max=1,validators=None,**args):
 
    def __init__(self,fr="",ang="",docu="",regles=(),statut='f',defaut=None,
                      min=0,max=1,validators=None,**args):
-     
+
       """
           Un mot-clé facteur est caractérisé par les attributs suivants :
 
       """
           Un mot-clé facteur est caractérisé par les attributs suivants :
 
-          - fr   :
-
-          - ang :
-
-          - statut :
-
-          - defaut :
-
-          - regles
-
-          - min
-
-          - max
-
-          - position
-
-          - docu
+            - fr   :
+            - ang :
+            - statut :
+            - defaut :
+            - regles
+            - min
+            - max
+            - position
+            - docu
       """
       N_ENTITE.ENTITE.__init__(self,validators)
       # Initialisation des attributs
       """
       N_ENTITE.ENTITE.__init__(self,validators)
       # Initialisation des attributs
@@ -89,66 +87,68 @@ class FACT(N_ENTITE.ENTITE):
 
    def __call__(self,val,nom,parent):
       """
 
    def __call__(self,val,nom,parent):
       """
-          Construit la structure de donnee pour un mot cle facteur a partir 
-          de sa definition (self) de sa valeur (val), de son nom (nom) et de 
+          Construit la structure de donnee pour un mot cle facteur a partir
+          de sa definition (self) de sa valeur (val), de son nom (nom) et de
           son parent dans l arboresence (parent)
           son parent dans l arboresence (parent)
-          
-          Suivant le type de la valeur on retournera soit un objet de type 
+
+          Suivant le type de la valeur on retournera soit un objet de type
           MCFACT soit une liste de type MCLIST.
 
           La creation d un mot cle facteur depend de son statut
           MCFACT soit une liste de type MCLIST.
 
           La creation d un mot cle facteur depend de son statut
-          Si statut ='o'   il est obligatoire
-          Si statut == 'd' il est facultatif mais ses sous mots cles avec 
-                           defaut sont visibles
-          Si statut == 'f' il est facultatif et ses sous mots avec defaut ne 
-                           sont pas visibles
-          Si statut == 'c' il est cache ???
-          Si defaut != None, on utilise cette valeur pour calculer la valeur 
-                             par defaut du mot cle facteur
+            - Si statut ='o'   il est obligatoire
+            - Si statut == 'd' il est facultatif mais ses sous mots cles avec
+              defaut sont visibles
+            - Si statut == 'f' il est facultatif et ses sous mots avec defaut ne
+              sont pas visibles
+            - Si statut == 'c' il est cache ???
+            - Si defaut != None, on utilise cette valeur pour calculer la valeur
+              par defaut du mot cle facteur
       """
       """
-      if val == None:
+      if val is None:
         if self.defaut == None:
           val={}
         elif type(self.defaut) == types.TupleType:
           val=self.defaut
               # Est ce utile ? Le défaut pourrait etre uniquement un dict
         if self.defaut == None:
           val={}
         elif type(self.defaut) == types.TupleType:
           val=self.defaut
               # Est ce utile ? Le défaut pourrait etre uniquement un dict
-        elif type(self.defaut) == types.DictType or isinstance(self.defaut,N_MCFACT._F):
+        elif type(self.defaut) == types.DictType or isinstance(self.defaut,_F):
           val=self.defaut
         else:
           # On ne devrait jamais passer par la
           print "On ne devrait jamais passer par la"
           return None
           val=self.defaut
         else:
           # On ne devrait jamais passer par la
           print "On ne devrait jamais passer par la"
           return None
-
-      if type(val) == types.TupleType or type(val) == types.ListType :
-        # on est en présence d'un MCFACT multiple !
-        l=self.list_instance()
-        l.init(nom = nom,parent=parent)
-        for v in val:
-          objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
-          l.append(objet)
-        return l
+      elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
+          # On est dans le cas où le mcfact est présent mais est une liste/tuple
+          # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
+          # obligatoires diront si un mcfact vide est accepté.
+          val = {}
+
+      # On cree toujours une liste de mcfact
+      l=self.list_instance()
+      l.init(nom = nom,parent=parent)
+      if type(val) in (types.TupleType, types.ListType, self.list_instance) :
+         for v in val:
+            if type(v) == types.DictType or isinstance(v, _F):
+               objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
+               l.append(objet)
+            elif isinstance(v, self.class_instance):
+               l.append(v)
+            else:
+               l.append(N_OBJECT.ErrorObj(self,v,parent,nom))
+      elif type(val) == types.DictType or isinstance(val, _F):
+         objet=self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+         l.append(objet)
+      elif isinstance(val, self.class_instance):
+         l.append(val)
       else:
       else:
-        return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
+         l.append(N_OBJECT.ErrorObj(self,val,parent,nom))
 
 
+      return l
 
    def verif_cata(self):
 
    def verif_cata(self):
-      if type(self.min) != types.IntType :
-         if self.min != '**':
-            self.cr.fatal("L'attribut 'min' doit etre un entier : %s" %`self.min`)
-      if type(self.max) != types.IntType :
-         if self.max != '**':
-            self.cr.fatal("L'attribut 'max' doit etre un entier : %s" %`self.max`)
-      if self.min > self.max :
-         self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
-      if type(self.fr) != types.StringType :
-         self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`)
-      if type(self.regles) != types.TupleType :
-         self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`)
-      if self.statut not in ['f','o','c','d'] :
-         self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
-      if type(self.docu) != types.StringType :
-         self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu`)
-      if self.validators and not self.validators.verif_cata():
-         self.cr.fatal("Un des validateurs est incorrect. Raison : "+self.validators.cata_info)
+      self.check_min_max()
+      self.check_fr()
+      self.check_regles()
+      self.check_statut()
+      self.check_docu()
+      self.check_validators()
       self.verif_cata_regles()
       self.verif_cata_regles()
-