]> SALOME platform Git repositories - tools/eficas.git/blobdiff - Validation/V_ETAPE.py
Salome HOME
CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion
[tools/eficas.git] / Validation / V_ETAPE.py
index 0136bb746c74fc19b7acee0ae91eb15635c155ed..66adbf774b9863b7f3e0be145f8bc96c7d88b0c0 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF V_ETAPE Validation  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_ETAPE Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18,6 +19,8 @@
 #                                                                       
 #                                                                       
 # ======================================================================
 #                                                                       
 #                                                                       
 # ======================================================================
+
+
 """
    Ce module contient la classe mixin ETAPE qui porte les méthodes
    nécessaires pour réaliser la validation d'un objet de type ETAPE
 """
    Ce module contient la classe mixin ETAPE qui porte les méthodes
    nécessaires pour réaliser la validation d'un objet de type ETAPE
@@ -39,6 +42,56 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
    """
    """
 
    """
    """
 
+   def valid_child(self):
+       """ Cette methode teste la validite des mots cles de l'etape """
+       for child in self.mc_liste :
+           if not child.isvalid():
+              return 0 
+       return 1
+
+   def valid_regles(self,cr):
+       """ Cette methode teste la validite des regles de l'etape """
+       text_erreurs,test_regles = self.verif_regles()
+       if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          return 0 
+       return 1
+
+   def valid_sdnom(self,cr):
+       """ Cette methode teste la validite du nom du concept produit par l'etape """
+       valid=1
+       if self.sd.nom != None :
+          if self.jdc and self.jdc.definition.code == 'ASTER' and len(self.sd.nom) > 8 :
+             #  le nom de la sd doit avoir une longueur <= 8 caractères pour ASTER
+             if cr == 'oui' :
+                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
+             valid = 0
+          if string.find(self.sd.nom,'sansnom') != -1 :
+             # la SD est 'sansnom' : --> erreur
+             if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+             valid = 0
+          elif string.find(self.sd.nom,'SD_') != -1 :
+             # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
+             if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+             valid = 0
+       return valid
+
+   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,sd='oui',cr='non'):
       """ 
          Methode pour verifier la validité de l'objet ETAPE. Cette méthode
    def isvalid(self,sd='oui',cr='non'):
       """ 
          Methode pour verifier la validité de l'objet ETAPE. Cette méthode
@@ -60,62 +113,37 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
       if self.state == 'unchanged' :
         return self.valid
       else:
       if self.state == 'unchanged' :
         return self.valid
       else:
-        valid = 1
-        # on teste les enfants
-        for child in self.mc_liste :
-          if not child.isvalid():
-            valid = 0
-            break
-        # on teste les règles de self
-        text_erreurs,test_regles = self.verif_regles()
-        if not test_regles :
-          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
-          valid = 0
+        valid=self.valid_child()
+        valid=valid * self.valid_regles(cr)
+
         if self.reste_val != {}:
           if cr == 'oui' :
             self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
           valid=0
         if self.reste_val != {}:
           if cr == 'oui' :
             self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
           valid=0
+
         if sd == "non":
           # Dans ce cas, on ne teste qu'une validité partielle (sans tests sur le concept produit)
           # Conséquence : on ne change pas l'état ni l'attribut valid, on retourne simplement
           # l'indicateur de validité valid
           return valid
         if sd == "non":
           # Dans ce cas, on ne teste qu'une validité partielle (sans tests sur le concept produit)
           # Conséquence : on ne change pas l'état ni l'attribut valid, on retourne simplement
           # l'indicateur de validité valid
           return valid
-        #
-        # On complète les tests avec ceux sur le concept produit
-        #
-        if hasattr(self,'valid'):
-          old_valid = self.valid
-        else:
-          old_valid = None
+
+        if self.definition.reentrant == 'n' and self.reuse:
+          # Il ne peut y avoir de concept reutilise avec un OPER non reentrant
+          if cr == 'oui' : self.cr.fatal('Operateur non reentrant : ne pas utiliser reuse ')
+          valid=0
 
         if self.sd == None:
           # Le concept produit n'existe pas => erreur
           if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
           valid = 0
         else:
 
         if self.sd == None:
           # Le concept produit n'existe pas => erreur
           if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
           valid = 0
         else:
-          # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
-          # la SD existe déjà : on regarde son nom
-          if self.sd.nom != None :
-            if len(self.sd.nom) > 8 and self.jdc.definition.code == 'ASTER' :
-              if cr == 'oui' :
-                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
-              valid = 0
-            if string.find(self.sd.nom,'sansnom') != -1 :
-              # la SD est 'sansnom' : --> erreur
-              if cr == 'oui' :
-                self.cr.fatal("Pas de nom pour le concept retourné")
-              valid = 0
-            elif string.find(self.sd.nom,'SD_') != -1 :
-              # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
-              if cr == 'oui' :
-                self.cr.fatal("Pas de nom pour le concept retourné")
-              valid = 0
+          valid = valid * self.valid_sdnom(cr)
+
         if valid:
           valid = self.update_sdprod(cr)
         if valid:
           valid = self.update_sdprod(cr)
-        self.valid = valid
-        self.state = 'unchanged'
-        if old_valid:
-          if old_valid != self.valid : self.init_modif_up()
+
+        self.set_valid(valid)
+
         return self.valid
 
    def update_sdprod(self,cr='non'):
         return self.valid
 
    def update_sdprod(self,cr='non'):
@@ -151,11 +179,12 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
         if AsType(self.reuse) != sd_prod:
           if cr == 'oui' : self.cr.fatal('Type de concept reutilise incompatible avec type produit')
           valid= 0
         if AsType(self.reuse) != sd_prod:
           if cr == 'oui' : self.cr.fatal('Type de concept reutilise incompatible avec type produit')
           valid= 0
-        if self.sdnom[0] != '_' and self.reuse.nom != self.sdnom:
-          # Le nom de la variable de retour (self.sdnom) doit etre le meme que celui du concept reutilise (self.reuse.nom)
-          if cr == 'oui' : 
-             self.cr.fatal('Concept reutilise : le nom de la variable de retour devrait etre %s et non %s' %(self.reuse.nom,self.sdnom))
-          valid= 0
+        if self.sdnom!='':
+           if self.sdnom[0] != '_' and self.reuse.nom != self.sdnom:
+             # Le nom de la variable de retour (self.sdnom) doit etre le meme que celui du concept reutilise (self.reuse.nom)
+             if cr == 'oui' : 
+                self.cr.fatal('Concept reutilise : le nom de la variable de retour devrait etre %s et non %s' %(self.reuse.nom,self.sdnom))
+             valid= 0
         if valid:self.sd=self.reuse
       else:
         if sd_prod == None:# Pas de concept retourné
         if valid:self.sd=self.reuse
       else:
         if sd_prod == None:# Pas de concept retourné
@@ -172,7 +201,6 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
         if self.definition.reentrant == 'o':
            if cr == 'oui' : self.cr.fatal('Commande obligatoirement reentrante : specifier reuse=concept')
            valid=0 
         if self.definition.reentrant == 'o':
            if cr == 'oui' : self.cr.fatal('Commande obligatoirement reentrante : specifier reuse=concept')
            valid=0 
-           #self.reuse = self.sd
       return valid
 
 
       return valid