1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 Ce module contient la classe de base MCCOMPO qui sert à factoriser
24 les traitements des objets composites de type OBJECT
31 from Noyau import N_CR
32 from Noyau.N_Exception import AsException
33 from Noyau.strfunc import ufmt, to_unicode
37 L'attribut mc_liste a été créé par une classe dérivée de la
38 classe MCCOMPO du Noyau
44 self.state = 'undetermined'
45 # défini dans les classes dérivées
48 def init_modif_up(self):
50 Propage l'état modifié au parent s'il existe et n'est pas l'objet
53 if self.parent and self.parent != self :
54 self.parent.state = 'modified'
58 Génère le rapport de validation de self
61 self.cr.debut = self.txt_nat+self.nom
62 self.cr.fin = u"Fin "+self.txt_nat+self.nom
63 for child in self.mc_liste:
64 self.cr.add(child.report())
65 self.state = 'modified'
67 self.isvalid(cr='oui')
69 if CONTEXT.debug : traceback.print_exc()
70 self.cr.fatal(' '.join((self.txt_nat, self.nom, str(e))))
73 def verif_regles(self):
75 A partir du dictionnaire des mots-clés présents, vérifie si les règles
76 de self sont valides ou non.
78 Retourne une chaine et un booléen :
80 - texte = la chaine contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
82 - testglob = booléen 1 si toutes les règles OK, 0 sinon
84 # On verifie les regles avec les defauts affectés
85 dictionnaire = self.dict_mc_presents(restreint='non')
88 for r in self.definition.regles:
89 erreurs,test = r.verif(dictionnaire)
90 testglob = testglob*test
92 texte.append(to_unicode(erreurs))
93 texte = os.linesep.join(texte)
94 return texte, testglob
96 def dict_mc_presents(self,restreint='non'):
98 Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
99 Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
100 une valeur par défaut
101 Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
102 l'utilisateur (cas de la vérification des règles)
105 # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement présents
106 for v in self.mc_liste:
107 if v == None : continue
110 if restreint == 'oui' : return dico
111 # Si restreint != 'oui',
112 # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
113 # possibles pour peu qu'ils aient une valeur par défaut
114 for k,v in self.definition.entites.items():
115 if v.label != 'SIMP' : continue
116 if not v.defaut : continue
117 if not dico.has_key(k):
118 dico[k]=v(nom=k,val=None,parent=self)
119 #on ajoute l'objet detenteur de regles pour des validations plus sophistiquees (a manipuler avec precaution)