Salome HOME
PN vielles macros
[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 from copy import copy
22
23 class MCList:
24   def isMCList(self):
25     """ 
26        Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
27     """
28     return 1
29
30   def get_index(self,objet):
31     """
32         Retourne la position d'objet dans la liste self
33     """
34     return self.data.index(objet)
35
36   def ajout_possible(self):
37     """ 
38         Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
39         de l'élément que contient self, 0 sinon 
40     """
41     max = self.data[0].definition.max
42     if max == '**':
43       return 1
44     else:
45       if len(self) < max :
46         return 1
47       else:
48         return 0
49
50   def isrepetable(self):
51     """
52        Indique si l'objet est répétable.
53        Retourne 1 si le mot-clé facteur self peut être répété
54        Retourne 0 dans le cas contraire
55     """
56     if self.data[0].definition.max > 1:
57        # marche avec '**'
58        return 1
59     else :
60        return 0
61
62   def isoblig(self):
63      """
64      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
65      """
66      return self.data[0].definition.statut=='o'
67      #return 0
68
69   def liste_mc_presents(self):
70     return []
71
72   def delete_concept(self,sd):
73     """ 
74         Inputs :
75            - sd=concept detruit
76         Fonction : Mettre a jour les fils de l objet suite à la disparition 
77         du concept sd
78         Seuls les mots cles simples MCSIMP font un traitement autre 
79         que de transmettre aux fils
80     """
81     for child in self.data :
82       child.delete_concept(sd)
83
84   def replace_concept(self,old_sd,sd):
85     """
86         Inputs :
87            - old_sd=concept remplacé
88            - sd=nouveau concept
89         Fonction : Mettre a jour les fils de l objet suite au remplacement 
90         du concept old_sd
91     """
92     for child in self.data :
93       child.replace_concept(old_sd,sd)
94
95   def get_docu(self):
96     return self.data[0].definition.get_docu()
97
98   def get_liste_mc_inconnus(self):
99      """
100      Retourne la liste des mots-clés inconnus dans self
101      """
102      l_mc = []
103      for mcfact in self.data :
104         if mcfact.isvalid() : continue
105         l_child = mcfact.get_liste_mc_inconnus()
106         for mc in l_child:
107            l = [self]
108            l.extend(mc)
109            l_mc.append(l)
110      return l_mc
111
112   def verif_condition_regles(self,liste_presents):
113     """
114         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
115         en fonction de la liste des mots-clés présents
116     """
117     # Sans objet pour une liste de mots clés facteurs
118     return []
119
120   def verif_condition_bloc(self):
121     """ 
122         Evalue les conditions de tous les blocs fils possibles 
123         (en fonction du catalogue donc de la définition) de self et 
124         retourne deux listes :
125            - la première contient les noms des blocs à rajouter
126            - la seconde contient les noms des blocs à supprimer
127     """
128     # Sans objet pour une liste de mots clés facteurs
129     return [],[]
130
131   def init_modif(self):
132     """
133        Met l'état de l'objet à modified et propage au parent
134        qui vaut None s'il n'existe pas
135     """
136     self.state = 'modified'
137     if self.parent:
138       self.parent.init_modif()
139
140   def fin_modif(self):
141     """
142       Méthode appelée après qu'une modification a été faite afin de déclencher
143       d'éventuels traitements post-modification
144     """
145     if self.parent:
146       self.parent.fin_modif()
147
148   def get_genealogie(self):
149      """
150          Retourne la liste des noms des ascendants.
151          Un objet MCList n'est pas enregistré dans la genealogie.
152          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
153      """
154      if self.parent: 
155         return self.parent.get_genealogie()
156      else:
157         return []
158
159   def get_liste_mc_ordonnee_brute(self,liste,dico):
160      """
161          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
162          d'une entité composée dont le chemin complet est donné sous forme
163          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
164      """
165      for arg in liste:
166         objet_cata = dico[arg]
167         dico=objet_cata.entites
168      return objet_cata.ordre_mc
169
170   def verif_existence_sd(self):
171      """
172         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
173         avant étape, sinon enlève la référence à ces concepts
174      """
175      for motcle in self.data :
176          motcle.verif_existence_sd()
177
178   def get_fr(self):
179      """
180          Retourne la chaine d'aide contenue dans le catalogue
181          en tenant compte de la langue
182      """
183      try :
184         return self.data[0].get_fr()
185      except:
186         return ''
187