Salome HOME
CCAR:
[tools/eficas.git] / Extensions / etape_niveau.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 """
21     Ce module contient la classe ETAPE_NIVEAU qui sert à 
22     concrétiser les niveaux au sein d'un JDC
23 """
24 import traceback
25
26 from Noyau import N_OBJECT
27
28 class ETAPE_NIVEAU(N_OBJECT.OBJECT):
29
30   def __init__(self,niveau,parent):
31     self.parent = parent
32     self.jdc = self.parent.get_jdc_root()
33     self.niveau = self
34     self.definition = niveau
35     self.etapes=[]
36     self.etapes_niveaux = []
37     self.dict_niveaux={}
38     self.editmode = 0
39     self.build_niveaux()
40
41   def build_niveaux(self):
42     for niveau in self.definition.l_niveaux:
43       etape_niveau = ETAPE_NIVEAU(niveau,self)
44       self.etapes_niveaux.append(etape_niveau)
45       self.dict_niveaux[niveau.nom]=etape_niveau
46
47   def register(self,etape):
48     """ 
49           Enregistre la commande étape :
50           - si editmode = 0 : on est en mode relecture d'un fichier de commandes
51           auquel cas on ajoute etape à la fin de la liste self.etapes
52           - si editmode = 1 : on est en mode ajout d'étape depuis eficas auquel cas
53           cette méthode ne fait rien, c'est addentité qui enregistre etape
54           à la bonne place dans self.etapes 
55     """
56     if self.editmode : return
57     self.etapes.append(etape)
58
59   def unregister(self,etape):
60     """
61         Desenregistre l'etape du niveau
62     """
63     self.etapes.remove(etape)
64
65   def ident(self):
66     return self.definition.label
67
68   def isactif(self):
69     #print 'Niveau : ',self.definition.nom
70     #print '\tactif =',self.definition.actif
71     if self.definition.actif == 1 :
72       return 1
73     else :
74       # self.actif est une condition à évaluer dans un certain contexte ...
75       d = self.cree_dict_valeurs()
76       try:
77         t=eval(self.definition.actif,d)
78         return t
79       except:
80         traceback.print_exc()
81         return 0
82
83   def cree_dict_valeurs(self):
84     """
85     Retourne le dictionnaire des frères aînés de self composé des couples :
86     {nom_frère isvalid()}
87     """
88     d={}
89     for niveau in self.parent.etapes_niveaux:
90       if niveau is self : break
91       d[niveau.definition.nom]=niveau.isvalid()
92     return d
93
94   def isvalid(self):
95     """ Méthode booléenne qui retourne 0 si le niveau est invalide, 1 sinon """
96     if self.etapes_niveaux == []:
97       if len(self.etapes) == 0:
98         return self.definition.valide_vide
99       else:
100         for etape in self.etapes :
101           if not etape.isvalid() : return 0
102         return 1
103     else:
104       for etape_niveau in self.etapes_niveaux :
105         if not etape_niveau.isvalid() : return 0
106       return 1
107
108   def accept(self,visitor):
109     visitor.visitETAPE_NIVEAU(self)
110
111   def addentite(self,name,pos_rel):
112     self.editmode = 1
113     try :
114       pos_abs=self.jdc.get_nb_etapes_avant(self)+pos_rel
115       cmd = self.jdc.addentite(name,pos_abs)
116       self.etapes.insert(pos_rel,cmd)
117       self.editmode = 0
118       return cmd
119     except:
120       traceback.print_exc()
121       self.editmode = 0
122       return None
123
124   def suppentite(self,etape) :
125     """ Classe ETAPE_NIVEAU
126         Supprime une étape 
127     """
128     self.jdc.suppentite(etape)
129
130