1 # -*- coding: utf-8 -*-
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
21 import types,traceback
28 Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut)
32 def get_index(self,objet):
34 Retourne la position d'objet dans la liste self
36 return self.data.index(objet)
38 def ajout_possible(self):
40 Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
41 de l'élément que contient self, 0 sinon
43 max = self.data[0].definition.max
52 def isrepetable(self):
54 Indique si l'objet est répétable.
55 Retourne 1 si le mot-clé facteur self peut être répété
56 Retourne 0 dans le cas contraire
58 if self.data[0].definition.max > 1:
66 Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
68 return self.data[0].definition.statut=='o'
70 def suppentite(self,obj):
72 Supprime le mot cle facteur obj de la MCLIST
76 CONNECTOR.Emit(self,"supp",obj)
80 def addentite(self,obj,pos=None):
82 Ajoute le mot cle facteur obj a la MCLIST a la position pos
83 Retourne None si l'ajout est impossible
85 if type(obj)==types.StringType :
86 # on est en mode création d'un motcle
87 raise "traitement non prevu"
89 if not self.ajout_possible():
90 self.jdc.send_message("L'objet %s ne peut pas être ajouté" % obj.nom)
93 if self.nom != obj.nom:
99 # Traitement du copier coller seulement
100 # Les autres cas d'ajout sont traites dans MCFACT
102 obj.verif_existence_sd()
103 obj.reparent(self.parent)
108 CONNECTOR.Emit(self,"add",obj)
112 def liste_mc_presents(self):
115 def delete_concept(self,sd):
119 Fonction : Mettre a jour les fils de l objet suite à la disparition
121 Seuls les mots cles simples MCSIMP font un traitement autre
122 que de transmettre aux fils
124 for child in self.data :
125 child.delete_concept(sd)
127 def replace_concept(self,old_sd,sd):
130 - old_sd=concept remplacé
132 Fonction : Mettre a jour les fils de l objet suite au remplacement
135 for child in self.data :
136 child.replace_concept(old_sd,sd)
139 return self.data[0].definition.get_docu()
141 def get_liste_mc_inconnus(self):
143 Retourne la liste des mots-clés inconnus dans self
146 for mcfact in self.data :
147 if mcfact.isvalid() : continue
148 l_child = mcfact.get_liste_mc_inconnus()
155 def verif_condition_regles(self,liste_presents):
157 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
158 en fonction de la liste des mots-clés présents
160 # Sans objet pour une liste de mots clés facteurs
163 def deep_update_condition_bloc(self):
165 Parcourt l'arborescence des mcobject et realise l'update
166 des blocs conditionnels par appel de la methode update_condition_bloc
169 #print "deep_update_condition_bloc",self
170 for mcfact in self.data :
171 mcfact.deep_update_condition_bloc()
173 def verif_condition_bloc(self):
175 Evalue les conditions de tous les blocs fils possibles
176 (en fonction du catalogue donc de la définition) de self et
177 retourne deux listes :
178 - la première contient les noms des blocs à rajouter
179 - la seconde contient les noms des blocs à supprimer
181 # Sans objet pour une liste de mots clés facteurs (a voir !!!)
184 def init_modif(self):
186 Met l'état de l'objet à modified et propage au parent
187 qui vaut None s'il n'existe pas
189 self.state = 'modified'
191 self.parent.init_modif()
195 Méthode appelée après qu'une modification a été faite afin de déclencher
196 d'éventuels traitements post-modification
198 #print "fin_modif",self
199 CONNECTOR.Emit(self,"valid")
201 self.parent.fin_modif()
203 def get_genealogie(self):
205 Retourne la liste des noms des ascendants.
206 Un objet MCList n'est pas enregistré dans la genealogie.
207 XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
210 return self.parent.get_genealogie()
214 def get_liste_mc_ordonnee_brute(self,liste,dico):
216 Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
217 d'une entité composée dont le chemin complet est donné sous forme
218 d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
221 objet_cata = dico[arg]
222 dico=objet_cata.entites
223 return objet_cata.ordre_mc
225 def verif_existence_sd(self):
227 Vérifie que les structures de données utilisées dans self existent bien dans le contexte
228 avant étape, sinon enlève la référence à ces concepts
230 for motcle in self.data :
231 motcle.verif_existence_sd()
235 Retourne la chaine d'aide contenue dans le catalogue
236 en tenant compte de la langue
239 return self.data[0].get_fr()