1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 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 from __future__ import absolute_import
21 import types,traceback
22 from Extensions.i18n import tr
23 from Extensions.eficas_exception import EficasException
25 from . import CONNECTOR
30 Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
34 def getIndex(self,objet):
36 Retourne la position d'objet dans la liste self
38 return self.data.index(objet)
40 def ajoutPossible(self):
42 Methode booleenne qui retourne 1 si on peut encore ajouter une occurrence
43 de l'element que contient self, 0 sinon
45 max = self.data[0].definition.max
46 if max == '**' or max == float('inf'):
54 def isRepetable(self):
56 Indique si l'objet est repetable.
57 Retourne 1 si le mot-cle facteur self peut etre repete
58 Retourne 0 dans le cas contraire
60 if self.data[0].definition.max > 1:
68 Une MCList n'est jamais obligatoire (meme si le MCFACT qu'elle represente l'est
70 return self.data[0].definition.statut=='o'
72 def suppEntite(self,obj):
74 Supprime le mot cle facteur obj de la MCLIST
81 CONNECTOR.Emit(self,"supp",obj)
82 self.updateConditionBloc()
89 def addEntite(self,obj,pos=None):
91 Ajoute le mot cle facteur obj a la MCLIST a la position pos
92 Retourne None si l'ajout est impossible
94 if type(obj)==bytes or type(obj) == str :
95 # on est en mode creation d'un motcle
96 raise EficasException(tr("traitement non-prevu"))
98 if not self.ajoutPossible():
99 self.jdc.editor.afficheAlerte(tr("Erreur"),
100 tr("L'objet %s ne peut pas etre ajoute", obj.nom))
103 if self.nom != obj.nom:
109 # traitement du copier coller seulement
110 # Les autres cas d'ajout sont traites dans MCFACT
112 obj.verifExistenceSd()
113 obj.reparent(self.parent)
118 CONNECTOR.Emit(self,"add",obj)
120 self.updateConditionBloc()
123 def listeMcPresents(self):
126 def updateConcept(self,sd):
127 for child in self.data :
128 child.updateConcept(sd)
131 for child in self.data :
134 def deleteConcept(self,sd):
138 Fonction : Mettre a jour les fils de l objet suite a la disparition
140 Seuls les mots cles simples MCSIMP font un traitement autre
141 que de transmettre aux fils
143 for child in self.data :
144 child.deleteConcept(sd)
146 def replaceConcept(self,old_sd,sd):
149 - old_sd=concept remplace
151 Fonction : Mettre a jour les fils de l objet suite au remplacement
154 for child in self.data :
155 child.replaceConcept(old_sd,sd)
158 return self.data[0].definition.getDocu()
160 def getListeMcInconnus(self):
162 Retourne la liste des mots-cles inconnus dans self
165 for mcfact in self.data :
166 if mcfact.isValid() : continue
167 l_child = mcfact.getListeMcInconnus()
174 def verifConditionRegles(self,liste_presents):
176 Retourne la liste des mots-cles a rajouter pour satisfaire les regles
177 en fonction de la liste des mots-cles presents
179 # Sans objet pour une liste de mots cles facteurs
182 def deepUpdateConditionBloc(self):
184 Parcourt l'arborescence des mcobject et realise l'update
185 des blocs conditionnels par appel de la methode updateConditionBloc
187 #print "deepUpdateConditionBloc",self
188 for mcfact in self.data :
189 mcfact.deepUpdateConditionBloc()
191 def updateConditionBloc(self):
193 Propage la mise a jour des conditions au parent.
194 Une liste ne fait pas de traitement sur les conditions
196 if self.parent: self.parent.updateConditionBloc()
198 def verifConditionBloc(self):
200 Evalue les conditions de tous les blocs fils possibles
201 (en fonction du catalogue donc de la definition) de self et
202 retourne deux listes :
203 - la premiere contient les noms des blocs a rajouter
204 - la seconde contient les noms des blocs a supprimer
206 # Sans objet pour une liste de mots cles facteurs (a voir !!!)
211 Met l'etat de l'objet a modified et propage au parent
212 qui vaut None s'il n'existe pas
214 self.state = 'modified'
216 self.parent.initModif()
220 Methode appelee apres qu'une modification a ete faite afin de declencher
221 d'eventuels traitements post-modification
223 #print "finModif",self
224 CONNECTOR.Emit(self,"valid")
226 self.parent.finModif()
228 def getGenealogiePrecise(self):
230 return self.parent.getGenealogiePrecise()
234 def getGenealogie(self):
236 Retourne la liste des noms des ascendants.
237 Un objet MCList n'est pas enregistre dans la genealogie.
238 XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
241 return self.parent.getGenealogie()
245 def getListeMcOrdonneeBrute(self,liste,dico):
247 Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
248 d'une entite composee dont le chemin complet est donne sous forme
249 d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
252 objet_cata = dico[arg]
253 dico=objet_cata.entites
254 return objet_cata.ordre_mc
256 def verifExistenceSd(self):
258 Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
259 avant etape, sinon enleve la reference a ces concepts
261 for motcle in self.data :
262 motcle.verifExistenceSd()
266 Retourne la chaine d'aide contenue dans le catalogue
267 en tenant compte de la langue
270 return self.data[0].getFr()
276 Retourne l'objet normalise. Une liste est deja normalisee
280 def updateMcGlobal(self):
282 Met a jour les mots cles globaux enregistres dans l'etape parente
283 et dans le jdc parent.
284 Une liste ne peut pas etre globale. Elle se contente de passer
285 la requete a ses fils.
287 for motcle in self.data :
288 motcle.updateMcGlobal()
290 def deleteMcGlobal(self):
291 for motcle in self.data :
292 motcle.deleteMcGlobal()
296 # print "__del__",self