Salome HOME
CCAR: Modified Files:
[tools/eficas.git] / Ihm / I_MCLIST.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 from copy import copy
21
22 class MCList:
23   def isMCList(self):
24     """ 
25        Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
26     """
27     return 1
28
29   def get_index(self,objet):
30     """
31         Retourne la position d'objet dans la liste self
32     """
33     return self.data.index(objet)
34
35   def ajout_possible(self):
36     """ 
37         Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
38         de l'élément que contient self, 0 sinon 
39     """
40     max = self.data[0].definition.max
41     if max == '**':
42       return 1
43     else:
44       if len(self) < max :
45         return 1
46       else:
47         return 0
48
49   def isoblig(self):
50      """
51      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
52      """
53      return 0
54      #for i in self.data:
55      #  if i.isoblig():return 1
56      #return 0
57
58   def liste_mc_presents(self):
59     return []
60
61   def delete_concept(self,sd):
62     """ 
63         Inputs :
64            sd=concept detruit
65         Fonction :
66            Mettre a jour les fils de l objet suite à la disparition 
67            du concept sd
68            Seuls les mots cles simples MCSIMP font un traitement autre 
69            que de transmettre aux fils
70     """
71     for child in self.data :
72       child.delete_concept(sd)
73
74   def replace_concept(self,old_sd,sd):
75     """
76         Inputs :
77            old_sd=concept remplacé
78            sd=nouveau concept
79         Fonction :
80            Mettre a jour les fils de l objet suite au remplacement 
81            du concept old_sd
82     """
83     for child in self.data :
84       child.replace_concept(old_sd,sd)
85
86   def copy(self):
87     """
88        Réalise la copie d'une MCList
89     """
90     liste = self.data[0].definition.list_instance()
91     # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
92     liste.init(self.nom,self.parent)
93     for objet in self:
94       new_obj = objet.copy()
95       # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
96       # dans lequel le parent de l'element d'une MCList est le parent de la MCList
97       new_obj.reparent(self.parent)
98       liste.append(new_obj)
99     return liste
100
101   def get_docu(self):
102     return self.data[0].definition.get_docu()
103
104   def get_liste_mc_inconnus(self):
105      """
106      Retourne la liste des mots-clés inconnus dans self
107      """
108      l_mc = []
109      for mcfact in self.data :
110         if mcfact.isvalid() : continue
111         l_child = mcfact.get_liste_mc_inconnus()
112         for mc in l_child:
113            l = [self]
114            l.extend(mc)
115            l_mc.append(l)
116      return l_mc
117
118   def verif_condition_regles(self,liste_presents):
119     """
120         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
121         en fonction de la liste des mots-clés présents
122     """
123     # Sans objet pour une liste de mots clés facteurs
124     return []
125
126   def verif_condition_bloc(self):
127     """ 
128         Evalue les conditions de tous les blocs fils possibles 
129         (en fonction du catalogue donc de la définition) de self et 
130         retourne deux listes :
131         - la première contient les noms des blocs à rajouter
132         - la seconde contient les noms des blocs à supprimer
133     """
134     # Sans objet pour une liste de mots clés facteurs
135     return [],[]
136
137   def init_modif(self):
138     """
139        Met l'état de l'objet à modified et propage au parent
140        qui vaut None s'il n'existe pas
141     """
142     self.state = 'modified'
143     if self.parent:
144       self.parent.init_modif()
145
146   def get_etape(self):
147      """
148         Retourne l'étape à laquelle appartient self
149         Un objet de la catégorie etape doit retourner self pour indiquer que
150         l'étape a été trouvée
151         XXX double emploi avec self.etape ???
152      """
153      if self.parent == None: return None
154      return self.parent.get_etape()
155
156   def get_genealogie(self):
157      """
158          Retourne la liste des noms des ascendants.
159          Un objet MCList n'est pas enregistré dans la genealogie.
160          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
161      """
162      if self.parent: 
163         return self.parent.get_genealogie()
164      else:
165         return []
166
167   def get_liste_mc_ordonnee_brute(self,liste,dico):
168      """
169          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
170          d'une entité composée dont le chemin complet est donné sous forme
171          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
172      """
173      for arg in liste:
174         objet_cata = dico[arg]
175         dico=objet_cata.entites
176      return objet_cata.ordre_mc
177
178   def reparent(self,parent):
179      """
180          Cette methode sert a reinitialiser la parente de l'objet
181      """
182      self.parent=parent
183      self.jdc=parent.jdc
184      self.etape=parent.etape
185      for mcfact in self.data:
186         mcfact.reparent(parent)
187
188   def verif_existence_sd(self):
189      """
190         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
191         avant étape, sinon enlève la référence à ces concepts
192      """
193      for motcle in self.data :
194          motcle.verif_existence_sd()
195
196   def get_sd_utilisees(self):
197     """
198         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
199         ( comme valorisation d'un MCS)
200     """
201     l=[]
202     for motcle in self.data:
203       l.extend(motcle.get_sd_utilisees())
204     return l
205
206   def get_fr(self):
207      """
208          Retourne la chaine d'aide contenue dans le catalogue
209          en tenant compte de la langue
210      """
211      try :
212         return self.data[0].get_fr()
213      except:
214         return ''
215