]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
chgt de noms des fichiers
authorpascale.noyret <pascale.noyret@edf.fr>
Thu, 26 Apr 2018 14:34:10 +0000 (16:34 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Thu, 26 Apr 2018 14:34:10 +0000 (16:34 +0200)
Efi2Xsd/AccasXsd.py [new file with mode: 0755]
Efi2Xsd/MCAccasXsd.py [new file with mode: 0755]
Efi2Xsd/ReadmeFichiers.txt [new file with mode: 0644]

diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py
new file mode 100755 (executable)
index 0000000..e05e7be
--- /dev/null
@@ -0,0 +1,168 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import sys,os
+import types
+
+#import raw.efficas as efficas
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+
+# ds l init du SIMP il manque siValide et fenetreIhm
+
+from mapDesTypes import dictSIMPEficasXML, dictSIMPXMLEficas
+from mapDesTypes import dictFACTEficasXML, dictFACTXMLEficas
+from mapDesTypes import dictPROCEficasXML, dictPROCXMLEficas
+from mapDesTypes import dictOPEREficasXML, dictOPERXMLEficas
+from mapDesTypes import dictBLOCEficasXML, dictBLOCXMLEficas
+from mapDesTypes import dictPourCast, dictNomsDesTypes
+from mapDesTypes import listeParamDeTypeTypeAttendu, listeParamDeTypeStr, dictPourCast
+from mapDesTypes import listeParamTjsSequence, listeParamSelonType
+
+
+from balises import *
+
+# -----------------
+class X_definition:
+# -----------------
+
+   def getCode(self):
+       if hasattr(self,'code') : return
+       obj=self
+       while ( not hasattr(obj,'code') ): obj=obj.pere
+       self.code = obj.code
+
+   def genealogie(self):
+       texte=self.nom
+       obj=self
+       while ( hasattr(obj,'pere') ):
+           texte=obj.pere.nom+'_'+texte
+           obj=obj.pere
+       return 'T_'+texte
+
+   def nomSimple(self):
+       return 'T_'+self.nom
+       #return self.genealogie()
+
+
+
+# ----------------------------------------
+class X_definitionComposee (X_definition):
+# ----------------------------------------
+   
+
+   def dumpXsd(self):
+       #print ('------------------------------------------------')
+       #print ('dumpXsd de ' , self.nom)
+       self.getCode()
+       self.nomDuTypeCree  = self.nomSimple()
+       self.texteSimple    = "" # on n ajoute pas de type simple
+
+       self.texteComplexe = debutTypeComplexe.format(self.nomDuTypeCree)
+       texteComplexeVenantDesFils=""
+       for nom in self.ordre_mc:
+          mcFils = self.entites[nom]
+          mcFils.dumpXsd()
+          self.texteComplexe += mcFils.texteElt
+          self.texteSimple   += mcFils.texteSimple 
+          texteComplexeVenantDesFils += mcFils.texteComplexe
+       self.texteComplexe += finTypeComplexe
+       self.texteComplexe  = texteComplexeVenantDesFils + self.texteComplexe
+
+       self.traduitMinMax()
+       self.texteElt=eltDsSequence.format(self.nom,self.code,self.nomDuTypeCree,self.minOccurs,self.maxOccurs)
+
+   def traduitMinMax(self):
+   # ____________________
+   # valable pour bloc, proc et oper
+      self.minOccurs = 0
+      self.maxOccurs = 1
+
+# ---------------------------------
+class X_FACT (X_definitionComposee):
+#--------- ------------------------
+   def traduitMinMax(self):
+       if self.max     == '**' or self.max  == float('inf') : self.maxOccurs="unbounded"
+       else :                                                 self.maxOccurs = self.max
+       self.minOccurs = self.min
+       if self.statut =='f' : self.minOccurs=0
+
+# ---------------------------------
+class X_OPER (X_definitionComposee):
+# ---------------------------------
+    pass
+
+# ----------------------------------
+class X_PROC (X_definitionComposee):
+#-----------------------------------
+    pass
+
+#-----------------------------------
+class X_BLOC (X_definitionComposee):
+#-----------------------------------
+   def dumpXsd(self):
+      X_definitionComposee.dumpXsd(self)
+
+#--------------------------------
+class X_SIMP (X_definition):
+#--------------------------------
+   def dumpXsd(self):
+       #print ('exploreObjet SIMP')
+       self.getCode()
+
+       #  --> homonymie on peut utiliser genealogie
+       #self.traduitMinMax()
+       #self.traduitValMinValMax()
+       self.nomDuTypeDeBase = self.traduitType()
+       self.nomDuTypeCree   = self.nomSimple()
+       self.texteSimple     = typeSimple.format(self.nomDuTypeCree, self.nomDuTypeDeBase)
+       self.texteComplexe   = ""
+
+       # on se sert des listes si maxOccurs est > 0
+       if self.statut =='f' : minOccurs = 0
+       else :                minOccurs = 1
+       self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypeCree,minOccurs,1)
+
+   def traduitType(self):
+       # il faut traduire le min et le max
+       # il faut ajouter les regles
+       # il faut gerer les types tuple et fichier
+       return dictNomsDesTypes[self.type[0]]
+  
+   def traduitValMinValMax(self):
+       self.maxInclusive=self.val_max
+       self.minInclusive=self.val_min
+       if self.val_min == float('-inf') and val_max== float('inf') : return
+       print ('il faut affiner le type du SIMP ', self.nom)
+       if self.val_max == '**' or self.val_max == float('inf') : self.maxInclusive=None
+       else : self.maxInclusive = self.val_max
+       if self.val_min == '**' or self.val_max == float('-inf') : self.maxInclusive=None
+       else : self.minInclusive = self.val_min
+       
+   def traduitMinMax(self):
+       if self.min == 1 and self.max == 1 :  return
+       print ('il faut creer une liste ' , self.nom)
+
+
+#-----------------
+class X_JDC_CATA :
+#-----------------
+
+    def dumpXsd(self):
+        self.texteSimple   = ""
+        self.texteComplexe = ""
+        self.nomDuTypeCree='T_'+self.code
+        self.texteCata = debutTypeCata.format(self.nomDuTypeCree)
+        for commande in  self.commandes :
+            commande.code=self.code
+            commande.dumpXsd()
+            self.texteSimple += commande.texteSimple
+            self.texteSimple += commande.texteComplexe
+            self.texteCata   += commande.texteElt
+        self.texteCata += finTypeCata
+        self.texteElt=eltCata.format(self.code, self.nomDuTypeCree)
+        print (self.texteSimple)
+        print (self.texteComplexe)
+        print (self.texteCata)
+        print (self.texteElt)
+   
diff --git a/Efi2Xsd/MCAccasXsd.py b/Efi2Xsd/MCAccasXsd.py
new file mode 100755 (executable)
index 0000000..eb20219
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import sys,os
+#import raw.efficas as efficas
+import types
+
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+
+
+
+class X_MCSIMP:
+# -------------
+      
+   def buildObjPyxb(self) :
+      if not self.cata.modeleMetier : return
+      #print ('X_MCSIMP buildObjPyxb', self.nom, self)
+      self.monNomDeClasseModeleMetier='T_'+self.nom
+      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomDeClasseModeleMetier)
+      if self.val != None : self.objPyxb=self.maClasseModeleMetier(self.val)
+      else                : self.objPyxb=self.maClasseModeleMetier()
+      #print ('fin X_MCSIMP', self.objPyxb, self.nom,self)
+
+
+   def setValeurObjPyxb(self,newVal):
+       if not self.cata.modeleMetier : return
+       print ('setValeurObjPyxb')
+       if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
+       else              : nvlObj=self.maClasseModeleMetier()
+       self.val=newVal
+       self.objPyxb=nvlObj
+       setattr(self.parent.objPyxb, self.nom, nvlObj)
+      
+
+class X_MCCOMPO:
+# --------------
+# 
+   def buildObjPyxb(self,mc_list) :
+      if not self.cata.modeleMetier : return
+      print ('X_MCCOMPO buildObjPyxb', self.nom, self)
+      self.monNomDeClasseModeleMetier='T_'+self.nom
+      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomDeClasseModeleMetier)
+      listArg=[]
+      for objAccas in mc_list :
+         from Accas.A_MCLIST import MCList
+         if isinstance(objAccas,MCList) :
+            for mcfact in objAccas : listArg.append(mcfact.objPyxb)
+         else : listArg.append(objAccas.objPyxb)
+      print (listArg)
+      self.objPyxb=self.maClasseModeleMetier(*listArg)
+
+class X_MCFACT :
+# --------------
+#   Pour un MCFACT : 
+#   le buildObjPyxb  sera  pris en charge par X_MCLIST 
+#   on ne fait rien
+   def buildObjPyxb(self,mc_list):
+      #print ('X_MCFACT buildObjPyxb debut et fin', self.nom, self)
+      pass
+
+class X_MCLIST:
+# --------------
+  
+   def buildObjPyxb(self,factList):
+      if not self.cata.modeleMetier : return
+      #print ('X_MCLIST buildObjPyxb', self.nom, self)
+
+      self.monNomDeClasseModeleMetier='T_'+self.nom
+      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomDeClasseModeleMetier)
+      for objAccas in factList :
+          listArg=[]
+          for objAccasFils in objAccas.mc_liste :
+              listArg.append(objAccasFils.objPyxb)
+          objAccas.objPyxb=self.maClasseModeleMetier(*listArg)
+          #print (objAccas , 'ds MCLIST a pour obj pyxb', objAccas.objPyxb)
+
+class X_JDC:
+# ----------
+   def  __init__(self):
+      #print ('X_JDC buildObjPyxb',  self)
+      if not self.cata.modeleMetier : return
+      self.monNomDeClasseModeleMetier=self.code
+      self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomDeClasseModeleMetier)
+      self.objPyxb=self.maClasseModeleMetier()
+      #print ('fin X_JDC buildObjPyxb', self.objPyxb, self)
+
+   def enregistreEtapePyxb(self,etape):
+     # OK seulement si sequence (choice ? ...)
+      print ('ds enregistreEtapePyxb', etape.nom)
+      if not self.cata.modeleMetier : return
+      self.objPyxb.append(etape.objPyxb)
+      #self.toXml()
+
+   def toXml(self):
+      if not self.cata.modeleMetier : return
+      print(self.objPyxb.toDOM().toprettyxml())
+      print(self.objPyxb.toxml())
+        
+   
+
+if __name__ == "__main__":
+   print ('a faire')
diff --git a/Efi2Xsd/ReadmeFichiers.txt b/Efi2Xsd/ReadmeFichiers.txt
new file mode 100644 (file)
index 0000000..3294b36
--- /dev/null
@@ -0,0 +1,17 @@
+AccasXsd.py
+  contient les classes qui font le lien entre les classes de definition Accas et les classes pyxb generees a partir du XSD genere a partir du catalogue
+
+balises.py
+  contient les balises necessaires pour generer le xsd metier a partir du catalogue eficas (ou .py ou en .xsd)
+
+efficas.py
+  contient le modele genere par pyxb a partir du XSD eficas
+
+mapDesTypes.py
+  fait le lien bidirectionnel entre les types ACCAS et les types XSD 
+
+MCAccasXsd.py
+  contient les classes qui font le lien entre les classes objet Accas et les classes pyxb generees a partir du XSD genere a partir du catalogue
+
+readerEfiXsd.py
+  contient les classes qui font le lien entre les classes de definition Accas et les classes pyxb generees a partir du modele eficas XSD