Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
[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 copy(self):
75     """
76        Réalise la copie d'une MCList
77     """
78     liste = self.data[0].definition.list_instance()
79     # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
80     liste.init(self.nom,self.parent)
81     for objet in self:
82       new_obj = objet.copy()
83       # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
84       # dans lequel le parent de l'element d'une MCList est le parent de la MCList
85       new_obj.reparent(self.parent)
86       liste.append(new_obj)
87     return liste
88
89   def get_docu(self):
90     return self.data[0].definition.get_docu()
91
92   def get_liste_mc_inconnus(self):
93      """
94      Retourne la liste des mots-clés inconnus dans self
95      """
96      l_mc = []
97      for mcfact in self.data :
98         if mcfact.isvalid() : continue
99         l_child = mcfact.get_liste_mc_inconnus()
100         for mc in l_child:
101            l = [self]
102            l.extend(mc)
103            l_mc.append(l)
104      return l_mc
105
106   def verif_condition_regles(self,liste_presents):
107     """
108         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
109         en fonction de la liste des mots-clés présents
110     """
111     # Sans objet pour une liste de mots clés facteurs
112     return []
113
114   def verif_condition_bloc(self):
115     """ 
116         Evalue les conditions de tous les blocs fils possibles 
117         (en fonction du catalogue donc de la définition) de self et 
118         retourne deux listes :
119         - la première contient les noms des blocs à rajouter
120         - la seconde contient les noms des blocs à supprimer
121     """
122     # Sans objet pour une liste de mots clés facteurs
123     return [],[]
124
125   def init_modif(self):
126     """
127        Met l'état de l'objet à modified et propage au parent
128        qui vaut None s'il n'existe pas
129     """
130     self.state = 'modified'
131     if self.parent:
132       self.parent.init_modif()
133
134   def get_etape(self):
135      """
136         Retourne l'étape à laquelle appartient self
137         Un objet de la catégorie etape doit retourner self pour indiquer que
138         l'étape a été trouvée
139         XXX double emploi avec self.etape ???
140      """
141      if self.parent == None: return None
142      return self.parent.get_etape()
143
144   def get_genealogie(self):
145      """
146          Retourne la liste des noms des ascendants.
147          Un objet MCList n'est pas enregistré dans la genealogie.
148          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
149      """
150      if self.parent: 
151         return self.parent.get_genealogie()
152      else:
153         return []
154
155   def get_liste_mc_ordonnee_brute(self,liste,dico):
156      """
157          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
158          d'une entité composée dont le chemin complet est donné sous forme
159          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
160      """
161      for arg in liste:
162         objet_cata = dico[arg]
163         dico=objet_cata.dico
164      return objet_cata.liste
165
166   def reparent(self,parent):
167      """
168          Cette methode sert a reinitialiser la parente de l'objet
169      """
170      self.parent=parent
171      self.jdc=parent.jdc
172      self.etape=parent.etape
173      for mcfact in self.data:
174         mcfact.reparent(parent)
175
176   def verif_existence_sd(self):
177      """
178         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
179         avant étape, sinon enlève la référence à ces concepts
180      """
181      for motcle in self.data :
182          motcle.verif_existence_sd()
183
184   def get_sd_utilisees(self):
185     """
186         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
187         ( comme valorisation d'un MCS)
188     """
189     l=[]
190     for motcle in self.data:
191       l.extend(motcle.get_sd_utilisees())
192     return l
193