Salome HOME
premiere version
[tools/eficas.git] / Noyau / N_OPER.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     Ce module contient la classe de definition OPER
23     qui permet de spécifier les caractéristiques d'un opérateur
24 """
25
26 import types,string,traceback
27
28 import N_ENTITE
29 import N_ETAPE
30 import nommage
31 from strfunc import ufmt
32
33 class OPER(N_ENTITE.ENTITE):
34    """
35     Classe pour definir un opérateur
36
37     Cette classe a trois attributs de classe
38
39     - class_instance qui indique la classe qui devra etre utilisée
40             pour créer l'objet qui servira à controler la conformité d'un
41             opérateur avec sa définition
42
43     - label qui indique la nature de l'objet de définition (ici, OPER)
44
45     - nommage qui est un module Python qui fournit la fonctionnalité de nommage
46
47     et les attributs d'instance suivants :
48
49     - nom   : son nom
50
51     - op   : le numéro d'opérateur
52
53     - sd_prod : le type de concept produit. C'est une classe ou une fonction qui retourne
54                       une classe
55
56     - reentrant : vaut 'n' ou 'o'. Indique si l'opérateur est réentrant ou pas. Un opérateur
57                         réentrant peut modifier un concept d'entrée et le produire comme concept de sortie
58
59     - repetable : vaut 'n' ou 'o'. Indique si l'opérateur est répetable ou pas. Un opérateur
60                         non répétable ne doit apparaitre qu'une fois dans une exécution. C'est du ressort
61                         de l'objet gérant le contexte d'exécution de vérifier cette contrainte.
62
63     - fr   : commentaire associé en francais
64
65     - ang : commentaire associé en anglais
66
67     - docu : clé de documentation associée
68
69     - regles : liste des règles associées
70
71     - op_init : cet attribut vaut None ou une fonction. Si cet attribut ne vaut pas None, cette
72                       fonction est exécutée lors des phases d'initialisation de l'étape associée.
73
74     - niveau : indique le niveau dans lequel est rangé l'opérateur. Les opérateurs peuvent etre
75                      rangés par niveau. Ils apparaissent alors exclusivement dans leur niveau de rangement.
76                      Si niveau vaut None, l'opérateur est rangé au niveau global.
77
78     - entites : dictionnaire dans lequel sont stockés les sous entités de l'opérateur. Il s'agit
79                       des entités de définition pour les mots-clés : FACT, BLOC, SIMP. Cet attribut
80                       est initialisé avec args, c'est à dire les arguments d'appel restants.
81
82
83    """
84    class_instance = N_ETAPE.ETAPE
85    label = 'OPER'
86    nommage = nommage
87
88    def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="",
89                 docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args):
90       """
91          Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser
92          les attributs de meme nom
93       """
94       self.nom=nom
95       self.op=op
96       self.sd_prod=sd_prod
97       self.reentrant=reentrant
98       self.fr=fr
99       self.ang=ang
100       self.repetable = repetable
101       self.docu=docu
102       if type(regles)== types.TupleType:
103           self.regles=regles
104       else:
105           self.regles=(regles,)
106       # Attribut op_init : Fonction a appeler a la construction de l operateur sauf si == None
107       self.op_init=op_init
108       self.entites=args
109       current_cata=CONTEXT.get_current_cata()
110       if niveau == None:
111          self.niveau=None
112          current_cata.enregistre(self)
113       else:
114          self.niveau=current_cata.get_niveau(niveau)
115          self.niveau.enregistre(self)
116       self.UIinfo=UIinfo
117       self.affecter_parente()
118       self.check_definition(self.nom)
119
120    def __call__(self,reuse=None,**args):
121       """
122           Construit l'objet ETAPE a partir de sa definition (self),
123           puis demande la construction de ses sous-objets et du concept produit.
124       """
125       nomsd=self.nommage.GetNomConceptResultat(self.nom)
126       etape= self.class_instance(oper=self,reuse=reuse,args=args)
127       etape.McBuild()
128       return etape.Build_sd(nomsd)
129
130    def make_objet(self,mc_list='oui'):
131       """
132            Cette méthode crée l'objet ETAPE dont la définition est self sans
133             l'enregistrer ni créer sa sdprod.
134            Si l'argument mc_list vaut 'oui', elle déclenche en plus la construction
135            des objets MCxxx.
136       """
137       etape= self.class_instance(oper=self,reuse=None,args={})
138       if mc_list == 'oui':etape.McBuild()
139       return etape
140
141    def verif_cata(self):
142       """
143           Méthode de vérification des attributs de définition
144       """
145       self.check_regles()
146       self.check_fr()
147       self.check_reentrant()
148       self.check_docu()
149       self.check_nom()
150       self.check_op(valmin=0)
151       self.verif_cata_regles()
152
153    def supprime(self):
154       """
155           Méthode pour supprimer les références arrières susceptibles de provoquer
156           des cycles de références
157       """
158       self.niveau=None
159
160