Salome HOME
CCAR: Mise a niveau Noyau avec Aster 7.2.11 + correction bug sur les blocs
[tools/eficas.git] / Noyau / N_MCSIMP.py
1 #@ MODIF N_MCSIMP Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
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 """ 
22     Ce module contient la classe MCSIMP qui sert à controler la valeur
23     d'un mot-clé simple par rapport à sa définition portée par un objet
24     de type ENTITE
25 """
26
27 import types
28 from copy import copy
29
30 from Noyau.N_ASSD import ASSD,assd
31 import N_OBJECT
32
33 class MCSIMP(N_OBJECT.OBJECT):
34    """
35    """
36    nature = 'MCSIMP'
37    def __init__(self,val,definition,nom,parent):
38       """
39          Attributs :
40
41           - val : valeur du mot clé simple
42
43           - definition
44
45           - nom
46
47           - parent
48
49         Autres attributs :
50
51           - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
52
53       """
54       self.definition=definition
55       self.nom=nom
56       self.val = val
57       self.parent = parent
58       self.valeur = self.GETVAL(self.val)
59       if parent :
60          self.jdc = self.parent.jdc
61          self.niveau = self.parent.niveau
62          self.etape = self.parent.etape
63       else:
64          # Le mot cle simple a été créé sans parent
65          self.jdc = None
66          self.niveau = None
67          self.etape = None
68          
69    def GETVAL(self,val):
70       """ 
71           Retourne la valeur effective du mot-clé en fonction
72           de la valeur donnée. Defaut si val == None
73       """
74       if (val is None and hasattr(self.definition,'defaut')) :
75         return self.definition.defaut
76       else:
77         return val
78
79    def get_valeur(self):
80       """
81           Retourne la "valeur" d'un mot-clé simple.
82           Cette valeur est utilisée lors de la création d'un contexte 
83           d'évaluation d'expressions à l'aide d'un interpréteur Python
84       """
85       return self.valeur
86
87    def get_val(self):
88       """
89           Une autre méthode qui retourne une "autre" valeur du mot clé simple.
90           Elle est utilisée par la méthode get_mocle
91       """
92       return self.valeur
93
94    def accept(self,visitor):
95       """
96          Cette methode permet de parcourir l'arborescence des objets
97          en utilisant le pattern VISITEUR
98       """
99       visitor.visitMCSIMP(self)
100
101    def copy(self):
102       """ Retourne une copie de self """
103       objet = self.makeobjet()
104       # il faut copier les listes et les tuples mais pas les autres valeurs
105       # possibles (réel,SD,...)
106       if type(self.valeur) in (types.ListType,types.TupleType):
107          objet.valeur = copy(self.valeur)
108       else:
109          objet.valeur = self.valeur
110       objet.val = objet.valeur
111       return objet
112
113    def makeobjet(self):
114       return self.definition(val = None, nom = self.nom,parent = self.parent)
115
116    def reparent(self,parent):
117       """
118          Cette methode sert a reinitialiser la parente de l'objet
119       """
120       self.parent=parent
121       self.jdc=parent.jdc
122       self.etape=parent.etape
123
124    def get_sd_utilisees(self):
125       """ 
126           Retourne une liste qui contient la SD utilisée par self si c'est le cas
127           ou alors une liste vide
128       """
129       l=[]
130       if type(self.valeur) == types.InstanceType:
131         #XXX Est ce différent de isinstance(self.valeur,ASSD) ??
132         if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur)
133       elif type(self.valeur) in (types.TupleType,types.ListType):
134         for val in self.valeur :
135            if type(val) == types.InstanceType:
136               if issubclass(val.__class__,ASSD) : l.append(val)
137       return l