Salome HOME
premiere version
[tools/eficas.git] / Noyau / N_ASSD_NonAster.py
1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013   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
23 """
24
25 class ASSD(object):
26    """
27       Classe de base pour definir des types de structures de donnees ASTER
28       equivalent d un concept ASTER
29    """
30    idracine="SD"
31
32    def __init__(self,etape=None,sd=None,reg='oui'):
33       """
34         reg est un paramètre qui vaut oui ou non :
35           - si oui (défaut) : on enregistre la SD auprès du JDC
36           - si non : on ne l'enregistre pas
37       """
38       self.etape=etape
39       self.sd=sd
40       self.nom=None
41       if etape:
42         self.parent=etape.parent
43       else:
44         self.parent=CONTEXT.get_current_step()
45       if self.parent :
46          self.jdc = self.parent.get_jdc_root()
47       else:
48          self.jdc = None
49
50       if not self.parent:
51         self.id=None
52       elif reg == 'oui' :
53         self.id = self.parent.reg_sd(self)
54       else :
55         self.id = self.parent.o_register(self)
56       # permet de savoir si le concept a été calculé (1) ou non (0)
57       self.executed = 0
58       # initialise la partie "sd"
59       super(ASSD, self).__init__(nomj='?&?&?&?&')
60       
61    def __getitem__(self,key):
62       return self.etape[key]
63
64    def set_name(self, nom):
65       """Positionne le nom de self (et appelle sd_init)
66       """
67       self.nom = nom
68       # test car FORMULE n'a pas de SD associée
69       meth = getattr(super(ASSD, self), 'set_name', None)
70       if meth:
71          meth(nom)
72    
73    def reparent_sd(self):
74       """Repositionne le parent des attributs de la SD associée.
75       """
76       # test car FORMULE n'a pas de SD associée
77       meth = getattr(super(ASSD, self), 'reparent', None)
78       if meth:
79          meth(None, None)
80    
81    def get_name(self):
82       """
83           Retourne le nom de self, éventuellement en le demandant au JDC
84       """
85       if not self.nom :
86          try:
87             self.nom=self.parent.get_name(self) or self.id
88          except:
89             self.nom=""
90       if self.nom.find('sansnom') != -1 or self.nom == '':
91          self.nom = self.id
92       return self.nom
93
94    def supprime(self):
95       """ 
96           Cassage des boucles de références pour destruction du JDC 
97       """
98       self.etape = None
99       self.sd = None
100       self.jdc = None
101       self.parent = None
102
103    def accept(self,visitor):
104       """
105          Cette methode permet de parcourir l'arborescence des objets
106          en utilisant le pattern VISITEUR
107       """
108       visitor.visitASSD(self)
109
110    def __getstate__(self):
111       """
112           Cette methode permet de pickler les objets ASSD
113           Ceci est possible car on coupe les liens avec les objets
114           parent, etape et jdc qui conduiraient à pickler de nombreux 
115           objets inutiles ou non picklables.
116       """
117       d=self.__dict__.copy()
118       for key in ('parent','etape','jdc'):
119           if d.has_key(key):del d[key]
120       for key in d.keys():
121           if key[0]=='_':del d[key]
122       return d
123
124    def par_lot(self):
125       """
126            Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
127       """
128       if not hasattr(self, 'jdc') or self.jdc == None:
129          val = None
130       else:
131          val = self.jdc.par_lot
132       return val == 'OUI'
133
134 class assd(ASSD):
135    def __convert__(cls,valeur):
136       return valeur
137    __convert__=classmethod(__convert__)