From a297b5e6b5cf9dec5149014e19e4d1fbb6b37a95 Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Mon, 5 Oct 2020 16:49:11 +0200 Subject: [PATCH] partage eric --- Efi2Xsd/AccasXsd.py | 69 +++++++++++++++++++++++++------------------ Efi2Xsd/MCAccasXML.py | 1 + 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index b95a511a..f003fe02 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -120,10 +120,20 @@ class X_definition: obj=obj.pere return texteNom + def metAJourPyxb(self,nomDuTypePyxb) : + self.aCreer=False + self.nomDuTypePyxb=nomDuTypePyxb + cata = CONTEXT.getCurrentCata() + nom='T_'+self.nom + if (hasattr (self, 'nomXML')) and self.nomXML != None : nom='T_'+self.nomXML + if not (nom in cata.dictTypesXSD.keys()) : + cata.dictTypesXSD[nom] = [self,] + else : + cata.dictTypesXSD[nom].append(self) def definitNomDuTypePyxb(self,forceACreer=False): - if hasattr(self,'nomDuTypePyxb') : return self.nomDuTypePyxb + if hasattr(self,'nomDuTypePyxb') : self.aCreer = False; return self.nomDuTypePyxb #except : pass self.aCreer = True cata = CONTEXT.getCurrentCata() @@ -279,20 +289,20 @@ class X_compoFactoriseAmbigu(X_definition): def construitArbrePossibles(self): # inutile car on a deja l arbre mais appele parfois - #print ('dans X_factCompoAmbigue ne fait rien', self.nom, self.arbrePossibles) + #print ('dans X_factCompoAmbigu ne fait rien', self.nom, self.arbrePossibles) pass def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): # on ne fait rien, tout a ete fait dans le init self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) - def nomComplet(self) : - print ('dans nomComplet pourquoi ?',self, self.nom) + #def nomComplet(self) : + # print ('dans nomComplet pourquoi ?',self, self.nom) - def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None): - #print ('_______________________________ factoriseEtCreeDump') - #print(self.nom, laListe, indent, nomAppel) + def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False): + if debug : print ('_______________________________ factoriseEtCreeDump') + if debug : print(self.nom, laListe, indent, nomAppel) maListeRetour=[] aReduire={} @@ -360,9 +370,8 @@ class X_compoFactoriseAmbigu(X_definition): def ajouteAuxTextes(self,nomMC,indent) : #print ('ajouteAuxTextes', nomMC, self.nom, self.entites) - #print ('ajouteAuxTextes', nomMC, self.entites[nomMC]) #for i in self.entites.keys() : print (self.entites[i][0].nom) - if (indent > 3) : indent = indent - 3 + if (indent > 3) : indent = indent - 3 else : indent = 0 if len(self.entites[nomMC]) == 1: mc=self.entites[nomMC][0] @@ -370,6 +379,7 @@ class X_compoFactoriseAmbigu(X_definition): self.texteComplexe += '\t'*(indent) + mc.texteElt if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe if mc.aCreer : self.texteSimple += mc.texteSimple + if mc.aCreer : mc.aCreer=False return leType=type(self.entites[nomMC][0]) @@ -395,10 +405,10 @@ class X_compoFactoriseAmbigu(X_definition): if len(listePourUnion) == 1: mc=listePourUnion[0] mc.dumpXsd(dansFactorisation=True,multiple=False,first=first) - if self.nom == 'B1_B2' and nomMC == 'Numerical': print (mc.dumpXsd) - self.texteComplexe += '\t'*(indent) + mc.texteElt - self.texteComplexeVenantDesFils += mc.texteComplexe - self.texteSimple += mc.texteSimple + if mc.aCreer : self.texteComplexe += '\t'*(indent) + mc.texteElt + if mc.aCreer : self.texteComplexeVenantDesFils += mc.texteComplexe + if mc.aCreer : self.texteSimple += mc.texteSimple + for mcIdent in self.entites[nomMC][1:]: mcIdent.metAJourPyxb(mc.nomDuTypePyxb) return # on ajoute le nom de l element @@ -409,7 +419,8 @@ class X_compoFactoriseAmbigu(X_definition): print ('Projection XSD impossible, changez un des ', nomMC) exit() self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt - texteSimpleUnion=debutSimpleType.format(self.entites[nomMC][0].nomDuTypePyxb) + nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb + texteSimpleUnion=debutSimpleType.format(nomTypePyxbUnion) texteSimpleUnion+=debutUnion if len(listePourUnion) == 1 : #PN 29 septembtre 20. Est ce que ce if a un sens @@ -424,6 +435,7 @@ class X_compoFactoriseAmbigu(X_definition): # si on ext un mc simple la ligne suivante est inutile # en revanche on ajoute le texte a tous les coups self.texteComplexeVenantDesFils += e.texteComplexe + e.metAJourPyxb(nomTypePyxbUnion) first=first * 0 texteSimpleUnion += '\t'*(indent)+e.texteSimple texteSimpleUnion += finUnion @@ -725,7 +737,6 @@ class X_BLOC (X_definitionComposee): class X_SIMP (X_definition): #-------------------------------- def dumpXsd(self, dansFactorisation=False, multiple = False, first=False): - #print ('_______________' , '*******************', 'je passe la dans dumpXsd SIMP', self.nom, multiple, first) #if PourTraduction : print (self.nom) self.prepareDumpXSD() if multiple : self.inUnion=True @@ -757,8 +768,6 @@ class X_SIMP (X_definition): #print ('minOccurs',minOccurs) # le defaut est dans l elt Name -> tester la coherence d existence avec Accas # regles Accas - if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML - else : nomUtil = self.nom # pas d elt si on est dans multiple # sauf si on est le '1er' dans un element ambigu @@ -769,14 +778,14 @@ class X_SIMP (X_definition): # a revoir pour les tuples avec defaut txtDefaut="" for val in self.defaut : txtDefaut+=str(val) +" " - self.texteElt = eltWithDefautDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) + self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) else : if str(self.defaut) == 'True' : txtDefaut = 'true' else : txtDefaut = str(self.defaut) - self.texteElt = eltWithDefautDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) - else : self.texteElt = eltDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,minOccurs,1) + self.texteElt = eltWithDefautDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) + else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) elif first: - self.texteElt = eltDsSequence.format(nomUtil,self.code,self.nomDuTypePyxb,1,1) + self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1) # self.aCreer est mis a jour ds definitNomDuTypePyxb # ou si elt est le 1er d une liste identique @@ -1020,14 +1029,18 @@ class X_JDC_CATA : #if not PourTraduction : print (self.texteXSD) dico = {} + #import pprint + #pprint.pprint(cata.dictTypesXSD) for k in list(cata.dictTypesXSD.keys()): - if len(cata.dictTypesXSD[k]) > 1: - dico[k]={} - for definition in cata.dictTypesXSD[k] : - # un bloc n est pas instancie en xml - if definition.label == 'BlocAmbigu' : continue - nom=definition.nomComplet() - dico[k][nom]=definition.nomDuTypePyxb + dico[k]={} + for definition in cata.dictTypesXSD[k] : + if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue + nom=definition.nomComplet() + if k =='T_NumericalMethod' : print (nom) + if definition.nomDuTypePyxb != 'T_'+definition.nom : dico[k][nom]=definition.nomDuTypePyxb + if dico[k]== {} : del dico[k] + #import pprint + #pprint.pprint(dico) if dico != {} : self.texteXSD += texteAnnotation.format(str(dico)) #import pprint diff --git a/Efi2Xsd/MCAccasXML.py b/Efi2Xsd/MCAccasXML.py index fbd0f14c..7f51fb69 100755 --- a/Efi2Xsd/MCAccasXML.py +++ b/Efi2Xsd/MCAccasXML.py @@ -130,6 +130,7 @@ class X_MCSIMP(X_OBJECT): else : self.needFactory=False else : self.monNomClasseModeleMetier ='T_'+self.nom + if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.definition.nomComplet()] if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier) -- 2.39.2