2 # -*- coding: utf-8 -*-
6 # CONTEXT est accessible (__init__.py de Noyau)
8 #import raw.efficas as efficas
9 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
11 # ds l init du SIMP il manque siValide et fenetreIhm
13 from .mapDesTypes import dictSIMPEficasXML, dictSIMPXMLEficas
14 from .mapDesTypes import dictFACTEficasXML, dictFACTXMLEficas
15 from .mapDesTypes import dictPROCEficasXML, dictPROCXMLEficas
16 from .mapDesTypes import dictOPEREficasXML, dictOPERXMLEficas
17 from .mapDesTypes import dictBLOCEficasXML, dictBLOCXMLEficas
18 from .mapDesTypes import dictPourCast, dictNomsDesTypes
19 from .mapDesTypes import listeParamDeTypeTypeAttendu, listeParamDeTypeStr, dictPourCast
20 from .mapDesTypes import listeParamTjsSequence, listeParamSelonType
21 from .mapDesTypes import Tuple
24 from .balises import *
31 if hasattr(self,'code') : return
33 while ( not hasattr(obj,'code') ): obj=obj.pere
36 #def genealogie(self,n):
40 # while ( hasattr(obj,'pere') ):
41 # texte=obj.pere.nom+'_'+texte
44 # if j > n : return (True, 'T_'+texte)
45 # return (False, 'T_'+texte)
47 def definitNomDuTypePyxb(self):
49 cata = CONTEXT.getCurrentCata()
51 if not (nom in cata.dictTypesXSD.keys()) :
52 cata.dictTypesXSD[nom] = [self,]
55 if nom == 'T_Consigne' : return nom
56 listePossible=cata.dictTypesXSD[nom]
58 while (indice < len(listePossible)) :
59 objAComparer=listePossible[indice]
60 if self.compare(objAComparer) : return objAComparer.nomDuTypePyxb
63 cata.dictTypesXSD[nom].append(self)
64 nomAlter='T_'+self.nom+'_'+str(indice)
67 # def existeDeja(self,nom):
68 # if nom in cata.dictTypesXSD.keys() :
70 # return cata.dictTypesXSD[nom]
72 # cata.dictTypesXSD[nom] = self
75 # ----------------------------------------
76 class X_definitionComposee (X_definition):
77 # ----------------------------------------
79 def CreeTexteComplexeVenantDesFils(self):
80 texteComplexeVenantDesFils=""
81 for nom in self.ordre_mc:
82 mcFils = self.entites[nom]
84 self.texteComplexe += mcFils.texteElt
85 self.texteSimple += mcFils.texteSimple
86 texteComplexeVenantDesFils += mcFils.texteComplexe
87 return texteComplexeVenantDesFils
90 #print ('------------------------------------------------')
91 #print ('dumpXsd de ' , self.nom)
94 self.nomDuTypePyxb = self.definitNomDuTypePyxb()
95 self.texteSimple = "" # on n ajoute pas de type simple
98 # pour accepter les PROC et ...
101 self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
102 texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils()
103 self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
104 self.texteComplexe += finTypeCompo
106 self.texteComplexe = ""
109 if hasattr(self, 'statut') and self.statut=='f' : minDsSequence=0
111 if self.label in ('BLOC', 'FACT'):
112 self.texteElt=eltCompoDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minDsSequence,maxDsSequence)
114 self.texteElt=eltCompoDsSequenceSiProc.format(self.nom,self.code,self.nomDuTypePyxb)
115 #print (self.texteComplexe)
116 #print ('------------------------------------------------')
118 def traduitMinMax(self):
119 # ____________________
120 # valable pour bloc, proc et oper
124 def compare(self,autreMC):
125 if self.label != autreMC.label : return False
126 for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) :
127 val1=getattr(self,attr)
128 val2=getattr(autreMC,attr)
129 if val1 != val2 : return False
130 for defFille in self.entites.keys():
131 if defFille not in autreMC.entites.keys() : return False
132 if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
135 # ---------------------------------
136 class X_FACT (X_definitionComposee):
137 #--------- ------------------------
138 def traduitMinMax(self):
139 if self.max == '**' or self.max == float('inf') : self.maxOccurs="unbounded"
140 else : self.maxOccurs = self.max
141 self.minOccurs = self.min
142 if self.statut =='f' : self.minOccurs=0
144 # ---------------------------------
145 class X_OPER (X_definitionComposee):
146 # ---------------------------------
149 # ----------------------------------
150 class X_PROC (X_definitionComposee):
151 #-----------------------------------
154 #-----------------------------------
155 class X_BLOC (X_definitionComposee):
156 #-----------------------------------
158 #print ('------------------------------------------------')
159 #print ('dumpXsd de ' , self.nom)
162 self.nomDuTypePyxb = self.definitNomDuTypePyxb()
163 self.texteSimple = "" # on n ajoute pas de type simple
165 # Pour les blocs le minOccurs vaut 0 et le max 1
167 self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb)
168 texteComplexeVenantDesFils=self.CreeTexteComplexeVenantDesFils()
169 self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
170 self.texteComplexe += finTypeSubst
172 self.texteComplexe = ""
174 self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1)
176 #print ('------------------------------------------------')
178 def compare(self,autreMC):
179 if self.label != autreMC.label : return False
180 for attr in ( 'condition', 'regles', ):
181 val1=getattr(self,attr)
182 val2=getattr(autreMC,attr)
183 if val1 != val2 : return False
184 for defFille in self.entites.keys():
185 if defFille not in autreMC.entites.keys() : return False
186 if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
190 #--------------------------------
191 class X_SIMP (X_definition):
192 #--------------------------------
194 #print ('exploreObjet SIMP')
198 # --> homonymie on peut utiliser genealogie
199 #self.traduitMinMax()
200 #self.traduitValMinValMax()
201 self.nomDuTypeDeBase = self.traduitType()
202 self.nomDuTypePyxb = self.definitNomDuTypePyxb()
203 if self.aCreer == True :
204 if self.into != None:
205 self.texteSimple = debutTypeSimpleWithInto.format (self.nomDuTypePyxb, self.nomDuTypeDeBase)
206 for val in self.into :
207 self.texteSimple += typeSimpleWithInto.format(val)
208 self.texteSimple += finTypeSimpleWithInto
210 self.texteSimple = typeSimple.format(self.nomDuTypePyxb, self.nomDuTypeDeBase)
212 # le type existe deja
214 self.texteComplexe = ""
216 # on se sert des listes si maxOccurs est > 0
217 # a gerer dans le dump
218 if self.statut =='f' : minOccurs = 0
220 self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
223 def traduitType(self):
224 # il faut traduire le min et le max
225 # il faut ajouter les regles
226 # il faut gerer les types tuple et fichier
228 if hasattr(self.type[0], 'label') and self.type[0].label == "Tuple" : return ('XXXXXXXX')
229 return dictNomsDesTypes[self.type[0]]
231 def traduitValMinValMax(self):
232 self.maxInclusive=self.val_max
233 self.minInclusive=self.val_min
234 if self.val_min == float('-inf') and val_max== float('inf') : return
235 print ('il faut affiner le type du SIMP ', self.nom)
236 if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None
237 else : self.maxInclusive = self.val_max
238 if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None
239 else : self.minInclusive = self.val_min
241 def traduitMinMax(self):
242 if self.min == 1 and self.max == 1 : return
243 print ('il faut creer une liste ' , self.nom)
245 def compare(self,autreMC):
246 if self.label != autreMC.label : return False
247 for attr in ( 'type', 'ang', 'fr', 'into', 'intoSug' , 'siValide', 'defaut', 'min' ,'max' ,'homo' ,'position' ,'val_min' , 'val_max' , 'docu' , 'validators' , 'sug' ) :
248 val1=getattr(self,attr)
249 val2=getattr(autreMC,attr)
250 if val1 != val2 : return False
259 self.texteSimple = ""
260 self.texteComplexe = ""
261 self.nomDuTypePyxb='T_'+self.code
262 self.texteCata = debutTypeCata.format(self.nomDuTypePyxb)
263 for commande in self.commandes :
264 commande.code=self.code
266 self.texteSimple += commande.texteSimple
267 self.texteSimple += commande.texteComplexe
268 self.texteCata += commande.texteElt
269 self.texteCata += finTypeCata
270 self.texteElt=eltCata.format(self.code,self.code, self.nomDuTypePyxb)
272 self.texteXSD = texteDebut.format(self.code,self.code,self.code)
273 self.texteXSD += self.texteSimple
274 self.texteXSD += self.texteCata
275 self.texteXSD += self.texteElt
276 self.texteXSD += texteFin
277 #print (self.texteSimple)
278 #print (self.texteCata)
279 #print (self.texteElt)
280 print (self.texteXSD)