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 os,traceback,string
23 from Noyau.N_CR import CR
24 from Noyau.N_Exception import AsException
25 from Noyau import N_OBJECT
26 from Ihm import I_OBJECT
27 from Extensions.i18n import tr
29 class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
31 Cette classe sert à définir les objets de type Commande commentarisée
33 nature = "COMMANDE_COMMENTARISEE"
36 def __init__(self,texte='',parent=None,reg='oui'):
39 self.jdc = self.parent = CONTEXT.get_current_step()
41 self.jdc = self.parent = parent
42 if hasattr(self.parent,'etape'):
43 self.etape = self.parent.etape
48 self.niveau = self.parent.niveau
50 self.state="unchanged"
51 #self.appel = N_utils.callee_where(niveau=2)
52 if reg=='oui' : self.register()
59 Génère l'objet rapport (classe CR)
62 if not self.isvalid(): self.cr.warn(tr("Objet commande commentarisé invalide"))
67 Retourne une copie de self cad un objet COMMANDE_COMM
69 # XXX self.texte ne semble pas exister ???
70 return COMMANDE_COMM(self.texte,parent = self.parent,reg='non')
73 self.state = 'modified'
74 self.parent.init_modif()
76 def set_valeur(self,new_valeur):
78 Remplace la valeur de self(si elle existe) par new_valeur)
80 self.valeur = new_valeur
83 def get_valeur(self) :
85 Retourne la valeur de self, cad le texte de la commande commentarisée
91 Enregistre la commande commenatrisée dans la liste des étapes de son parent lorsque celui-ci
94 self.parent.register(self)
98 Indique si self est obligatoire ou non : retourne toujours 0
104 Retourne le nom interne associé à self
105 Ce nom n'est jamais vu par l'utilisateur dans EFICAS
109 def isrepetable(self):
111 Indique si self est répétable ou non : retourne toujours 1
115 def get_attribut(self,nom_attribut) :
117 Retourne l'attribut de nom nom_attribut de self (ou hérité)
119 if hasattr(self,nom_attribut) :
120 return getattr(self,nom_attribut)
126 Retourne l'attribut fr de self.definition
128 if self.jdc.code=='ASTER' : return self.definition.fr
130 return getattr(self.definition,self.jdc.lang)
134 def liste_mc_presents(self):
139 Méthode qui supprime toutes les boucles de références afin que l'objet puisse
140 être correctement détruit par le garbage collector
146 self.definition = None
151 def supprime_sdprods(self):
154 def update_context(self,d):
156 Update le dictionnaire d avec les concepts ou objets produits par self
157 --> ne fait rien pour une commande en commentaire
161 def delete_concept(self,sd):
164 def replace_concept (self,old_sd,sd):
167 def get_sdprods(self,nom_sd):
172 Cette méthode a pour but de décommentariser l'objet courant,
173 cad de retourner un tuple contenant :
174 - l'objet CMD associé
175 - le nom de la sdprod éventuellement produite (sinon None)
177 # on récupère le contexte avant la commande commentarisée
178 context_ini = self.jdc.get_contexte_avant(self)
180 # on essaie de créer un objet JDC...
181 CONTEXT.unset_current_step()
182 if re.search('Fin Commentaire',self.valeur) :
183 self.valeur=self.valeur.replace('Fin Commentaire','')
184 J=self.jdc.__class__(procedure=self.valeur,
185 definition=self.jdc.definition,
187 cata_ord_dico=self.jdc.cata_ordonne_dico,
188 context_ini = context_ini,
192 traceback.print_exc()
193 #self.jdc.set_context()
194 raise AsException(tr("Erreur"),e.__str__())
195 if len(J.cr.crfatal)>0 :
196 # des erreurs fatales ont été rencontrées
197 #self.jdc.set_context()
198 print 'erreurs fatales !!!'
199 raise AsException(tr("Erreurs fatales"),string.join(J.cr.crfatal))
201 # des erreurs ont été rencontrées
202 raise AsException(tr("Impossible reconstruire commande\n"),str(J.cr))
203 #self.jdc.set_context()
205 new_etape = J.etapes[0]
207 nom_sd = new_etape.sd.nom
210 #new_etape=new_etape.copy()
211 #print "uncomment",new_etape.sd
213 pos=self.parent.etapes.index(self)
214 # L'ordre d'appel est important : suppentite fait le menage des concepts dans les etapes suivantes
215 self.parent.addentite(new_etape,pos)
216 self.parent.suppentite(self)
217 return new_etape,nom_sd
221 Rend l'etape courante active
227 Rend l'etape courante inactive
233 Booléenne qui retourne 1 si self est valide, 0 sinon
237 def verif_condition_bloc(self):
239 Evalue les conditions de tous les blocs fils possibles
240 (en fonction du catalogue donc de la définition) de self et
241 retourne deux listes :
242 - la première contient les noms des blocs à rajouter
243 - la seconde contient les noms des blocs à supprimer
247 def verif_condition_regles(self,liste_presents):
249 Retourne la liste des mots-clés à rajouter pour satisfaire les règles
250 en fonction de la liste des mots-clés présents
254 def reparent(self,parent):
256 Cette methode sert a reinitialiser la parente de l'objet
259 self.jdc=parent.get_jdc_root()
262 def verif_existence_sd(self):
264 Vérifie que les structures de données utilisées dans self existent bien dans le contexte
265 avant étape, sinon enlève la référence à ces concepts
266 --> sans objet pour les commandes commentarisées
270 def control_sdprods(self,d):
271 """sans objet pour les commandes commentarisées"""
277 def reset_context(self):