]> SALOME platform Git repositories - tools/eficas.git/blob - Ihm/I_MCLIST.py
Salome HOME
CCAR: modifications pour :
[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 delete_concept(self,sd):
116     """ 
117         Inputs :
118            - sd=concept detruit
119         Fonction : Mettre a jour les fils de l objet suite à la disparition 
120         du concept sd
121         Seuls les mots cles simples MCSIMP font un traitement autre 
122         que de transmettre aux fils
123     """
124     for child in self.data :
125       child.delete_concept(sd)
126
127   def replace_concept(self,old_sd,sd):
128     """
129         Inputs :
130            - old_sd=concept remplacé
131            - sd=nouveau concept
132         Fonction : Mettre a jour les fils de l objet suite au remplacement 
133         du concept old_sd
134     """
135     for child in self.data :
136       child.replace_concept(old_sd,sd)
137
138   def get_docu(self):
139     return self.data[0].definition.get_docu()
140
141   def get_liste_mc_inconnus(self):
142      """
143      Retourne la liste des mots-clés inconnus dans self
144      """
145      l_mc = []
146      for mcfact in self.data :
147         if mcfact.isvalid() : continue
148         l_child = mcfact.get_liste_mc_inconnus()
149         for mc in l_child:
150            l = [self]
151            l.extend(mc)
152            l_mc.append(l)
153      return l_mc
154
155   def verif_condition_regles(self,liste_presents):
156     """
157         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
158         en fonction de la liste des mots-clés présents
159     """
160     # Sans objet pour une liste de mots clés facteurs
161     return []
162
163   def deep_update_condition_bloc(self):
164      """
165         Parcourt l'arborescence des mcobject et realise l'update
166         des blocs conditionnels par appel de la methode update_condition_bloc
167      """
168     
169      #print "deep_update_condition_bloc",self
170      for mcfact in self.data :
171          mcfact.deep_update_condition_bloc()
172
173   def verif_condition_bloc(self):
174     """ 
175         Evalue les conditions de tous les blocs fils possibles 
176         (en fonction du catalogue donc de la définition) de self et 
177         retourne deux listes :
178            - la première contient les noms des blocs à rajouter
179            - la seconde contient les noms des blocs à supprimer
180     """
181     # Sans objet pour une liste de mots clés facteurs (a voir !!!)
182     return [],[]
183
184   def init_modif(self):
185     """
186        Met l'état de l'objet à modified et propage au parent
187        qui vaut None s'il n'existe pas
188     """
189     self.state = 'modified'
190     if self.parent:
191       self.parent.init_modif()
192
193   def fin_modif(self):
194     """
195       Méthode appelée après qu'une modification a été faite afin de déclencher
196       d'éventuels traitements post-modification
197     """
198     #print "fin_modif",self
199     CONNECTOR.Emit(self,"valid")
200     if self.parent:
201       self.parent.fin_modif()
202
203   def get_genealogie(self):
204      """
205          Retourne la liste des noms des ascendants.
206          Un objet MCList n'est pas enregistré dans la genealogie.
207          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
208      """
209      if self.parent: 
210         return self.parent.get_genealogie()
211      else:
212         return []
213
214   def get_liste_mc_ordonnee_brute(self,liste,dico):
215      """
216          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
217          d'une entité composée dont le chemin complet est donné sous forme
218          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
219      """
220      for arg in liste:
221         objet_cata = dico[arg]
222         dico=objet_cata.entites
223      return objet_cata.ordre_mc
224
225   def verif_existence_sd(self):
226      """
227         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
228         avant étape, sinon enlève la référence à ces concepts
229      """
230      for motcle in self.data :
231          motcle.verif_existence_sd()
232
233   def get_fr(self):
234      """
235          Retourne la chaine d'aide contenue dans le catalogue
236          en tenant compte de la langue
237      """
238      try :
239         return self.data[0].get_fr()
240      except:
241         return ''
242