From 1af350f680d1a0fc4235d95c71bb5e0ebfb83cdc Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Mon, 19 Apr 2021 19:56:28 +0200 Subject: [PATCH] A tester sur RN pour la matrice --- Efi2Xsd/AccasXsd.py | 87 ++++++++++++++++++++++++++++++++----------- Efi2Xsd/balisesXSD.py | 9 ++++- 2 files changed, 73 insertions(+), 23 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index e230c270..e08a6776 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -198,7 +198,9 @@ class X_compoFactoriseAmbigu(X_definition): self.entites={} self.mcXSD=[] self.ordre_mc=[] + self.lesConditions = 'Possible Conditions : ' for mc in listeDeCreation : + self.lesConditions += '\n\t\t\t\t\t\t' + mc.condition self.mcXSD.append(mc) self.ordre_mc.append(mc.nom) @@ -319,7 +321,7 @@ class X_compoFactoriseAmbigu(X_definition): 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) + self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1, self.lesConditions) def nomComplet(self) : print ('dans nomComplet pourquoi ?',self, self.nom) @@ -452,7 +454,18 @@ class X_compoFactoriseAmbigu(X_definition): print ('2 blocs freres ont le meme nom et pas le meme type : pas encore traite') print ('Projection XSD impossible, changez un des ', nomMC) exit() - self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt + + texteDocUnion='\n' + i=1 + for mc in self.entites[nomMC]: + if mc.ang != '' : texteDocUnion += str(i) + '- ' + mc.ang + ' or \n'; i=i+1 + elif mc .fr != '' : texteDocUnion += str(i) + '- ' + mc.fr + ' ou \n'; i=i+1 + if texteDocUnion == '\n' : + self.texteComplexe += '\t'*(indent) + self.entites[nomMC][0].texteElt + else : + texteDocUnion = texteDocUnion[0:-4] + debutTexteEltUnion = self.entites[nomMC][0].texteElt.split('maxOccurs=')[0] + self.texteComplexe += '\t'*(indent)+ reconstitueUnion.format(debutTexteEltUnion,texteDocUnion) nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb texteSimpleUnion=debutSimpleType.format(nomTypePyxbUnion) texteSimpleUnion+=debutUnion @@ -681,6 +694,7 @@ class X_FACT (X_definitionComposee): else : self.maxOccurs = self.max self.minOccurs = self.min if self.statut =='f' : self.minOccurs=0 + if self.statut =='o' and self.min < 2: self.minOccurs=1 def construitArbrePossibles(self): if self.statut == 'f' : @@ -749,7 +763,7 @@ class X_BLOC (X_definitionComposee): else : self.texteComplexe = "" - self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1) + self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1,'condition : ' +self.condition) #print ('------------------------------------------------') @@ -789,6 +803,7 @@ class X_BLOC (X_definitionComposee): class X_SIMP (X_definition): #-------------------------------- def dumpXsd(self, dansFactorisation=False, multiple=False, first=False, debug=False): + debug = True #if PourTraduction : print (self.nom) if debug : print ('X_SIMP dumpXsd pour', self.nom, '___________________________') self.prepareDumpXSD() @@ -818,11 +833,17 @@ class X_SIMP (X_definition): if debug : print ('nomDuTypePyxb', self.nomDuTypePyxb) if debug : print ('aCreer', self.aCreer) + + # on se sert des listes ou non pour la gestion des minOccurs /maxOccurs est > 0 if self.statut =='f' : minOccurs = 0 else : minOccurs = 1 if dansFactorisation : minOccurs = 1 + if self.suisUneMatrice : + self.dumpSpecifiqueMatrice(minOccurs) + return + #print ('minOccurs',minOccurs) # le defaut est dans l elt Name -> tester la coherence d existence avec Accas # regles Accas @@ -831,37 +852,39 @@ class X_SIMP (X_definition): # sauf si on est le '1er' dans un element ambigu if not multiple : #print ('je passe la pas multiple') + texteAide = "" + if self.ang != '' : texteAide = self.ang + else : texteAide = self.fr + if self.intoXML and self.into : + if self.intoXML != self.into : + #print ('je passe la pour ', self.nom) + texteAide :texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n' + if self.defaut : if self.max > 1 or self.max == '**' or self.max == float('inf') : txtDefaut="" if not('TXM' in (self.type)) : separe = ' ' else : separe ='\n' - for val in self.defaut : - txtDefaut+=str(val) + separe + for val in self.defaut : txtDefaut+=str(val) + separe txtDefaut+=txtDefaut[0:-1] if not('TXM' in (self.type)) : # a revoir pour les tuples avec defaut - if self.ang != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,self.ang) - elif self.fr != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,self.fr) + if texteAide != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide) else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) else : - if self.ang != '' : texteAide = self.ang - else : texteAide = self.fr - texteAide :texteAide = texteAide+'\ndefault Value in MDM : \n'+txtDefaut + texteAide += texteAide+'\ndefault Value in MDM : \n'+txtDefaut self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide) else : if str(self.defaut) == 'True' : txtDefaut = 'true' elif str(self.defaut) == 'False' : txtDefaut = 'false' - else : txtDefaut = str(self.defaut) - if self.ang != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,self.ang) - elif self.fr != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,self.fr) + else : txtDefaut = str(self.defaut)+('\n') + if texteAide != '' : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide) else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut) else : - if self.ang != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,self.ang) - elif self.fr != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,self.fr) - else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,self.ang) + if texteAide != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide) + else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1) elif first: - # PNPN --> Que faire de l'aide ? + # l'aide est geree a la fusion self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1) # self.aCreer est mis a jour ds definitNomDuTypePyxb @@ -922,6 +945,23 @@ class X_SIMP (X_definition): self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2 + def dumpSpecifiqueMatrice(self,minOccurs): + # if faut traiter le defaut + typeDeMatrice =self.type[0] + + self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb+'_element') + self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase) + if typeDeMatrice.typEltInto != None: + for val in typeDeMatrice.typEltInto : self.texteSimple += enumeration.format(val) + self.texteSimple += fermeRestrictionBase + self.texteSimple += fermeSimpleType + nom=self.nomDuTypePyxb + nbCols=typeDeMatrice.nbCols + nbLigs=typeDeMatrice.nbCols + self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max) + self.texteElt = "\t\t\t\t"+eltMatrice.format(self.code,nom,minOccurs,1)+"\n" + + def prepareDumpXSD(self): self.inUnion=False if self.statut == 'f' : self.arbrePossibles = (self.nom,[]) @@ -930,10 +970,17 @@ class X_SIMP (X_definition): - def traduitType(self): + def traduitType(self,debug=False): # il faut traduire le min et le max # il faut ajouter les regles # il faut gerer les types tuple et fichier + # on ne paut pas tester le type qui depend du cataloge + if hasattr(self.type[0], 'typElt') : + #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt]) + self.suisUneMatrice = True + return dictNomsDesTypes[self.type[0].typElt] + else : + self.suisUneMatrice = False if hasattr(self.type[0], 'ntuple') : try : leType=self.validators.typeDesTuples[0] @@ -1040,14 +1087,10 @@ class X_JDC_CATA : if self.implement == self.code : self.texteCata += eltAbstraitCataPPal.format(self.code) - #if self.ang != '' : self.texteCataWithHelp += eltCataPPal.format(self.code,self.code,self.code, self.ang) - #elif self.fr != '' : self.texteCataWithHelp += eltCataPPal.format(self.code,self.code,self.code, self.fr) if 0 : pass else : self.texteCata += eltCataPPal.format(self.code,self.code,self.code) else : self.texteCata += eltAbstraitCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere) - #if self.ang != '' : self.texteCata += eltCataFilsWithHelp.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere) - #elif self.fr != '' : self.texteCata += eltCataFilsWithHelp.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere) if 0 : pass else : self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere) self.texteInclusion += includeCata.format(self.nomDuXsdPere) diff --git a/Efi2Xsd/balisesXSD.py b/Efi2Xsd/balisesXSD.py index f2ea09e3..5d55ef12 100644 --- a/Efi2Xsd/balisesXSD.py +++ b/Efi2Xsd/balisesXSD.py @@ -56,7 +56,7 @@ eltEtapeWithHelp = '\t \n\t\t\n' finTypeSubst = '\t\t\n\t\n' -substDsSequence = '\t\t\t\n' +substDsSequence = '\t\t\t\n\t\t\t\t\n\t\t\t\t\t{}\n\t\t\t\t\n\t\t\t\n' #choiceDsBloc = '\t\t\t\n' debutChoiceDsBloc = '\n' debutChoiceDsBlocAvecMin = '\n' @@ -67,6 +67,7 @@ debutTypeSubstDsBlocFactorise = '\t\n' finTypeSubstDsBlocFactorise = '\t\n' debutUnion = '\t\t\t\n' finUnion = '\t\t\t\n' +reconstitueUnion = '{} maxOccurs="1">\n\t\t\t\t\n\t\t\t\t\t{}\n\t\t\t\t\n\t\t\t\n' @@ -108,5 +109,11 @@ eltCata = '\t\n\t\t\n' #implementeAbstrait = '\t\n' +# MATRICE +matriceSimpleType = '\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n' +matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t\n\t\n' +matriceSimpleType +='\t\n\t\t\n\t\t\t\t\n\t\t\n\t' +eltMatrice = ' ' + if __name__ == '__main__' : print ('ne fait rien') -- 2.39.2