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 from __future__ import absolute_import
21 from __future__ import print_function
23 from builtins import str
28 from Noyau.N_CR import CR
29 from Noyau.N_Exception import AsException
30 from Noyau import N_OBJECT
31 from Ihm import I_OBJECT
32 from Extensions.i18n import tr
34 class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
36 Cette classe sert a definir les objets de type Commande commentarisee
38 nature = "COMMANDE_COMMENTARISEE"
41 def __init__(self,texte='',parent=None,reg='oui'):
44 self.jdc = self.parent = CONTEXT.get_current_step()
46 self.jdc = self.parent = parent
47 if hasattr(self.parent,'etape'):
48 self.etape = self.parent.etape
53 self.niveau = self.parent.niveau
55 self.state="unchanged"
56 #self.appel = N_utils.callee_where(niveau=2)
57 if reg=='oui' : self.register()
64 Genere l'objet rapport (classe CR)
67 if not self.isvalid(): self.cr.warn(tr("Objet commande commentarise invalide"))
72 Retourne une copie de self cad un objet COMMANDE_COMM
74 # XXX self.texte ne semble pas exister ???
75 return COMMANDE_COMM(self.texte,parent = self.parent,reg='non')
78 self.state = 'modified'
79 self.parent.init_modif()
81 def set_valeur(self,new_valeur):
83 Remplace la valeur de self(si elle existe) par new_valeur)
85 self.valeur = new_valeur
88 def get_valeur(self) :
90 Retourne la valeur de self, cad le texte de la commande commentarisee
96 Enregistre la commande commenatrisee dans la liste des etapes de son parent lorsque celui-ci
99 self.parent.register(self)
103 Indique si self est obligatoire ou non : retourne toujours 0
109 Retourne le nom interne associe a self
110 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
114 def isrepetable(self):
116 Indique si self est repetable ou non : retourne toujours 1
120 def get_attribut(self,nom_attribut) :
122 Retourne l'attribut de nom nom_attribut de self (ou herite)
124 if hasattr(self,nom_attribut) :
125 return getattr(self,nom_attribut)
131 Retourne l'attribut fr de self.definition
133 if self.jdc.code=='ASTER' : return self.definition.fr
135 return getattr(self.definition,self.jdc.lang)
139 def liste_mc_presents(self):
144 Methode qui supprime toutes les boucles de references afin que l'objet puisse
145 etre correctement detruit par le garbage collector
151 self.definition = None
156 def supprime_sdprods(self):
159 def update_context(self,d):
161 Update le dictionnaire d avec les concepts ou objets produits par self
162 --> ne fait rien pour une commande en commentaire
166 def delete_concept(self,sd):
169 def replace_concept (self,old_sd,sd):
172 def get_sdprods(self,nom_sd):
177 Cette methode a pour but de decommentariser l'objet courant,
178 cad de retourner un tuple contenant :
179 - l'objet CMD associe
180 - le nom de la sdprod eventuellement produite (sinon None)
182 # on recupere le contexte avant la commande commentarisee
183 context_ini = self.jdc.get_contexte_avant(self)
185 # on essaie de creer un objet JDC...
186 CONTEXT.unset_current_step()
187 if re.search('Fin Commentaire',self.valeur) :
188 self.valeur=self.valeur.replace('Fin Commentaire','')
189 J=self.jdc.__class__(procedure=self.valeur,
190 definition=self.jdc.definition,
192 cata_ord_dico=self.jdc.cata_ordonne_dico,
193 context_ini = context_ini,
196 except Exception as e:
197 traceback.print_exc()
198 #self.jdc.set_context()
199 raise AsException(tr("Erreur"),e.__str__())
200 if len(J.cr.crfatal)>0 :
201 # des erreurs fatales ont ete rencontrees
202 #self.jdc.set_context()
203 print ('erreurs fatales !!!')
204 raise AsException(tr("Erreurs fatales"),''.join(J.cr.crfatal))
206 # des erreurs ont ete rencontrees
207 raise AsException(tr("Impossible reconstruire commande\n"),str(J.cr))
208 #self.jdc.set_context()
210 new_etape = J.etapes[0]
212 nom_sd = new_etape.sd.nom
215 #new_etape=new_etape.copy()
216 #print "uncomment",new_etape.sd
218 pos=self.parent.etapes.index(self)
219 # L'ordre d'appel est important : suppentite fait le menage des concepts dans les etapes suivantes
220 self.parent.addentite(new_etape,pos)
221 self.parent.suppentite(self)
222 return new_etape,nom_sd
226 Rend l'etape courante active
232 Rend l'etape courante inactive
238 Booleenne qui retourne 1 si self est valide, 0 sinon
242 def verif_condition_bloc(self):
244 Evalue les conditions de tous les blocs fils possibles
245 (en fonction du catalogue donc de la definition) de self et
246 retourne deux listes :
247 - la premiere contient les noms des blocs a rajouter
248 - la seconde contient les noms des blocs a supprimer
252 def verif_condition_regles(self,liste_presents):
254 Retourne la liste des mots-cles a rajouter pour satisfaire les regles
255 en fonction de la liste des mots-cles presents
259 def reparent(self,parent):
261 Cette methode sert a reinitialiser la parente de l'objet
264 self.jdc=parent.get_jdc_root()
267 def verif_existence_sd(self):
269 Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
270 avant etape, sinon enleve la reference a ces concepts
271 --> sans objet pour les commandes commentarisees
275 def control_sdprods(self,d):
276 """sans objet pour les commandes commentarisees"""
282 def reset_context(self):