]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/asnom.py
Salome HOME
35b9395d169c5fad68624e78a4005f3d12c6fd61
[tools/eficas.git] / Noyau / asnom.py
1 #@ MODIF asnom Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 #            CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
10 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
11 #                                                                       
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
16 #                                                                       
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
19 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
20 # ======================================================================
21
22 """
23 Description des types de base aster
24
25 version 2 - réécrite pour essayer de simplifier
26 le problème des instances/types et instances/instances
27
28 le type de base ASBase permet de représenter une structure
29 de donnée. Une instance de ASBase comme attribut d'une classe
30 dérivée de ASBase représente une sous-structure nommée.
31
32 une instance de ASBase 'libre' représente une instance de la
33 structure de donnée complète.
34
35 c'est ce comportement qui est capturé dans la classe StructType
36 """
37
38 from basetype import Type
39
40 class SDNom(Type):
41     """Objet représentant une sous-partie de nom
42     d'objet jeveux"""
43     nomj = None
44     debut = None
45     fin = None
46     just = None
47     justtype = None
48
49     def __init__(self, nomj=None, debut=None, fin=None, just='l', **kwargs ):
50         """
51         Configure un objet nom
52         nomj : la partie du nom fixée (par ex .TITR) ou '' si non précisée
53         debut, fin : la partie du K24 concernée
54         just : la justification a droite ou a gauche ('l' ou 'r')
55         kwargs : inutilisé, juste par simplicité
56
57         Note:
58         On utilise cet objet comme attribut d'instance ou de classe.
59         En attribut de classe pour les noms de structure, cela permet
60         de définir la position du nom d'objet dans le nom jeveux, l'attribut
61         nom est alors la valeur du suffixe pour une sous-structure ou None pour
62         une structure principale.
63         """
64         super( SDNom, self ).__init__( nomj=nomj, debut=debut, fin=fin, just=just, **kwargs )
65         self.update( (nomj, debut, fin, just) )
66
67     def __call__(self):
68         if self._parent is None or self._parent._parent is None:
69             debut = self.debut or 0
70             prefix = ' '*debut
71         else:
72             # normalement
73             # assert self._parent.nomj is self
74             nomparent = self._parent._parent.nomj
75             prefix = nomparent()
76             debut = self.debut or nomparent.fin or len(prefix)
77         fin = self.fin or 24
78         nomj = self.nomj or ''
79         nomj = self.just( nomj, fin-debut )
80         prefix = prefix.ljust(24)
81         res = prefix[:debut]+nomj+prefix[fin:]
82         return res[:24]
83
84     def fcata(self):
85         return self.just(self.nomj,self.fin-self.debut).replace(' ','?')
86
87     def __repr__(self):
88         return "<SDNom(%r,%s,%s)>" % (self.nomj,self.debut,self.fin)
89
90     # On utilise pickle pour les copies, et pickle ne sait pas gérer la
91     # sauvegarde de str.ljust ou str.rjust (c'est une méthode non liée)
92
93     def __getstate__(self):
94         return (self.nomj, self.debut, self.fin, self.justtype )
95
96     def __setstate__( self, (nomj,debut,fin,just) ):
97         self.nomj = nomj
98         self.debut = debut
99         self.fin = fin
100         if just=='l' or just is None:
101             self.just = str.ljust
102         elif just=='r':
103             self.just = str.rjust
104         else:
105             raise ValueError("Justification '%s' invalide" % just )
106         self.justtype = just
107
108
109     def update( self, (nomj,debut,fin,just) ):
110         if nomj is not None:
111             self.nomj = nomj
112         if self.debut is None:
113             self.debut = debut
114         if self.fin is None:
115             self.fin = fin
116         if self.justtype is None and just is not None:
117             if just=='l':
118                 self.just = str.ljust
119             elif just=='r':
120                 self.just = str.rjust
121             else:
122                 raise ValueError("Justification '%s' invalide" % just )
123             self.justtype = just
124
125     def reparent( self, parent, new_name ):
126         self._parent = parent
127         self._name = new_name
128         for nam in self._subtypes:
129             obj = getattr( self, nam )
130             obj.reparent( self, nam )
131         if self.nomj is None and self._parent._name is not None:
132             self.nomj = "." + self._parent._name
133
134