Salome HOME
CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion
[tools/eficas.git] / Noyau / N_OPER.py
1 #@ MODIF N_OPER Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
9 # (AT YOUR OPTION) ANY LATER VERSION.                                 
10 #
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
15 #
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
19 #                                                                       
20 #                                                                       
21 # ======================================================================
22
23
24 """ 
25     Ce module contient la classe de definition OPER
26     qui permet de spécifier les caractéristiques d'un opérateur
27 """
28
29 import types,string,traceback
30
31 import N_ENTITE
32 import N_ETAPE
33 import nommage
34
35 class OPER(N_ENTITE.ENTITE):
36    """
37     Classe pour definir un opérateur
38
39     Cette classe a trois attributs de classe 
40
41     - class_instance qui indique la classe qui devra etre utilisée 
42             pour créer l'objet qui servira à controler la conformité d'un 
43             opérateur avec sa définition
44
45     - label qui indique la nature de l'objet de définition (ici, OPER)
46
47     - nommage qui est un module Python qui fournit la fonctionnalité de nommage
48
49     et les attributs d'instance suivants :
50
51     - nom   : son nom
52
53     - op   : le numéro d'opérateur
54
55     - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
56                       une classe
57
58     - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
59                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
60
61     - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
62                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
63                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
64
65     - fr   : commentaire associé en francais
66
67     - ang : commentaire associé en anglais
68
69     - docu : clé de documentation associée
70
71     - regles : liste des règles associées
72
73     - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
74                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
75
76     - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
77                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
78                      Si niveau vaut None, l'opérateur est rangé au niveau global.
79
80     - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
81                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
82                       est initialisé avec args, c'est à dire les arguments d'appel restants.
83
84
85    """
86    class_instance = N_ETAPE.ETAPE
87    label = 'OPER'
88    nommage = nommage
89
90    def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="",
91                 docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args):
92       """
93          Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser
94          les attributs de meme nom
95       """
96       self.nom=nom
97       self.op=op
98       self.sd_prod=sd_prod
99       self.reentrant=reentrant
100       self.fr=fr
101       self.ang=ang
102       self.repetable = repetable
103       self.docu=docu
104       if type(regles)== types.TupleType:
105           self.regles=regles
106       else:
107           self.regles=(regles,)
108       # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
109       self.op_init=op_init
110       self.entites=args
111       current_cata=CONTEXT.get_current_cata()
112       if niveau == None:
113          self.niveau=None
114          current_cata.enregistre(self)
115       else:
116          self.niveau=current_cata.get_niveau(niveau)
117          self.niveau.enregistre(self)
118       self.UIinfo=UIinfo
119       self.affecter_parente()
120
121    def __call__(self,reuse=None,**args):
122       """
123           Construit l'objet ETAPE a partir de sa definition (self),
124           puis demande la construction de ses sous-objets et du concept produit.
125       """
126       nomsd=self.nommage.GetNomConceptResultat(self.nom)
127       etape= self.class_instance(oper=self,reuse=reuse,args=args)
128       etape.McBuild()
129       return etape.Build_sd(nomsd)
130
131    def make_objet(self,mc_list='oui'):
132       """ 
133            Cette méthode crée l'objet ETAPE dont la définition est self sans
134             l'enregistrer ni créer sa sdprod.
135            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction 
136            des objets MCxxx.
137       """
138       etape= self.class_instance(oper=self,reuse=None,args={})
139       if mc_list == 'oui':etape.McBuild()
140       return etape
141
142    def verif_cata(self):
143       """
144           Méthode de vérification des attributs de définition
145       """
146       if type(self.regles) != types.TupleType :
147         self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`)
148       if type(self.fr) != types.StringType :
149         self.cr.fatal("L'attribut 'fr' doit etre une chaine de caractères : %s" %`self.fr`)
150       if self.reentrant not in ('o','n','f'):
151         self.cr.fatal("L'attribut 'reentrant' doit valoir 'o','n' ou 'f' : %s" %`self.reentrant`)
152       if type(self.docu) != types.StringType :
153         self.cr.fatal("L'attribut 'docu' doit etre une chaine de caractères : %s" %`self.docu` )
154       if type(self.nom) != types.StringType :
155         self.cr.fatal("L'attribut 'nom' doit etre une chaine de caractères : %s" %`self.nom`)
156       if type(self.op) != types.IntType :
157         self.cr.fatal("L'attribut 'op' doit etre un entier signé : %s" %`self.op`)
158       self.verif_cata_regles()
159
160    def supprime(self):
161       """
162           Méthode pour supprimer les références arrières susceptibles de provoquer
163           des cycles de références
164       """
165       self.niveau=None
166
167