]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_map.py
Salome HOME
4766a88082ca9ae21dbe9e0da17b2af6d031e9e6
[tools/eficas.git] / generator / generator_map.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 """
22    Ce module contient le plugin generateur de fichier au format
23    SEP pour EFICAS.
24
25 """
26 import traceback
27 import types,string,re,os
28 import time
29 from datetime import date
30
31 from generator_python import PythonGenerator
32 try :
33    sys.path.append(os.path.join(os.getenv('MAP_DIRECTORY'),'classes/python/'))
34    from class_MAP_parameters import *
35 except :
36    pass
37
38
39
40 def entryPoint():
41    """
42       Retourne les informations necessaires pour le chargeur de plugins
43       Ces informations sont retournees dans un dictionnaire
44    """
45    return {
46         # Le nom du plugin
47           'name' : 'MAP',
48         # La factory pour creer une instance du plugin
49           'factory' : MapGenerator,
50           }
51
52
53 class MapGenerator(PythonGenerator):
54    """
55       Ce generateur parcourt un objet de type JDC et produit
56       un texte au format eficas et
57       un texte au format py
58
59    """
60    # Les extensions de fichier permis?
61    extensions=('.map',)
62
63
64    def initialise(self,config):
65       self.config=config
66       self.nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
67       if not( os.path.exists(self.nom_racine)):
68          os.makedirs(self.nom_racine)
69       self.listeCODE=[]
70       self.text=""
71
72       self.ssCode=self.config.appli.ssCode
73       self.INSTALLDIR=self.config.appli.INSTALLDIR
74       self.ssCodeDir=os.path.join(self.INSTALLDIR,'MAP/Templates',self.ssCode)
75       self.fichierYacs=self.ssCode+"_YACS_nodes"
76       self.texteExecution="import os,sys\n"
77       self.texteExecution+="sys.path.append('"+self.ssCodeDir+"')\n"
78       self.texteExecution+="from " + self.fichierYacs +" import *\n"
79
80    def gener(self,obj,format='brut',config=None):
81       self.initialise(config)
82       text=PythonGenerator.gener(self,obj,format)
83       return text
84
85    def generRUN(self,obj,format='brut',config=None,):
86       self.initialise(config)
87       text=PythonGenerator.gener(self,obj,format)
88       for elt in self.listeCODE:
89           code=elt.keys()[0]
90           self.dico=elt[code]
91           if code in self.__class__.__dict__.keys():
92              texteCode=apply(self.__class__.__dict__[code],(self,))
93              self.texteExecution += texteCode
94       return self.texteExecution
95
96
97    def generRUNYACS(self,obj,format='brut',config=None,nomFichier=None):
98       self.initialise(config)
99       text=PythonGenerator.gener(self,obj,format)
100       #self.generePythonMap("non")
101
102       import sys
103       sys.path.append(os.path.join(os.getenv("YACS_ROOT_DIR"),"lib/python2.4/site-packages/salome/"))
104       import monCreateYacs
105       self.monSchema=monCreateYacs.getSchema(config)
106       self.proc=self.monSchema.createProc(self)
107       for elt in self.listeCODE:
108           code=elt.keys()[0]
109           dico=elt[code]
110           if code in self.__class__.__dict__.keys():
111              codeYACS=str(code)+"YACS"
112              if hasattr(self.monSchema, codeYACS): 
113                 fct=getattr(self.monSchema, codeYACS)
114                 fct(self.proc,dico)
115                 
116       print str(nomFichier)
117       self.monSchema.write_yacs_proc(self.proc,str(nomFichier))
118
119    def generePythonMap(self,execution) :
120       '''
121          self.dictMCVal est un dictionnaire qui est indexe par le nom du code (exple PYGMEE)
122          la valeur associee a la clef est egalement un dictionnaire 
123          ce dictionnaire a pour clef la genealogie du MCSimp suivi de sa valeur
124
125       '''
126       for elt in self.listeCODE:
127           code=elt.keys()[0]
128           dico=elt[code]
129           self.dictMCVal={}
130           self.dictMCVal[code]=dico
131           if code in self.__class__.__dict__.keys():
132              texteCode=apply(self.__class__.__dict__[code],(self,execution))
133              self.texteExecution=self.texteExecution+texteCode
134
135    def generPROC_ETAPE(self,obj):
136       self.DictTemp={}
137       s=PythonGenerator.generPROC_ETAPE(self,obj)
138       dico={}
139       dico[obj.nom]=self.DictTemp
140       self.listeCODE.append(dico)
141       if hasattr(obj.definition,"mcOblig") :
142          for clef in obj.definition.mcOblig.keys():
143              setattr(self,clef,obj.definition.mcOblig[clef])
144       return s
145
146
147    def generMCSIMP(self,obj) :
148       """
149       Convertit un objet MCSIMP en texte python
150       """
151       s=PythonGenerator.generMCSIMP(self,obj)
152       #clef=""
153       #for i in obj.get_genealogie() :
154       #     clef=clef+"_"+i
155       self.DictTemp[obj.nom]=obj.valeur
156       if hasattr(obj.definition,'equiv') and obj.definition.equiv!= None:
157          setattr(self,obj.definition.equiv,obj.valeur)
158       else :
159          setattr(self,obj.nom,obj.valeur)
160       return s
161
162
163    def  remplaceCONFIG(self,chaine,liste) :
164        for mot in liste :
165            rplact="%_"+mot+"%"
166            result=chaine.replace(rplact,self.config.__dict__[mot])
167            chaine=result
168        return chaine
169
170
171    def  remplaceDICO(self,chaine,dico) :
172        for mot in dico.keys() :
173            rplact="%"+mot+"%"
174            result=chaine.replace(rplact,str(dico[mot]))
175            chaine=result
176        return chaine
177