]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
partage eric
authorPASCALE NOYRET <A96028@dsp0887683.atlas.edf.fr>
Mon, 5 Oct 2020 14:49:11 +0000 (16:49 +0200)
committerPASCALE NOYRET <A96028@dsp0887683.atlas.edf.fr>
Mon, 5 Oct 2020 14:49:11 +0000 (16:49 +0200)
Efi2Xsd/AccasXsd.py
Efi2Xsd/MCAccasXML.py

index b95a511a85b5668a562dd32e506299a2670404ca..f003fe029558d34166488067caaa951410d374a5 100755 (executable)
@@ -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
index fbd0f14cbf8cca6347a379ee71e07bdd34a32143..7f51fb69139a5a7e6866e3018f50a7c331f05728 100755 (executable)
@@ -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)