]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
correction bug radial_meshing dans techno_data
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Mon, 21 Mar 2022 11:50:48 +0000 (12:50 +0100)
committerEric Fayolle <eric.fayolle@edf.fr>
Fri, 8 Apr 2022 08:44:07 +0000 (10:44 +0200)
Efi2Xsd/AccasXsd.py
Efi2Xsd/MCAccasXML.py
Efi2Xsd/balisesXSD.py

index 806757cdc3705c86e480cfb1ac7c26e219334875..bfc0fe6bc3ea32efdbb3cc52ab826b2bb812baa9 100755 (executable)
@@ -377,15 +377,22 @@ class X_compoFactoriseAmbigu(X_definition):
 
         if debug : print ('creeSequence', creeSequence, aReduire)
         for nomMC in aReduire.keys():
-            if debug : print ('---------- boucle for', nomMC)
+            if debug : print ('--------------------------------------------- boucle for', nomMC, aReduire[nomMC])
             listeSuivante=aReduire[nomMC]
             if creeChoice and  listeSuivante != [[]] :
                 self.texteComplexe += '\t'*(indent) +  debSequenceDsBloc; indent=indent+1
             self.ajouteAuxTextes(nomMC,indent)
             if listeSuivante == [[]] : continue # Est-ce toujours vrai ?
-            if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0],indent)
-            else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC)
+            if debug : print ('listeSuivante', listeSuivante)
+            aTraiter=listeSuivante
+            while len(aTraiter) == 1 and isinstance(aTraiter[0],list): aTraiter=aTraiter[0]
+            if debug : print ('aTraiter', aTraiter)
+            if len(aTraiter) == 1 :
+                self.ajouteAuxTextes(aTraiter[0],indent)
+            else : 
+                for mc in aTraiter : self.ajouteAuxTextes(mc, indent)
             if creeChoice   : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+            if debug : print ('--------------------------------------------- fin boucle for', nomMC)
 
         if declencheChoiceAvecSeqVid :
             self.texteComplexe +=  '\t'*indent +  debSequenceDsBloc
@@ -393,20 +400,22 @@ class X_compoFactoriseAmbigu(X_definition):
         if creeChoice   : indent=indent -1 ; self.texteComplexe += '\t'*indent + finChoiceDsBloc
         if creeSequence : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
 
-        #if doitFermerSequence : indent=indent-1;self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
-        #print (self.texteSimple)
-        #print ('______',' self.texteComplexe')
-        #print (self.texteComplexe)
-        #print ('_____', 'self.texteComplexeVenantDesFils')
-        #print (self.texteComplexeVenantDesFils)
-        #print ('fin pour _______________________________', self.nom)
+        debug=False
+        if debug : print (self.texteSimple)
+        if debug : print ('______',' self.texteComplexe')
+        if debug : print (self.texteComplexe)
+        if debug : print ('_____', 'self.texteComplexeVenantDesFils')
+        if debug : print (self.texteComplexeVenantDesFils)
+        if debug : print ('fin pour _______________________________', self.nom)
         return (maListeRetour)
 
 
     def ajouteAuxTextes(self,nomMC,indent,debug=False) :
+        if nomMC == 'radial_meshing' : debug =True
         if debug : 
            print ('______________________________________________________')
            print ('ajouteAuxTextes', nomMC, self.nom)
         #  for i in self.entites.keys() : print (self.entites[i][0].nom)
         if (indent  > 3) : indent = indent - 3
 
@@ -417,8 +426,8 @@ class X_compoFactoriseAmbigu(X_definition):
             nomMC=nomMC[0]
 
         if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return
-        if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites )
-        if debug : print (self.entites[nomMC])
+        #if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites )
+        if debug : print (nomMC, 'dans ajoute vraiment aux textes' )
         if len(self.entites[nomMC]) == 1:
             mc=self.entites[nomMC][0]
             mc.dumpXsd(dansFactorisation=True)
@@ -434,6 +443,32 @@ class X_compoFactoriseAmbigu(X_definition):
                 print ('Projection XSD impossible, changez un des ', nomMC)
                 exit()
 
+        # cas des matrices : 
+        if (self.entites[nomMC][0].label == 'SIMP') and hasattr (self.entites[nomMC][0].type[0], 'typElt') : 
+           typeEltMatrice=self.entites[nomMC][0].type[0].typElt
+           memeElt=1
+           nbColsMin=self.entites[nomMC][0].type[0].nbCols
+           nbColsMax=self.entites[nomMC][0].type[0].nbCols
+           nbLigsMin=self.entites[nomMC][0].type[0].nbLigs
+           nbLigsMax=self.entites[nomMC][0].type[0].nbLigs
+           for e in (self.entites[nomMC][1:]) :
+               if not (hasattr(e.type[0], 'typElt')) : 
+                   print ('Projection XSD impossible, changez un des ', nomMC)
+                   print ('melange de matrice et de non matrice')
+                   exit()
+               if not (e.type[0].typElt == typeEltMatrice) : memeElt=O 
+               else :
+                  if nbColsMin > e.type[0].nbCols : nbColsMin = e.type[0].nbCols
+                  if nbColsMax < e.type[0].nbCols : nbColsMax = e.type[0].nbCols
+                  if nbLigsMin > e.type[0].nbLigs : nbLigsMin = e.type[0].nbLigs
+                  if nbLigsMax < e.type[0].nbLigs : nbLigsMax = e.type[0].nbLigs
+           if debug and memeElt : print ('memeElt : ', memeElt)
+           if memeElt : self.fusionneDesMatricesDeMemeType(nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax)
+           else : self.fusionneDesMatrices(self,nomMC)
+           if debug : print ('fin fusion des matrices')
+           return
+
+        
         # cette boucle ne fonctionne que pour des SIMP
         resteATraiter=copy(self.entites[nomMC])
         #print ('________resteATraiter', resteATraiter)
@@ -477,11 +512,11 @@ class X_compoFactoriseAmbigu(X_definition):
                print ('Projection XSD impossible, changez un des ', nomMC)
                exit()
             self.fusionneDsUnChoix(nomMC,indent)
-            if debug : print ('self.nom', self.nom)
-            if debug : print ('self.texteComplexe' , self.texteComplexe)
-            if debug : print ('self.texteSimple' , self.texteSimple)
-            if debug : print ('self.texteElt' , self.texteElt)
-            if debug : print ('________________________')
+            #if debug : print ('self.nom', self.nom)
+            #if debug : print ('self.texteComplexe' , self.texteComplexe)
+            #if debug : print ('self.texteSimple' , self.texteSimple)
+            #if debug : print ('self.texteElt' , self.texteElt)
+            #if debug : print ('________________________')
             return
         
        
@@ -524,13 +559,12 @@ class X_compoFactoriseAmbigu(X_definition):
         texteSimpleUnion += finUnion
         texteSimpleUnion +=fermeSimpleType
         self.texteSimple += texteSimplePart1 + texteSimpleUnion
-        if debug : 
-           print ('______________')
-           print (self.texteSimple)
-           print ('______________')
-        #print ('self.texteSimple', self.texteSimple)
+        #if debug : 
+        #   print ('______________')
+        #   print (self.texteSimple)
+        #   print ('______________')
 
-    def fusionneDsUnChoix(self, nomMC,indent, debug=False):
+    def fusionneDsUnChoix(self, nomMC,indent, debug=True):
         if debug : print ('______fusionneDsUnChoix ', self.nom, self, nomMC,indent)
         if debug : print (self.texteComplexe)
         texteDocUnion='\n'
@@ -540,7 +574,8 @@ class X_compoFactoriseAmbigu(X_definition):
         mcRef= self.entites[nomMC][0]
         # max = 1 : a priori les choix sont exclusifs
         if (hasattr (mcRef, 'aDejaEteDumpe')) : 
-          if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe")
+          self.texteComplexe += '\t'*(indent) + mcRef.texteElt
+          if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe, j ajoute juste l elt")
           return
         leNomDuTypePyxb  = mcRef.definitNomDuTypePyxb(forceACreer=True)
         if debug : print ('nomMC', nomMC)
@@ -589,6 +624,42 @@ class X_compoFactoriseAmbigu(X_definition):
         self.entites[nomMC][0].aDejaEteDumpe=True 
 
 
+    def fusionneDesMatricesDeMemeType(self,nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax,debug=False):
+        #if nomMC == 'BU_map' : debug=True
+        if debug : print ('fusionneDesMatricesDeMemeType', nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax)
+        elt=self.entites[nomMC][0]
+        typeDeMatrice =elt.type[0]
+        elt.dumpXsd(dansFactorisation=True)
+        if debug : 
+           #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple)
+           print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe)
+        self.texteSimple  += debutSimpleType.format(elt.nomDuTypePyxb+'_element')
+        self.texteSimple  += debutRestrictionBase.format(elt.nomDuTypeDeBase)
+        if typeDeMatrice.typEltInto != None:
+            for val in typeDeMatrice.typEltInto : self.texteSimple += enumeration.format(val)
+        self.texteSimple  += fermeRestrictionBase
+        self.texteSimple += fermeSimpleType
+        nom=elt.nomDuTypePyxb
+        self.texteSimple  += matriceSimpleType.format(nom,nom,nbColsMin,nbColsMax,nom,self.code,nom,nbLigsMin,nbLigsMax,nom,self.code,nom,1,1)
+        self.texteComplexe += eltMatrice.format(nomMC,self.code,nom,0,1)
+        if debug : print ('fusionneDesMatricesDeMemeType, self.texteSimple ', self.texteSimple)
+        if debug : print ('fusionneDesMatricesDeMemeType self.texteComplexe', self.texteComplexe)
+        if debug : print ('------------------------------------------ ')
+
+    def fusionneDesMatrices(self,nomMC):
+        print ('______fusionneDesMatrices ', nomMC, ' dans : ', self)
+        print ('Pas d union des types complexes')
+        if debug : print (self.texteComplexe)
+        #self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
+        self.texteComplexe +=debutChoiceDsBloc
+        for mc in self.entites[nomMC]:
+            mc.dumpXsd()
+            self.texteComplexe+=mc.texteElt
+            self.texteSimple+=mc.texteSimple
+            mc.aDejaEteDumpe=True 
+        self.texteComplexe+=finChoiceDsBloc
+       
+     
 
 # ----------------------------------------
 class X_definitionComposee (X_definition):
@@ -945,6 +1016,7 @@ class X_SIMP (X_definition):
         if dansFactorisation : minOccurs = 1
 
         if self.suisUneMatrice :
+           if dansFactorisation : return
            self.dumpSpecifiqueMatrice(minOccurs)
            return
 
@@ -1158,7 +1230,7 @@ class X_SIMP (X_definition):
         nom=self.nomDuTypePyxb
         nbCols=typeDeMatrice.nbCols
         nbLigs=typeDeMatrice.nbCols
-        self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max)
+        self.texteSimple += matriceSimpleType.format(nom,nom,nbCols,nbCols,nom,self.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max)
         self.texteElt = eltMatrice.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
 
         
@@ -1177,7 +1249,7 @@ class X_SIMP (X_definition):
         # on ne paut pas tester le type qui depend du cataloge
         if hasattr(self.type[0], 'typElt') : 
             self.suisUneMatrice = True
-            # on presume que le type de l elt est un ASSD
+            # on presume que le type de l elt est un ASSDi si il n est pas un type connu
             if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string'
             return dictNomsDesTypes[self.type[0].typElt] 
         else :
@@ -1396,7 +1468,7 @@ class X_JDC_CATA :
         #pprint.pprint(dico)
         # PN reflechir a ce *** de nom
         #if dico != {} : self.texteXSD += texteAnnotation.format(self.nomDuCodeDumpe,str(dico))
-        print ('uuuuuuuuuuuuuuuuuuuuuu', dico)
+        #print ('uuuuuuuuuuuuuuuuuuuuuu', dico)
         if dico != {} : self.texteXSD += texteAnnotation.format(str(dico))
 
         #import pprint
index d8f5b00852d66c0a2183ececbab7380e11c1bcb7..a2aea67e87a6876928e32f91704def9511641fe0 100755 (executable)
@@ -34,7 +34,7 @@ try :
     import pyxb.binding
     import pyxb.binding.basis
     #import pyxb.utils.utility
-    #import pyxb.utils.domutils
+    import pyxb.utils.domutils
 except : pass
 
 from Accas import A_ASSD
@@ -156,7 +156,6 @@ class X_MCSIMP(X_OBJECT):
             self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
 
             if self.waitMatrice() :
-               debug=True
                #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
                # 27/04 je ne sais pas si cela posera pb
                self.listeLines = []
@@ -265,7 +264,6 @@ class X_MCCOMPO(X_OBJECT) :
     def buildObjPyxb(self,mc_list, debug=False) :
         if not self.cata or not self.cata.modeleMetier : return
 
-        if self.nom == 'Techno_data' : debug=1
         if debug : print ('X_MCCOMPO', self.nom)
         deepDebug=False
         self.listArg=[]
@@ -473,15 +471,16 @@ class X_JDC (X_MCCOMPO):
 
 
 
-    def enregistreEtapePyxb(self,etape,indice=0):
+    def enregistreEtapePyxb(self,etape,indice=0, debug=False):
       # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
       # ne contient pas indice pour l insant
-        print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
-        print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
+
+        if debug : print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
+        if debug : print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
         if etape.nature == 'COMMENTAIRE' : return
         if not self.cata.modeleMetier : return
-        print ('etape.objPyxb', etape.objPyxb)
-        print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
+        if debug : print ('etape.objPyxb', etape.objPyxb)
+        if debug : print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
         self.objPyxb.append(etape.objPyxb)
         etape.perePyxb = self
 
@@ -499,19 +498,30 @@ class X_JDC (X_MCCOMPO):
         #except pyxb.ValidationError as e:
         #   print(e.details())
 
-    def toXml(self,fichier=None, debug=True):
+    def toXml(self,fichier=None, debug=False):
         if debug : print ('ds to XML')
         if not self.cata or not self.cata.modeleMetier : return
-        if debug : print (' to xml ***************',self.objPyxb,'***************',)
-        if debug : print (' to xml ***************',self,'***************',)
-        if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
-        if debug : print(self.objPyxb.toDOM().toprettyxml())
-        if debug : print(self.objPyxb.toxml())
+        #if debug : print (' to xml ***************',self.objPyxb,'***************',)
+        #if debug : print (' to xml ***************',self,'***************',)
+        #if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
+        #if debug : print(self.objPyxb.toDOM().toprettyxml())
+        #if debug : print(self.objPyxb.toxml())
+        #ns1 = pyxb.namespace.Namespace("xsi:schemaLocation")
+        #monUri='http://chercheurs.edf.com/logiciels/{} {}'.format(self.code,os.path.basename(self.cata.fileModeleMetier))
+        #print ('monUri', monUri)
+        #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri)
+
+        ns1 = pyxb.namespace.Namespace("http://www.w3.org/2001/XMLSchema-instance")
+        pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi')
+        texteXML  = self.objPyxb.toDOM().toprettyxml()
+        if debug : print (texteXML)
+        if debug : print ('__________________________________________________________________________')
+        #enteteXML = '<ns1:{} xmlns:ns1="http://chercheurs.edf.com/logiciels/{}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/{} file:{}>'.format(self.code,self.code,self.code,self.cata.fileModeleMetier)
         return (self.objPyxb.toDOM().toprettyxml())
 
 
     def analyseFromXML(self,debug=False):
-        print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
+        if debug : print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
         if self.procedure == "" : return
         self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
         if not hasattr(self.cata.modeleMetier,'AccasUserAssd'):
index 9512763e8f36ad95d29b9a6e3d88b9584ed158d3..64d2c9a66c2d24f0dca45b3ebcbfe9766cfdef5b 100644 (file)
@@ -121,14 +121,6 @@ finEltCataSimple = '\t\t  </xs:choice>\n\t\t</xs:complexType>\n'
 #\n\t<xs:element name="{}_Abstract" type="{}:T_{}_Abstract"/>\n'
 #implementeAbstrait  = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="{}:{}_Abstract"/>\n'
 
-# MATRICE oldVersion
-# (_matrix ou pas ?)
-#matriceSimpleType = '\t<xs:simpleType name="{}_matrix">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction  base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
-#matriceSimpleType = '\t<xs:simpleType name="{}">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction  base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
-#matriceSimpleType +='\t<xs:group name="{}_lines">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="{}" type="{}:{}_matrix" minOccurs="{}" maxOccurs="{}"/>\t\n\t\t</xs:sequence>\n\t</xs:group>\n\t\n'
-#matriceSimpleType +='\t<xs:group name="{}_lines">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\t\n\t\t</xs:sequence>\n\t</xs:group>\n\t\n'
-#matriceSimpleType +='\t<xs:group name="{}_content">\n\t\t<xs:sequence>\n\t\t\t<xs:group ref="{}:{}_lines" minOccurs="1" maxOccurs="1"/>\t\n\t\t</xs:sequence>\n\t</xs:group>'
-#eltMatrice = ' <xs:group ref="{}:{}_content" minOccurs="{}" maxOccurs="{}"/>'
 
 # TUPLE
 tupleNonHomogeneSimpleType = '\t<xs:simpleType name="{}_n{}_tuple">\n\t\t<xs:restriction base="{}"/>\n\t\t</xs:simpleType>\n'
@@ -139,7 +131,7 @@ tupleFinComplexeType       = '\n\t\t</xs:sequence>\n\t</xs:complexType>\n'
 
 # MATRICE
 eltMatrice = '\t\t\t <xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
-matriceSimpleType = '\t<xs:simpleType name="{}_line">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction  base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:length value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+matriceSimpleType = '\t<xs:simpleType name="{}_line">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction  base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value="{}"/>\n\t\t\t<xs:maxLength value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
 matriceSimpleType +='\t<xs:group name="{}_matrix">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="line" type="{}:{}_line" minOccurs="{}" maxOccurs="{}"/>\n\t\t </xs:sequence>\n\t</xs:group>\n'
 matriceSimpleType +='\t<xs:complexType name="{}"> \n\t\t<xs:group ref="{}:{}_matrix" minOccurs="1" maxOccurs="1"/>\n\t</xs:complexType>\n'