1 # -*- coding: utf-8 -*-
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
20 import types,traceback
21 from Extensions.i18n import tr
22 from Extensions.eficas_exception import EficasException
29 Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut)
33 def get_index(self,objet):
35 Retourne la position d'objet dans la liste self
37 return self.data.index(objet)
39 def ajout_possible(self):
41 Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
42 de l'élément que contient self, 0 sinon
44 max = self.data[0].definition.max
53 def isrepetable(self):
55 Indique si l'objet est répétable.
56 Retourne 1 si le mot-clé facteur self peut être répété
57 Retourne 0 dans le cas contraire
59 if self.data[0].definition.max > 1:
67 Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
69 return self.data[0].definition.statut=='o'
71 def suppentite(self,obj):
73 Supprime le mot cle facteur obj de la MCLIST
80 CONNECTOR.Emit(self,"supp",obj)
81 self.update_condition_bloc()
87 def addentite(self,obj,pos=None):
89 Ajoute le mot cle facteur obj a la MCLIST a la position pos
90 Retourne None si l'ajout est impossible
92 if type(obj)==types.StringType :
93 # on est en mode création d'un motcle
94 raise EficasException(tr("traitement non-prevu"))
96 if not self.ajout_possible():
97 self.jdc.appli.affiche_alerte(tr("Erreur"),
98 tr("L'objet %s ne peut pas etre ajoute", obj.nom))
101 if self.nom != obj.nom:
107 # Traitement du copier coller seulement
108 # Les autres cas d'ajout sont traites dans MCFACT
110 obj.verif_existence_sd()
111 obj.reparent(self.parent)
116 CONNECTOR.Emit(self,"add",obj)
118 self.update_condition_bloc()
121 def liste_mc_presents(self):
124 def update_concept(self,sd):
125 for child in self.data :
126 child.update_concept(sd)
128 def delete_concept(self,sd):
132 Fonction : Mettre a jour les fils de l objet suite a la disparition
134 Seuls les mots cles simples MCSIMP font un traitement autre
135 que de transmettre aux fils
137 for child in self.data :
138 child.delete_concept(sd)
140 def replace_concept(self,old_sd,sd):
143 - old_sd=concept remplacé
145 Fonction : Mettre a jour les fils de l objet suite au remplacement
148 for child in self.data :
149 child.replace_concept(old_sd,sd)
152 return self.data[0].definition.get_docu()
154 def get_liste_mc_inconnus(self):
156 Retourne la liste des mots-clés inconnus dans self
159 for mcfact in self.data :
160 if mcfact.isvalid() : continue
161 l_child = mcfact.get_liste_mc_inconnus()
168 def verif_condition_regles(self,liste_presents):
170 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
171 en fonction de la liste des mots-clés présents
173 # Sans objet pour une liste de mots clés facteurs
176 def deep_update_condition_bloc(self):
178 Parcourt l'arborescence des mcobject et realise l'update
179 des blocs conditionnels par appel de la methode update_condition_bloc
181 #print "deep_update_condition_bloc",self
182 for mcfact in self.data :
183 mcfact.deep_update_condition_bloc()
185 def update_condition_bloc(self):
187 Propage la mise a jour des conditions au parent.
188 Une liste ne fait pas de traitement sur les conditions
190 if self.parent: self.parent.update_condition_bloc()
192 def verif_condition_bloc(self):
194 Evalue les conditions de tous les blocs fils possibles
195 (en fonction du catalogue donc de la définition) de self et
196 retourne deux listes :
197 - la première contient les noms des blocs à rajouter
198 - la seconde contient les noms des blocs à supprimer
200 # Sans objet pour une liste de mots clés facteurs (a voir !!!)
203 def init_modif(self):
205 Met l'état de l'objet à modified et propage au parent
206 qui vaut None s'il n'existe pas
208 self.state = 'modified'
210 self.parent.init_modif()
214 Méthode appelée après qu'une modification a été faite afin de déclencher
215 d'éventuels traitements post-modification
217 #print "fin_modif",self
218 CONNECTOR.Emit(self,"valid")
220 self.parent.fin_modif()
222 def get_genealogie_precise(self):
224 return self.parent.get_genealogie_precise()
228 def get_genealogie(self):
230 Retourne la liste des noms des ascendants.
231 Un objet MCList n'est pas enregistré dans la genealogie.
232 XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
235 return self.parent.get_genealogie()
239 def get_liste_mc_ordonnee_brute(self,liste,dico):
241 Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
242 d'une entité composée dont le chemin complet est donné sous forme
243 d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
246 objet_cata = dico[arg]
247 dico=objet_cata.entites
248 return objet_cata.ordre_mc
250 def verif_existence_sd(self):
252 Vérifie que les structures de données utilisées dans self existent bien dans le contexte
253 avant étape, sinon enlève la référence à ces concepts
255 for motcle in self.data :
256 motcle.verif_existence_sd()
260 Retourne la chaine d'aide contenue dans le catalogue
261 en tenant compte de la langue
264 return self.data[0].get_fr()
270 Retourne l'objet normalisé. Une liste est déjà normalisée
274 def update_mc_global(self):
276 Met a jour les mots cles globaux enregistrés dans l'étape parente
277 et dans le jdc parent.
278 Une liste ne peut pas etre globale. Elle se contente de passer
279 la requete a ses fils.
281 for motcle in self.data :
282 motcle.update_mc_global()
284 def delete_mc_global(self):
285 for motcle in self.data :
286 motcle.delete_mc_global()
289 # print "__del__",self