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