Salome HOME
CCAR: evolution demandee dans la fiche EO2001-066 : on peut specifier dans editeur.ini
[tools/eficas.git] / Extensions / nuplet.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 de définition pour les nuplets NUPL
22 """
23 # Modules Python
24 import types
25
26 # Modules Eficas
27 from Noyau import N_ENTITE,N_MCLIST,N_CR
28 import mcnuplet
29
30 class NUPL(N_ENTITE.ENTITE):
31    """
32    """
33    class_instance = mcnuplet.MCNUPLET
34    list_instance = N_MCLIST.MCList
35    label='NUPLET'
36    CR=N_CR.CR
37
38    def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
39                     elements=None):
40       N_ENTITE.ENTITE.__init__(self)
41       self.fr=fr
42       self.ang=ang
43       self.docu=docu
44       self.statut=statut
45       self.defaut=defaut
46       self.min=min
47       self.max=max
48       self.entites=elements
49       self.regles=()
50       # on force le statut des sous entites a obligatoire
51       for e in elements:e.statut='o'
52       self.idracine="NUPLET"
53       self.affecter_parente()
54
55    def verif_cata(self):
56       """
57           Cette methode sert à valider les attributs de l'objet de définition
58           de la classe NUPL
59       """
60       if type(self.min) != types.IntType :
61         if self.min != '**':
62           self.cr.fatal("L'attribut 'min' doit être un entier : "+`self.min`)
63       if type(self.max) != types.IntType :
64         if self.max != '**' :
65           self.cr.fatal("L'attribut 'max' doit être un entier : "+`self.max`)
66       if self.min > self.max :
67          self.cr.fatal("Nombres d'occurrence min et max invalides : %s %s" %(`self.min`,`self.max`))
68       if type(self.fr) != types.StringType :
69         self.cr.fatal("L'attribut 'fr' doit être une chaîne de caractères : %s" +`self.fr`)
70       if self.statut not in ['o','f','c','d']:
71         self.cr.fatal("L'attribut 'statut' doit valoir 'o','f','c' ou 'd' : %s" %`self.statut`)
72       if type(self.docu) != types.StringType :
73         self.cr.fatal("L'attribut 'docu' doit être une chaîne de caractères : %s" %`self.docu`)
74       self.verif_cata_regles()
75
76    def __call__(self,val,nom,parent):
77       """
78          Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
79          de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
80       """
81       if (type(val) == types.TupleType or type(val) == types.ListType) and type(val[0]) == types.TupleType:
82         # On est en presence d une liste de nuplets
83         l=self.list_instance()
84         l.init(nom=nom,parent=parent)
85         for v in val:
86           objet=self.class_instance(nom=nom,definition=self,val=v,parent=parent)
87           l.append(objet)
88         return l
89       else:
90         # on est en presence d un seul nuplet
91         return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
92
93    def report(self):
94       """ 
95            Méthode qui crée le rapport de vérification du catalogue du nuplet 
96       """
97       self.cr = self.CR()
98       self.verif_cata()
99       for v in self.entites :
100         cr = v.report()
101         cr.debut = "Début "+v.__class__.__name__+ ' : '
102         cr.fin = "Fin "+v.__class__.__name__+ ' : '
103         self.cr.add(cr)
104       return self.cr
105
106    def affecter_parente(self):
107       """
108           Cette methode a pour fonction de donner un nom et un pere aux
109           sous entités qui n'ont aucun moyen pour atteindre leur parent 
110           directement
111           Il s'agit principalement des mots cles
112       """
113       k=0
114       for v in self.entites:
115         v.pere = self
116         v.nom = str(k)
117         k=k+1
118