Salome HOME
F.R: - correction bug sur opérateur strictement réentrant (ex:DEFI_GROUP)
[tools/eficas.git] / Ihm / I_MCLIST.py
1 from copy import copy
2
3 class MCList:
4   def isMCList(self):
5     """ 
6        Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
7     """
8     return 1
9
10   def get_index(self,objet):
11     """
12         Retourne la position d'objet dans la liste self
13     """
14     return self.data.index(objet)
15
16   def ajout_possible(self):
17     """ 
18         Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
19         de l'élément que contient self, 0 sinon 
20     """
21     max = self.data[0].definition.max
22     if max == '**':
23       return 1
24     else:
25       if len(self) < max :
26         return 1
27       else:
28         return 0
29
30   def isoblig(self):
31      """
32      Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
33      """
34      return 0
35      #for i in self.data:
36      #  if i.isoblig():return 1
37      #return 0
38
39   def liste_mc_presents(self):
40     return []
41
42   def delete_concept(self,sd):
43     """ 
44         Inputs :
45            sd=concept detruit
46         Fonction :
47            Mettre a jour les fils de l objet suite à la disparition 
48            du concept sd
49            Seuls les mots cles simples MCSIMP font un traitement autre 
50            que de transmettre aux fils
51     """
52     for child in self.data :
53       child.delete_concept(sd)
54
55   def copy(self):
56     """
57        Réalise la copie d'une MCList
58     """
59     liste = self.data[0].definition.list_instance()
60     # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
61     liste.init(self.nom,self.parent)
62     for objet in self:
63       new_obj = objet.copy()
64       # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
65       # dans lequel le parent de l'element d'une MCList est le parent de la MCList
66       new_obj.reparent(self.parent)
67       liste.append(new_obj)
68     return liste
69
70   def get_docu(self):
71     return self.data[0].definition.get_docu()
72
73   def get_liste_mc_inconnus(self):
74      """
75      Retourne la liste des mots-clés inconnus dans self
76      """
77      l_mc = []
78      for mcfact in self.data :
79         if mcfact.isvalid() : continue
80         l_child = mcfact.get_liste_mc_inconnus()
81         if l_child :
82            l = [self]
83            l.extend(l_child)
84            l_mc.append(l)
85      return l_mc
86
87   def verif_condition_regles(self,liste_presents):
88     """
89         Retourne la liste des mots-clés à rajouter pour satisfaire les règles
90         en fonction de la liste des mots-clés présents
91     """
92     # Sans objet pour une liste de mots clés facteurs
93     return []
94
95   def verif_condition_bloc(self):
96     """ 
97         Evalue les conditions de tous les blocs fils possibles 
98         (en fonction du catalogue donc de la définition) de self et 
99         retourne deux listes :
100         - la première contient les noms des blocs à rajouter
101         - la seconde contient les noms des blocs à supprimer
102     """
103     # Sans objet pour une liste de mots clés facteurs
104     return [],[]
105
106   def init_modif(self):
107     """
108        Met l'état de l'objet à modified et propage au parent
109        qui vaut None s'il n'existe pas
110     """
111     self.state = 'modified'
112     if self.parent:
113       self.parent.init_modif()
114
115   def get_etape(self):
116      """
117         Retourne l'étape à laquelle appartient self
118         Un objet de la catégorie etape doit retourner self pour indiquer que
119         l'étape a été trouvée
120         XXX double emploi avec self.etape ???
121      """
122      if self.parent == None: return None
123      return self.parent.get_etape()
124
125   def get_genealogie(self):
126      """
127          Retourne la liste des noms des ascendants.
128          Un objet MCList n'est pas enregistré dans la genealogie.
129          XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
130      """
131      if self.parent: 
132         return self.parent.get_genealogie()
133      else:
134         return []
135
136   def get_liste_mc_ordonnee_brute(self,liste,dico):
137      """
138          Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
139          d'une entité composée dont le chemin complet est donné sous forme
140          d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
141      """
142      for arg in liste:
143         objet_cata = dico[arg]
144         dico=objet_cata.dico
145      return objet_cata.liste
146
147   def reparent(self,parent):
148      """
149          Cette methode sert a reinitialiser la parente de l'objet
150      """
151      self.parent=parent
152      self.jdc=parent.jdc
153      self.etape=parent.etape
154      for mcfact in self.data:
155         mcfact.reparent(parent)
156
157   def verif_existence_sd(self):
158      """
159         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
160         avant étape, sinon enlève la référence à ces concepts
161      """
162      for motcle in self.data :
163          motcle.verif_existence_sd()