]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
A tester sur RN pour la matrice
authorpascale.noyret <pascale.noyret@edf.fr>
Mon, 19 Apr 2021 17:56:28 +0000 (19:56 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Mon, 19 Apr 2021 17:56:28 +0000 (19:56 +0200)
Efi2Xsd/AccasXsd.py
Efi2Xsd/balisesXSD.py

index e230c270fd316a807f980229ed3f1ea19c38574b..e08a6776aa367b82370effd747fe26477e0dd1d8 100755 (executable)
@@ -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)
index f2ea09e3d4457240d0dd8fc32aa5216b3073beeb..5d55ef12d081b19c13b11238f71a166faa14313b 100644 (file)
@@ -56,7 +56,7 @@ eltEtapeWithHelp = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step
 # BLOC
 debutTypeSubst    = '\t<xs:group name="{}">   \n\t\t<xs:sequence>\n'
 finTypeSubst      = '\t\t</xs:sequence>\n\t</xs:group>\n'
-substDsSequence   = '\t\t\t<xs:group ref="{}:{}"  minOccurs="{}" maxOccurs="{}"/>\n'
+substDsSequence   = '\t\t\t<xs:group ref="{}:{}"  minOccurs="{}" maxOccurs="{}">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:group>\n'
 #choiceDsBloc     = '\t\t\t<xs:choice minOccurs={}>\n'
 debutChoiceDsBloc = '<xs:choice>\n'
 debutChoiceDsBlocAvecMin = '<xs:choice minOccurs="{}">\n'
@@ -67,6 +67,7 @@ debutTypeSubstDsBlocFactorise = '\t<xs:group name="{}">\n'
 finTypeSubstDsBlocFactorise   = '\t</xs:group>\n'
 debutUnion        = '\t\t\t<xs:union>\n'
 finUnion          = '\t\t\t</xs:union>\n'
+reconstitueUnion  = '{} maxOccurs="1">\n\t\t\t\t<xs:annotation>\n\t\t\t\t\t<xs:documentation>{}</xs:documentation>\n\t\t\t\t</xs:annotation>\n\t\t\t</xs:element>\n'
 
 
 
@@ -108,5 +109,11 @@ eltCata = '\t<xs:element name="{}" type="{}:T_{}"/>\n\t\t<xs:complexType name="T
 #\n\t<xs:element name="{}_Abstract" type="{}:T_{}_Abstract"/>\n'
 #implementeAbstrait  = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="{}:{}_Abstract"/>\n'
 
+# MATRICE
+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: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="{}_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="{}"/>'
+
 if __name__ == '__main__' :
     print ('ne fait rien')