X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Validation%2FV_MACRO_ETAPE.py;h=5c2186150f28cc841439f8c55ec405391929770b;hb=a7d5f18fe322c770026b50343adc09ed0472c192;hp=f4ce18923959f922c7ea5479a95c052daee418c6;hpb=243fbe08b8fbc49d4ae0a5374069e9133b7b4b31;p=tools%2Feficas.git diff --git a/Validation/V_MACRO_ETAPE.py b/Validation/V_MACRO_ETAPE.py index f4ce1892..5c218615 100644 --- a/Validation/V_MACRO_ETAPE.py +++ b/Validation/V_MACRO_ETAPE.py @@ -1,3 +1,26 @@ +#@ MODIF V_MACRO_ETAPE Validation DATE 22/02/2005 AUTEUR DURAND C.DURAND +# -*- coding: iso-8859-1 -*- +# 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. +# +# 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 EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + + """ Ce module contient la classe mixin MACRO_ETAPE qui porte les méthodes nécessaires pour réaliser la validation d'un objet de type MACRO_ETAPE @@ -41,54 +64,52 @@ class MACRO_ETAPE(V_ETAPE.ETAPE): if self.state == 'unchanged' : return self.valid else: - valid = 1 - if hasattr(self,'valid'): - old_valid = self.valid - else: - old_valid = None - # on teste, si elle existe, le nom de la sd (sa longueur doit être <= 8 caractères) - if self.sd != None : - # la SD existe déjà : on regarde son nom - if self.sd.get_name() != None : - if len(self.sd.nom) > 8 : - 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 - # 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=1 + # On marque les concepts CO pour verification ulterieure de leur bonne utilisation + l=self.mark_CO() + # On verifie que les concepts CO sont bien passes par type_sdprod + for c in l: + if c.etape is self.parent: + # le concept est propriete de l'etape parent + # Il n'a pas ete transforme par type_sdprod + # Cette situation est interdite + # Pb: La macro-commande a passe le concept a une commande (macro ?) mal definie + if cr =='oui': + self.cr.fatal("Macro-commande mal definie : manque probablement appel a type_sdprod pour %s" % c.nom) + valid=0 + + valid=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 sd == 'oui' and valid: + + if sd == "non": + # Dans ce cas, on ne calcule qu'une validite partielle, on ne modifie pas l'état de self + # on retourne simplement l'indicateur valid + return valid + + if self.sd != None : + valid = valid * self.valid_sdnom(cr) + + if self.definition.reentrant == 'n' and self.reuse: + # Il ne peut y avoir de concept reutilise avec une MACRO non reentrante + if cr == 'oui' : self.cr.fatal('Macro-commande non reentrante : ne pas utiliser reuse ') + valid=0 + + if valid: valid = self.update_sdprod(cr) + # Si la macro comprend des etapes internes, on teste leur validite for e in self.etapes: if not e.isvalid(): valid=0 break - 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'): @@ -122,17 +143,24 @@ class MACRO_ETAPE(V_ETAPE.ETAPE): self.sd=None if cr == 'oui' : l=traceback.format_exception(sys.exc_info()[0], - sys.exc_info()[1], - sys.exc_info()[2]) + sys.exc_info()[1], + sys.exc_info()[2]) self.cr.fatal('Impossible d affecter un type au résultat\n'+string.join(l[2:])) return 0 # on teste maintenant si la SD est r\351utilis\351e ou s'il faut la cr\351er + valid=1 if self.reuse: + # Un concept reutilise a ete specifie if AsType(self.reuse) != sd_prod: if cr == 'oui' : self.cr.fatal('Type de concept reutilise incompatible avec type produit') - return 0 - self.sd=self.reuse - return 1 + 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é # Que faut il faire de l eventuel ancien sd ? @@ -146,10 +174,11 @@ class MACRO_ETAPE(V_ETAPE.ETAPE): # Le sd n existait pas , on ne le crée pas self.typret=sd_prod if cr == 'oui' : self.cr.fatal("Concept retourné non défini") - return 0 + valid=0 if self.definition.reentrant == 'o': - self.reuse = self.sd - return 1 + if cr == 'oui' : self.cr.fatal('Commande obligatoirement reentrante : specifier reuse=concept') + valid=0 + return valid def report(self): """