Salome HOME
cht version
[tools/eficas.git] / Noyau / N_OBJECT.py
1 ## coding=utf-8
2 # Copyright (C) 2007-2021   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19
20
21 """
22     Ce module contient la classe OBJECT classe mère de tous les objets
23     servant à controler les valeurs par rapport aux définitions
24 """
25 from __future__ import absolute_import
26 try :
27     from builtins import object
28 except :
29     pass
30 from .N_CR import CR
31
32
33 class OBJECT(object):
34
35     """
36        Classe OBJECT : cette classe est virtuelle et sert de classe mère
37        aux classes de type ETAPE et MOCLES.
38        Elle ne peut etre instanciée.
39        Une sous classe doit obligatoirement implémenter les méthodes :
40
41        - __init__
42
43     """
44
45     def getEtape(self):
46         """
47            Retourne l'étape à laquelle appartient self
48            Un objet de la catégorie etape doit retourner self pour indiquer que
49            l'étape a été trouvée
50            XXX double emploi avec self.etape ???
51         """
52         if self.parent == None:
53             return None
54         return self.parent.getEtape()
55
56     def supprime(self):
57         """
58            Méthode qui supprime les références arrières suffisantes pour
59            que l'objet puisse etre correctement détruit par le
60            garbage collector
61         """
62         self.parent = None
63         self.etape = None
64         self.jdc = None
65         self.niveau = None
66
67
68     def getVal(self):
69         """
70             Retourne la valeur de l'objet. Cette méthode fournit
71             une valeur par defaut. Elle doit etre dérivée pour chaque
72             type d'objet
73         """
74         return self
75
76
77     def getJdcRoot(self):
78         """
79             Cette méthode doit retourner l'objet racine c'est à dire celui qui
80             n'a pas de parent
81         """
82         if self.parent:
83             return self.parent.getJdcRoot()
84         else:
85             return self
86
87     def getValeurEffective(self, val):
88         """
89             Retourne la valeur effective du mot-clé en fonction
90             de la valeur donnée. Defaut si val == None
91         """
92         if (val is None and hasattr(self.definition, 'defaut')):
93             return self.definition.defaut
94         else:
95             return val
96
97     def reparent(self, parent):
98         """
99            Cette methode sert a reinitialiser la parente de l'objet
100         """
101         self.parent = parent
102         self.jdc = parent.jdc
103
104     def isBLOC(self):
105         """
106             Indique si l'objet est un BLOC
107             surcharge dans MCBLOC
108         """
109         return 0
110
111     def longueurDsArbre(self):
112         if self.nom == "Consigne" : return 0
113         if self.nom == "blocConsigne" : return 0
114         return 1
115
116
117
118 class ErrorObj(OBJECT):
119
120     """Classe pour objets errones : emule le comportement d'un objet tel mcsimp ou mcfact
121     """
122
123     def __init__(self, definition, valeur, parent, nom="err"):
124         self.nom = nom
125         self.definition = definition
126         self.valeur = valeur
127         self.parent = parent
128         self.mcListe = []
129         if parent:
130             self.jdc = self.parent.jdc
131             # self.niveau = self.parent.niveau
132             # self.etape = self.parent.etape
133         else:
134             # Pas de parent
135             self.jdc = None
136             # self.niveau = None
137             # self.etape = None
138
139     def isValid(self, cr='non'):
140         return 0
141
142     def report(self):
143         """ génère le rapport de validation de self """
144         self.cr = CR()
145         self.cr.debut = u"Mot-clé invalide : " + self.nom
146         self.cr.fin = u"Fin Mot-clé invalide : " + self.nom
147         self.cr.fatal(_(u"Type non autorisé pour le mot-clé %s : '%s'"),
148                       self.nom, self.valeur)
149         return self.cr
150
151
152 def newGetattr(self,name):
153     try :
154        fils=self.getChildOrChildInBloc(name,restreint='non')
155        if fils : 
156           if fils.nature == 'MCSIMP' : return fils.valeur
157           if fils.nature == 'MCList' : 
158              if fils[0].definition.max == 1 : return fils[0]
159           return fils
160     except :
161        raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
162     raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
163
164 def newGetattrForEtape(self,name):
165     try :
166        lesFils=self.getEtapesByName(name)
167        if lesFils != [] : return lesFils
168     except :
169        raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
170     raise AttributeError("%r object has no attribute %r" % (self.__class__.__name__, name))
171
172 def activeSurcharge():
173     from .N_MCCOMPO import MCCOMPO
174     MCCOMPO.__getattr__ = newGetattr
175     from .N_JDC import JDC
176     JDC.__getattr__ = newGetattrForEtape
177