Salome HOME
CCAR: modifications pour permettre l'edition des includes et poursuites
[tools/eficas.git] / Ihm / I_MCLIST.py
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.
9 #
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.
14 #
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.
18 #
19 #
20 # ======================================================================
21 import types,traceback
22 from copy import copy
23 import CONNECTOR
24
25 class MCList:
26   def isMCList(self):
27     """ 
28        Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
29     """
30     return 1
31
32   def get_index(self,objet):
33     """
34         Retourne la position d'objet dans la liste self
35     """
36     return self.data.index(objet)
37
38   def ajout_possible(self):
39     """ 
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 
42     """
43     max = self.data[0].definition.max
44     if max == '**':
45       return 1
46     else:
47       if len(self) < max :
48         return 1
49       else:
50         return 0
51
52   def isrepetable(self):
53     """
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
57     """
58     if self.data[0].definition.max > 1:
59        # marche avec '**'
60        return 1
61     else :
62        return 0
63
64   def isoblig(self):
65      """
66      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
67      """
68      return self.data[0].definition.statut=='o'
69   
70   def suppentite(self,obj):
71       """
72         Supprime le mot cle facteur obj de la MCLIST
73       """
74       self.init_modif()
75       self.remove(obj)
76       CONNECTOR.Emit(self,"supp",obj)
77       self.fin_modif()
78       return 1
79
80   def addentite(self,obj,pos=None):
81       """
82         Ajoute le mot cle facteur obj a la MCLIST a la position pos
83         Retourne None si l'ajout est impossible
84       """
85       if type(obj)==types.StringType :
86          # on est en mode création d'un motcle
87          raise "traitement non prevu"
88
89       if not self.ajout_possible():
90          self.jdc.send_message("L'objet %s ne peut pas être ajouté" % obj.nom)
91          return None
92
93       if self.nom != obj.nom:
94          return None
95
96       if obj.isMCList():
97          obj=obj.data[0]
98
99       # Traitement du copier coller seulement 
100       # Les autres cas d'ajout sont traites dans MCFACT
101       self.init_modif()
102       obj.verif_existence_sd()
103       obj.reparent(self.parent)
104       if pos is None:
105          self.append(obj)
106       else:
107          self.insert(pos,obj)
108       CONNECTOR.Emit(self,"add",obj)
109       self.fin_modif()
110       return obj
111
112   def liste_mc_presents(self):
113     return []
114
115   def update_concept(self,sd):
116     for child in self.data :
117         child.update_concept(sd)
118
119   def delete_concept(self,sd):
120     """ 
121         Inputs :
122            - sd=concept detruit
123         Fonction : Mettre a jour les fils de l objet suite à la disparition 
124         du concept sd
125         Seuls les mots cles simples MCSIMP font un traitement autre 
126         que de transmettre aux fils
127     """
128     for child in self.data :
129       child.delete_concept(sd)
130
131   def replace_concept(self,old_sd,sd):
132     """
133         Inputs :
134            - old_sd=concept remplacé
135            - sd=nouveau concept
136         Fonction : Mettre a jour les fils de l objet suite au remplacement 
137         du concept old_sd
138     """
139     for child in self.data :
140       child.replace_concept(old_sd,sd)
141
142   def get_docu(self):
143     return self.data[0].definition.get_docu()
144
145   def get_liste_mc_inconnus(self):
146      """
147      Retourne la liste des mots-clés inconnus dans self
148      """
149      l_mc = []
150      for mcfact in self.data :
151         if mcfact.isvalid() : continue
152         l_child = mcfact.get_liste_mc_inconnus()
153         for mc in l_child:
154            l = [self]
155            l.extend(mc)
156            l_mc.append(l)
157      return l_mc
158
159   def verif_condition_regles(self,liste_presents):
160     """
161         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
162         en fonction de la liste des mots-clés présents
163     """
164     # Sans objet pour une liste de mots clés facteurs
165     return []
166
167   def deep_update_condition_bloc(self):
168      """
169         Parcourt l'arborescence des mcobject et realise l'update
170         des blocs conditionnels par appel de la methode update_condition_bloc
171      """
172     
173      #print "deep_update_condition_bloc",self
174      for mcfact in self.data :
175          mcfact.deep_update_condition_bloc()
176
177   def verif_condition_bloc(self):
178     """ 
179         Evalue les conditions de tous les blocs fils possibles 
180         (en fonction du catalogue donc de la définition) de self et 
181         retourne deux listes :
182            - la première contient les noms des blocs à rajouter
183            - la seconde contient les noms des blocs à supprimer
184     """
185     # Sans objet pour une liste de mots clés facteurs (a voir !!!)
186     return [],[]
187
188   def init_modif(self):
189     """
190        Met l'état de l'objet à modified et propage au parent
191        qui vaut None s'il n'existe pas
192     """
193     self.state = 'modified'
194     if self.parent:
195       self.parent.init_modif()
196
197   def fin_modif(self):
198     """
199       Méthode appelée après qu'une modification a été faite afin de déclencher
200       d'éventuels traitements post-modification
201     """
202     #print "fin_modif",self
203     CONNECTOR.Emit(self,"valid")
204     if self.parent:
205       self.parent.fin_modif()
206
207   def get_genealogie(self):
208      """
209          Retourne la liste des noms des ascendants.
210          Un objet MCList n'est pas enregistré dans la genealogie.
211          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
212      """
213      if self.parent: 
214         return self.parent.get_genealogie()
215      else:
216         return []
217
218   def get_liste_mc_ordonnee_brute(self,liste,dico):
219      """
220          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
221          d'une entité composée dont le chemin complet est donné sous forme
222          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
223      """
224      for arg in liste:
225         objet_cata = dico[arg]
226         dico=objet_cata.entites
227      return objet_cata.ordre_mc
228
229   def verif_existence_sd(self):
230      """
231         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
232         avant étape, sinon enlève la référence à ces concepts
233      """
234      for motcle in self.data :
235          motcle.verif_existence_sd()
236
237   def get_fr(self):
238      """
239          Retourne la chaine d'aide contenue dans le catalogue
240          en tenant compte de la langue
241      """
242      try :
243         return self.data[0].get_fr()
244      except:
245         return ''
246