--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+
+import sys,os
+import types
+import Accas
+import imp
+from copy import deepcopy, copy
+import traceback
+
+# CONTEXT est accessible (__init__.py de Noyau)
+
+#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 .mapDesTypes import Tuple
+
+PourTraduction = False
+
+from .balisesXSD import *
+
+# -----------------
+class X_definition:
+# -----------------
+ def adjoint(self, liste1, liste2):
+ #print ('adjoint', liste1, liste2)
+ l=[]
+ for elt1 in liste1:
+ for elt2 in liste2:
+ newListe=deepcopy(elt1)
+ if elt2 != []: newListe.append(elt2)
+ l.append(newListe)
+ return l
+
+ def adjointUnMot(self, liste1, mot):
+ l=[]
+ for elt1 in liste1:
+ newListe=deepcopy(elt1)
+ newListe.append(mot)
+ l.append(newListe)
+ return l
+
+ def remplaceListeParContenuEtVide(self, liste1, liste2):
+ listeFinale=[]
+ for elt1 in liste1 :
+ for eltListe in liste2:
+ newListe=deepcopy(elt1)
+ if eltListe!=[] :newListe+=eltListe
+ if newListe not in listeFinale : listeFinale.append(newListe)
+ return listeFinale
+
+
+ def fusionne2Listes(self, liste1, liste2):
+ #print ('fusionne2Liste', liste1, liste2)
+ listeFinale=[]
+ for elt1 in liste1 :
+ for eltListe in liste2:
+ newListe=deepcopy(elt1)
+ if eltListe!=[] :newListe.append(eltListe)
+ listeFinale.append(newListe)
+ #print (listeFinale)
+ return listeFinale
+
+ def getNomDuCodeDumpe(self):
+ if hasattr(self,'nomDuCodeDumpe') : return
+ obj=self
+ while ( not hasattr(obj,'nomDuCodeDumpe') ): obj=obj.pere
+ self.nomDuCodeDumpe = obj.nomDuCodeDumpe
+ self.code=obj.code
+
+ def getXPathComplet(self):
+ obj=self
+ textePath='/'+self.code+":"+self.nom
+ while ( hasattr(obj,'pere') ):
+ obj=obj.pere
+ if isinstance(obj, X_BLOC) : continue
+ textePath= '/'+ self.code + ":" + obj.nom + textePath
+ textePath='.' + textePath
+ return textePath
+
+ def getXPathSansSelf(self):
+ obj=self
+ textePath=''
+ while ( hasattr(obj,'pere') ):
+ obj=obj.pere
+ if isinstance(obj, X_BLOC) : continue
+ textePath= self.code + ":" + obj.nom + '/' + textePath
+ textePath='./'+ self.code + ":" + textePath
+ return textePath
+
+ def getNomCompletAvecBloc(self):
+ obj=self
+ texteNom=self.nom
+ while ( hasattr(obj,'pere') ):
+ texteNom=obj.pere.nom+'_'+texteNom
+ 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,debug=False):
+ #if self.nom == 'SubgridScaleModel' : debug=True
+ #print ('definitNomDuTypePyxb', self, self.nom,self.nomComplet(),forceACreer)
+ #PNPN
+ if hasattr(self,'nomDuTypePyxb') : self.aCreer = False; return self.nomDuTypePyxb
+ #debug=False
+ if debug : print ('definitNomDuTypePyxb traitement pour ', self.nom)
+ self.aCreer = True
+ 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()) :
+ if debug : print ('definitNomDuTypePyxb encore jamais traite ', self.nom , ' a pour type' , nom)
+ cata.dictTypesXSD[nom] = [self,]
+ self.nomDuTypePyxb=nom
+ return nom
+
+ if nom == 'T_Consigne' : return nom
+
+ if not forceACreer :
+ self.aCreer = False
+ listePossible=cata.dictTypesXSD[nom]
+ indice=0
+ while (indice < len(listePossible)) :
+ objAComparer=listePossible[indice]
+ if debug : print (self.compare)
+ if self.compare(objAComparer) :
+ self.nomDuTypePyxb=objAComparer.nomDuTypePyxb
+ if debug : print (self, objAComparer)
+ if debug : print (type(self), type(objAComparer))
+ if debug : print ('definitNomDuTypePyxb', self.nom , 'type identique', objAComparer.nomDuTypePyxb )
+ # c est nul pour la comparaison mais cela permet d etre ok dans le dictionnaire passe a Accas
+ cata.dictTypesXSD[nom].append(self)
+ if self.label != 'SIMP' :
+ if objAComparer not in list(cata.dictTypesXSDJumeaux.keys()) : cata.dictTypesXSDJumeaux[objAComparer]=[self,]
+ else : cata.dictTypesXSDJumeaux[objAComparer].append(self)
+ return objAComparer.nomDuTypePyxb
+ indice += 1
+ self.aCreer = True
+ cata.dictTypesXSD[nom].append(self)
+ nomAlter='T_'+self.nom+'_'+str(indice)
+ if (hasattr (self, 'nomXML')) and self.nomXML != None :
+ nomAlter='T_'+self.nomXML+'_'+str(indice)
+ self.nomDuTypePyxb=nomAlter
+ return nomAlter
+
+
+# ----------------------------------------
+class X_compoFactoriseAmbigu(X_definition):
+# ----------------------------------------
+
+ def __init__(self,nom,listeDeCreation,pere, debug=True):
+
+ if debug :
+ for i in listeDeCreation : print (i.nom)
+ self.label='BlocAmbigu'
+ self.nom=nom
+ self.pere=pere
+ self.statut='f'
+ self.entites={}
+ self.mcXSD=[]
+ self.typesXSDDejaDumpes=[]
+ self.ordre_mc=[]
+ self.lesConditions = 'Possible Conditions : '
+ for mc in listeDeCreation :
+ if hasattr(mc, 'condition'):self.lesConditions += '\n\t\t\t\t\t\t' + mc.condition
+ self.mcXSD.append(mc)
+ self.ordre_mc.append(mc.nom)
+
+ if debug : print (self.mcXSD)
+ if debug : print (self.ordre_mc)
+ self.construitEntites(self.mcXSD)
+ self.constructionArbrePossibles()
+ lesPossibles=deepcopy(self.arbrePossibles)
+ if debug : print ('lesPossibles ', lesPossibles)
+
+ self.getNomDuCodeDumpe()
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ if debug : print (self.nomDuTypePyxb)
+ self.texteSimple = ''
+ self.texteComplexeVenantDesFils = ''
+ self.texteComplexe = debutTypeSubstDsBlocFactorise.format(self.nomDuTypePyxb)
+ # on enleve [] des possibles puisque l elt sera optionnel
+ lesPossibles.remove([])
+ if debug : print ('________________ init de compoAmbigu',self.nom, lesPossibles)
+ if debug : print ('self.entites', self.entites)
+ self.mcXSD=self.factoriseEtCreeDump(lesPossibles,nomAppel='Root')
+ if debug : print ('self.mcXSD',self.mcXSD)
+ self.texteComplexe += finTypeSubstDsBlocFactorise
+ self.texteComplexe +=self.texteComplexeVenantDesFils
+ #print ('fin pour prepareDumpXSD pour', self.nom)
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ #PN : le bug est la
+ # arbre des possibles identiques mais les types different
+ # comment faire ?
+ #print (self.arbrePossibles)
+ #print (autreMC.arbrePossibles)
+ #if self.arbrePossibles== autreMC.arbrePossibles : return True
+ return False
+
+ def construitEntites(self, laListe):
+ for mc in laListe :
+ if mc.nom in self.entites.keys() : self.entites[mc.nom].append(mc)
+ else : self.entites[mc.nom] = [mc,]
+ if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
+ self.ajouteLesMCFilsAEntite(mc)
+
+
+ def ajouteLesMCFilsAEntite(self,blocMc):
+ for mcFilsNom in blocMc.entites.keys():
+ if mcFilsNom == 'Consigne' or mcFilsNom == 'blocConsigne' : continue
+ if mcFilsNom not in self.entites.keys(): self.entites[mcFilsNom]=[]
+ if blocMc.label == 'BlocAmbigu' :
+ for mc in blocMc.entites[mcFilsNom] :
+ self.entites[mcFilsNom].append(mc)
+ if mc.label == 'BLOC' or mc.label == 'BlocAmbigu':
+ self.ajouteLesMCFilsAEntite(mc)
+ else :
+ self.entites[mcFilsNom].append(blocMc.entites[mcFilsNom])
+ if blocMc.entites[mcFilsNom].label == 'BLOC' or blocMc.entites[mcFilsNom].label == 'BlocAmbigu':
+ self.ajouteLesMCFilsAEntite(blocMc.entites[mcFilsNom])
+
+
+
+
+ def constructionArbrePossibles(self, debug = False):
+ if debug : print ('construction pour FACT ambigu _______________', self.nom)
+ toutesLesLignes=[[]]
+ for child in self.mcXSD :
+ if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
+ if child.label != 'BLOC' :
+ toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, child.arbrePossibles))
+ else :
+ toutesLesLignes = deepcopy(self.fusionne2Listes(toutesLesLignes, [child.nom, []]))
+
+ lignesAGarder=[]
+ for ligne in toutesLesLignes:
+ blocContenus=[]
+ aAjouter=True
+ for mc in ligne :
+ objMC=self.entites[mc][0]
+ if objMC.label == 'BLOC' :
+ blocContenus.append(objMC)
+ for b in blocContenus :
+ for frere in blocContenus[blocContenus.index(b)+1:]:
+ if b.isDisjoint(frere) : continue
+ aAjouter=False
+ break
+ if not aAjouter : break
+ if aAjouter and ligne not in lignesAGarder :
+ lignesAGarder.append(ligne)
+
+ #print ("______________________________________")
+ #for l in lignesAGarder : print (l)
+ #print (len(lignesAGarder))
+ #print ("______________________________________")
+ self.arbrePossibles=[]
+ for ligne in lignesAGarder :
+ #print ('lignesAGarder', ligne)
+ for newLigne in self.deploye(ligne):
+ #print (newLigne)
+ if newLigne not in self.arbrePossibles : self.arbrePossibles.append(newLigne)
+ #for l in self.arbrePossibles : print (l)
+ #print ("______________________________________")
+
+
+ def deploye (self, ligne):
+ toutesLesLignes=[[]]
+ for mc in ligne :
+ #print ( 'mc in deploye', mc)
+ objMC=self.entites[mc][0]
+ #print ( 'nom', objMC.nom, objMC.label)
+ if objMC.label == 'BLOC' or objMC.label == 'BlocAmbigu':
+ toutesLesLignes = deepcopy(self.remplaceListeParContenuEtVide(toutesLesLignes, objMC.arbrePossibles))
+ else :
+ toutesLesLignes = deepcopy(self.adjointUnMot(toutesLesLignes,mc ))
+ return toutesLesLignes
+
+ def construitArbrePossibles(self):
+ # inutile car on a deja l arbre mais appele parfois
+ #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, self.lesConditions)
+
+ def nomComplet(self) :
+ print ('dans nomComplet pourquoi ?',self, self.nom)
+
+
+ def factoriseEtCreeDump(self, laListe, indent=2 ,nomAppel=None, debug=False):
+ if debug : print ('_______________________________ factoriseEtCreeDump')
+ if debug : print(self.nom, laListe, indent, nomAppel)
+ maListeRetour=[]
+ aReduire={}
+
+ if [] in laListe :
+ declencheChoiceAvecSeqVid=True
+ while [] in laListe : laListe.remove([])
+ #min=0
+ else :
+ declencheChoiceAvecSeqVid=False
+ #min=1
+
+
+
+ for ligne in laListe :
+ if ligne[0] in aReduire.keys():
+ if len(ligne) == 1 :aReduire[ligne[0]].append([])
+ else : aReduire[ligne[0]].append(ligne[1:])
+ else :
+ if len(ligne) == 1 : aReduire[ligne[0]]=[[]]
+ else : aReduire[ligne[0]]=[ligne[1:],]
+
+
+ if debug : print ('la Liste', laListe, declencheChoiceAvecSeqVid)
+ if debug : print (aReduire)
+ if len(aReduire.keys()) == 1 :
+ if declencheChoiceAvecSeqVid == False :
+ creeChoice=False
+ creeSequence=True
+ self.texteComplexe += '\t'*(indent) + debSequenceDsBloc; indent=indent+1
+ else :
+ creeChoice=True
+ creeSequence=False
+ # pour regler le souci du 1er Niveau
+ self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ #if min == 1 : self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ #else : self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
+ else :
+ #self.texteComplexe += '\t'*indent + debutChoiceDsBlocAvecMin.format(min); indent=indent+1
+ self.texteComplexe += '\t'*indent + debutChoiceDsBloc; indent=indent+1
+ creeChoice=True
+ creeSequence=False
+
+ if debug : print ('creeSequence', creeSequence, aReduire)
+ for nomMC in aReduire.keys():
+ if debug : print (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 creeChoice : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
+
+ if declencheChoiceAvecSeqVid :
+ self.texteComplexe += '\t'*indent + debSequenceDsBloc
+ self.texteComplexe += '\t'*indent + finSequenceDsBloc
+ 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)
+ return (maListeRetour)
+
+
+ def ajouteAuxTextes(self,nomMC,indent,debug=False) :
+ 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
+
+ # PN change le 17 fevrier . Est-ce normal d arriver la ?
+ # if faut traiter les Blocs exclusifs qui donnent des choices de sequences
+ # mais celles-ci risquent d etre ambigues
+ while (isinstance(nomMC,list)) :
+ nomMC=nomMC[0]
+
+ if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return
+ if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites )
+ if len(self.entites[nomMC]) == 1:
+ mc=self.entites[nomMC][0]
+ mc.dumpXsd(dansFactorisation=True)
+ 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])
+ for e in (self.entites[nomMC][1:]) :
+ if type(e) != leType:
+ print ('Projection XSD impossible, changez un des ', nomMC)
+ exit()
+
+ # cette boucle ne fonctionne que pour des SIMP
+ resteATraiter=copy(self.entites[nomMC])
+ #print ('________resteATraiter', resteATraiter)
+ listePourUnion=[]
+ first=1
+ while resteATraiter != [] :
+ nvlListeATraiter=[]
+ mc=resteATraiter[0]
+ listePourUnion.append(mc)
+ for autre in resteATraiter[1:]:
+ if not (mc.compare(autre)) : nvlListeATraiter.append(autre)
+ resteATraiter=copy(nvlListeATraiter)
+
+ if len(listePourUnion) == 1:
+ mc=listePourUnion[0]
+ mc.dumpXsd(dansFactorisation=True,multiple=False,first=first)
+ 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)
+ if mc.aCreer : mc.aCreer=False
+ return
+
+ # on ajoute le nom de l element
+ if not (isinstance(self.entites[nomMC][0], Accas.SIMP)) :
+ sontTousDisjoint=True
+ index=1
+ if debug : print ('on cherche si ils sont disjoints : ',self.entites[nomMC])
+ for mc in self.entites[nomMC] :
+ if debug : print ('compare mc' , mc, ' avec :')
+ for mcFrere in self.entites[nomMC][index:]:
+ ok = mc.isDisjoint(mcFrere)
+ if not ok :
+ sontTousDisjoint=False
+ break
+ if not(sontTousDisjoint) : break
+ index+=1
+ if not sontTousDisjoint:
+ print ('2 blocs freres ont le meme nom et ne sont pas disjoints : pas encore traite')
+ 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 ('________________________')
+ return
+
+
+ if hasattr(self.entites[nomMC][0], 'dejaDumpe') : # on a deja cree le type
+ if debug : print (self.entites[nomMC][0].nomDuTypePyxb, ' deja dumpe')
+ else :
+ if debug : print ('appel de dumpXsd')
+ self.entites[nomMC][0].dejaDumpe=True
+ self.entites[nomMC][0].dumpXsd(dansFactorisation=True,multiple=True,first=first)
+ if debug : print (self.entites[nomMC][0].nomDuTypePyxb)
+
+ 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)
+ if self.entites[nomMC][0].nomDuTypePyxb in self.typesXSDDejaDumpes : return
+ self.typesXSDDejaDumpes.append(self.entites[nomMC][0].nomDuTypePyxb)
+ if debug : print ('et la j ajoute les definitions de type', self.entites[nomMC][0].nomDuTypePyxb)
+
+ nomTypePyxbUnion=self.entites[nomMC][0].nomDuTypePyxb
+ texteSimpleUnion = debutSimpleType.format(nomTypePyxbUnion)
+ texteSimpleUnion += debutUnion
+ texteSimpleUnion += '\t'*(indent)+self.entites[nomMC][0].texteSimplePart2
+ texteSimplePart1 = self.entites[nomMC][0].texteSimplePart1
+ for e in listePourUnion[1:] :
+ e.dumpXsd(dansFactorisation=True,multiple=True,first=False)
+ # 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)
+ texteSimpleUnion += '\t'*(indent) + e.texteSimplePart2
+ texteSimplePart1 += e.texteSimplePart1
+ texteSimpleUnion += finUnion
+ texteSimpleUnion +=fermeSimpleType
+ self.texteSimple += texteSimplePart1 + texteSimpleUnion
+ if debug :
+ print ('______________')
+ print (self.texteSimple)
+ print ('______________')
+ #print ('self.texteSimple', self.texteSimple)
+
+ def fusionneDsUnChoix(self, nomMC,indent, debug=False):
+ if debug : print ('_________________________________', self.nom, self, nomMC,indent)
+ if debug : print (self.texteComplexe)
+ texteDocUnion='\n'
+ texteComplexe=''
+ texteComplexeVenantDesFils=''
+ texteSimple=''
+ 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")
+ return
+ leNomDuTypePyxb = mcRef.definitNomDuTypePyxb(forceACreer=True)
+ if debug : print ('nomMC', nomMC)
+ for mc in self.entites[nomMC]:
+ if debug : print ('------------', mc)
+ # on laisse dansFactorisation a False car ce n est pas comme une fusion de bloc
+ mc.texteComplexe = ''
+ mc.texteSimple = ''
+ mc.texteElt = ''
+ mc.dumpXsd(dansFactorisationDeFusion=True)
+ if debug : print ('texteSimple\n', mc.texteSimple, '\n fin\n')
+ if debug : print ('texteComplexeVenantDesFils\n',mc.texteComplexeVenantDesFils, '\n fin\n')
+ if debug : print ('texteComplexe\n', mc.texteComplexe, '\n fin\n')
+ 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
+ texteComplexe += mc.texteComplexe
+ texteComplexeVenantDesFils += mc.texteComplexeVenantDesFils
+ texteSimple += mc.texteSimple
+
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexeVenantDesFils : \n' ,texteComplexeVenantDesFils )
+ if debug : print ('______________________________')
+ if debug : print ('______________________________')
+ if debug : print ('textecomplexe : \n' ,texteComplexe )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
+
+ self.texteElt = eltCompoDsSequence.format(nomMC, self.nomDuCodeDumpe,mcRef.nomDuTypePyxb,1,1)
+ self.texteDuFact = debutTypeCompo.format(self.entites[nomMC][0].nomDuTypePyxb)
+ self.texteDuFact += debutChoiceDsBloc
+ self.texteDuFact += texteComplexe
+ self.texteDuFact += finChoiceDsBloc
+ self.texteDuFact += finTypeCompo
+ self.texteSimple += texteSimple
+ self.texteComplexeVenantDesFils += texteComplexeVenantDesFils
+ self.texteComplexeVenantDesFils += self.texteDuFact
+ self.texteComplexe += self.texteElt
+ if debug : print ('______________________________')
+ if debug : print ('texteSimple : \n' ,self.texteSimple )
+ if debug : print ('______________________________')
+ self.entites[nomMC][0].aDejaEteDumpe=True
+
+
+
+# ----------------------------------------
+class X_definitionComposee (X_definition):
+# ------------------------------------------
+
+ def creeTexteComplexeVenantDesFils(self,dansFactorisation=False,debug=False):
+ texteComplexeVenantDesFils=""
+ blocsDejaDumpes=set()
+ #for nom in self.ordre_mc:
+ # mcFils = self.entites[nom]
+ if debug : print ('creeTexteComplexeVenantDesFils', self.nom)
+ if self.nom == 'LeProc' : debug = True
+ for mcFils in self.mcXSD :
+ #print (mcFils,mcFils.nom)
+ if mcFils.nom == 'B1_B2' :debug=True
+ else : debug=False
+ if not (isinstance(mcFils, Accas.BLOC)) :
+ mcFils.dumpXsd(dansFactorisation)
+ self.texteComplexe += mcFils.texteElt
+ if mcFils.aCreer : self.texteSimple += mcFils.texteSimple
+ if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
+ else :
+ if hasattr(mcFils,'nomXML') and mcFils.nomXML in blocsDejaDumpes and mcFils.nomXML != None : continue
+ if hasattr(mcFils,'nomXML') and mcFils.nomXML != None: blocsDejaDumpes.add(mcFils.nomXML)
+ mcFils.dumpXsd(dansFactorisation)
+ self.texteComplexe += mcFils.texteElt
+ if mcFils.aCreer : self.texteSimple += mcFils.texteSimple
+ if mcFils.aCreer : texteComplexeVenantDesFils += mcFils.texteComplexe
+ return texteComplexeVenantDesFils
+
+ def dumpXsd(self, dansFactorisation=False, dansFactorisationDeFusion = False, multiple = False, first=True, debug=False):
+ if PourTraduction : print (self.nom)
+ # le prepareDump est appele sur les fils
+ if not (self.dejaPrepareDump) : self.prepareDumpXSD()
+
+ self.getNomDuCodeDumpe()
+ if first :
+ if multiple : self.nomDuTypePyxb = self.definitNomDuTypePyxb(forceACreer=True)
+ else : self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.texteSimple = "" # on n ajoute pas de type simple
+
+ self.traduitMinMax()
+ # pour accepter les PROC et ...
+ #
+ if debug : print ('dumpXsd', self.nom, self.aCreer)
+ if self.aCreer or dansFactorisationDeFusion:
+ if not dansFactorisationDeFusion : self.texteComplexe = debutTypeCompo.format(self.nomDuTypePyxb)
+ if isinstance(self,X_OPER) or isinstance(self,X_PROC) :
+ self.texteComplexe += debutTypeCompoEtape.format(self.code)
+ self.texteComplexe += debutTypeCompoSeq
+ texteComplexeVenantDesFils= self.creeTexteComplexeVenantDesFils(dansFactorisation)
+ if not dansFactorisationDeFusion :
+ self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ self.texteComplexeVenantDesFils = ''
+ else :
+ self.texteComplexeVenantDesFils = texteComplexeVenantDesFils
+ # la fin de l oper est traitee dans le dumpXSD de X_OPER
+ if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq
+ if isinstance(self,X_PROC) : self.texteComplexe += finTypeCompoEtape
+ if not isinstance(self,X_OPER ) and not dansFactorisationDeFusion: self.texteComplexe += finTypeCompo
+ else :
+ self.texteComplexe = ""
+
+ if self.ang != "" : self.texteElt=eltCompoDsSequenceWithHelp.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs, self.ang)
+ elif self.fr != "" : self.texteElt=eltCompoDsSequenceWithHelp.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs, self.fr)
+ else : self.texteElt=eltCompoDsSequence.format(self.nom,self.nomDuCodeDumpe,self.nomDuTypePyxb,self.minOccurs,self.maxOccurs)
+ #print ('------------------------------------------------',self.nom)
+ #print (self.texteComplexe)
+
+ def traduitMinMax(self):
+ # ______________________
+ # valable pour PROC et OPER
+ self.minOccurs = 0
+ self.maxOccurs = 1
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ for attr in ( 'regles', 'fr', 'defaut', 'min' ,'max', 'position' , 'docu' ) :
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ if len(self.entites) != len(autreMC.entites) : return False
+ for defFille in self.entites.keys():
+ if defFille not in autreMC.entites.keys() : return False
+ if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
+ return True
+
+ def prepareDumpXSD(self):
+ self.dejaPrepareDump=True
+ self.inUnion=False
+ self.tousLesFils=[]
+ self.mcXSD=[]
+ for nomMC in self.ordre_mc:
+ mc=self.entites[nomMC]
+ self.mcXSD.append(mc)
+ mc.prepareDumpXSD()
+ self.chercheListesDeBlocsNonDisjoints()
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjoints.remove(l)
+ else : self.factorise(l)
+
+ def chercheListesDeBlocsNonDisjoints(self):
+ self.listeDesBlocsNonDisjoints=[]
+ for nomChild in self.ordre_mc :
+ child=self.entites[nomChild]
+ if child.label != 'BLOC' : continue
+ if self.listeDesBlocsNonDisjoints == [] :
+ self.listeDesBlocsNonDisjoints.append([child])
+ continue
+ vraimentIndependant=True
+ for liste in list(self.listeDesBlocsNonDisjoints):
+ independant=True
+ for bloc in liste :
+ if bloc.isDisjoint(child) : continue
+ if bloc.estLeMemeQue(child) : continue
+ independant=False
+ vraimentIndependant=False
+ if not (independant) :
+ liste.append(child)
+ if vraimentIndependant:
+ self.listeDesBlocsNonDisjoints.append([child])
+ # on nettoye la liste des blocs tous seuls
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if len(l) ==1 : self.listeDesBlocsNonDisjoints.remove(l)
+
+ def estLeMemeQue(self,autreMC):
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True
+ return False
+
+ def aUnPremierCommunDansLesPossibles(self, laListe) :
+ # fonctionne avec liste de mc ou une liste(mc,index)
+ import types
+ mesPremiers=set()
+ for elt,index in laListe :
+ if not type(e) == types.ListType :
+ if elt.nom in mesPremiers : return True
+ mesPremiers.add(elt.nom)
+ else :
+ if elt[0].nom in mesPremiers : return True
+ mesPremiers.add(elt[0].nom)
+ return False
+
+ def besoinDeFactoriserTrivial(self,laListe):
+ # tout faux
+ # a revoir
+ return True
+ besoin=False
+ lesPremiers=set()
+ for mcBloc in laListe :
+ mc=mcBloc.mcXSD[0]
+ if mc.label == 'BLOC' : return True
+ if not(mc.statut=='o') : return True
+ if mc.nom in lesPremiers : return True
+ lesPremiers.add(mc.nom)
+ return False
+
+ def factorise(self,liste,debug=False):
+ self.listeConstruction=liste
+ nomDebut=liste[0].nom
+ indexDebut=self.mcXSD.index(liste[0])
+ nomFin=liste[-1].nom
+ indexFin=self.mcXSD.index(liste[-1]) + 1
+ nom=nomDebut+'_'+nomFin
+ if debug : print ('___________ dans factorise', nom)
+ listeAFactoriser=[]
+ for i in range(indexDebut, indexFin) :
+ listeAFactoriser.append(self.mcXSD[i])
+
+ newListe=self.mcXSD[0:indexDebut]
+
+ monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self)
+ newListe.append(monEltFacteur)
+ newListe=newListe+self.mcXSD[indexFin:]
+ self.mcXSD=newListe
+ if debug :print ('___________ fin fin factorise', nom)
+
+ def construitTousLesFils(self):
+ for nomChild in self.ordre_mc :
+ if nomChild == 'Consigne' or nomChild == 'blocConsigne' : continue
+ child=self.entites[nomChild]
+ if child.label != 'BLOC' :
+ self.tousLesFils.append(child.nom)
+ else:
+ if child.tousLesFils == [] : child.construitTousLesFils()
+ for nomPetitFils in child.tousLesFils : self.tousLesFils.append(nomPetitFils)
+ #print ('construitArbreEntier pour ', self.nom, self.tousLesFils)
+
+
+ def isDisjoint(self, mc1) :
+ if self.tousLesFils == [] : self.construitTousLesFils()
+ if not (hasattr(mc1, 'tousLesFils')) : mc1.tousLesFils = []
+ if mc1.tousLesFils == [] : mc1.construitTousLesFils()
+ for fils in mc1.tousLesFils :
+ if fils in self.tousLesFils : return False
+ return True
+
+
+
+
+# ---------------------------------
+class X_FACT (X_definitionComposee):
+#--------- ------------------------
+#Un FACT avec max=** doit se projeter en XSD sous forme d'une sequence a cardinalite 1 et
+# l'element qui porte la repetition du FACT
+ 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
+ if self.statut =='o' and self.min < 2: self.minOccurs=1
+
+ def construitArbrePossibles(self):
+ if self.statut == 'f' :
+ self.arbrePossibles = (self.nom,[])
+ self.arbreMCPossibles = (self,None)
+ else :
+ self.arbrePossibles = (self.nom,)
+ self.arbreMCPossibles = (self,)
+ #print ('XFACT arbre des possibles de ' ,self.nom, self.arbrePossibles)
+
+
+
+# ---------------------------------
+class X_OPER (X_definitionComposee):
+# ---------------------------------
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False):
+ X_definitionComposee.dumpXsd(self,dansFactorisation)
+ self.texteComplexe += finTypeCompoSeq
+ self.texteComplexe += attributeNameName
+ self.texteComplexe += attributeTypeForASSD
+ self.texteComplexe += attributeTypeUtilisateurName.format(self.sd_prod.__name__)
+ self.texteComplexe += finTypeCompoEtape
+ self.texteComplexe += finTypeCompo
+
+
+ cata = CONTEXT.getCurrentCata()
+ if self.sd_prod.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
+ cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDCrees[self.sd_prod.__name__].append(self)
+
+
+# ----------------------------------
+class X_PROC (X_definitionComposee):
+#-----------------------------------
+ pass
+
+#-----------------------------------
+class X_BLOC (X_definitionComposee):
+#-----------------------------------
+ def dumpXsd(self, dansFactorisation=False, multiple = False, first=False, debug = False):
+ if debug : print ('X_BLOC dumpXsd', self.nom)
+ self.tousLesFils=[]
+ if self.nom == 'blocConsigne' :
+ self.texteComplexe = ""
+ self.texteSimple = ""
+ self.nomDuTypePyxb = "NonTraiteConsigne"
+ self.texteSimpleVenantDesFils = ""
+ self.aCreer = False
+ self.texteElt = ""
+
+ return
+ self.getNomDuCodeDumpe()
+ # dans ce cas les blocs successifs sont identiques et on ne dumpe que le 1er
+
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.texteSimple = "" # on n ajoute pas de type simple
+
+ # Pour les blocs le minOccurs vaut 0 et le max 1
+ if self.aCreer :
+ self.texteComplexe = debutTypeSubst.format(self.nomDuTypePyxb)
+ texteComplexeVenantDesFils=self.creeTexteComplexeVenantDesFils(dansFactorisation)
+ self.texteComplexe = texteComplexeVenantDesFils + self.texteComplexe
+ self.texteComplexe += finTypeSubst
+
+ else :
+ self.texteComplexe = ""
+
+ self.texteElt=substDsSequence.format(self.code,self.nomDuTypePyxb,0,1,'condition : ' +self.condition)
+
+ #print ('------------------------------------------------')
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if self.inUnion == True or autreMC.inUnion == True : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ for attr in ( 'condition', 'regles', ):
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ if len(self.entites) != len(autreMC.entites) : return False
+ for defFille in self.entites.keys():
+ if defFille not in autreMC.entites.keys() : return False
+ if not self.entites[defFille].compare(autreMC.entites[defFille]) : return False
+ return True
+
+ def construitArbrePossibles(self):
+ self.arbrePossibles=[[],]
+ #print ('X_BLOC je construis l arbre des possibles pour ', self.nom)
+ for child in self.mcXSD :
+ if not hasattr(child, 'arbrePossibles') : child.construitArbrePossibles()
+ #print (child.nom, child.label, child.arbrePossibles)
+ if child.label == 'BLOC' :
+ self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
+ elif child.label == 'BlocAmbigu':
+ #print ("je passe par la pour", self.nom, child.nom, self.arbrePossibles, child.arbrePossibles)
+ self.arbrePossibles = deepcopy(self.remplaceListeParContenuEtVide(self.arbrePossibles, child.arbrePossibles))
+ #print ('resultat', self.arbrePossibles)
+ else :
+ self.arbrePossibles = deepcopy(self.adjoint(self.arbrePossibles, child.arbrePossibles))
+ self.arbrePossibles.append([]) # un bloc n est pas obligatoire
+ #print ('arbre des possibles de ' ,self.nom, self.arbrePossibles)
+
+
+#--------------------------------
+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()
+ # si inUnion la comparaison est fausse : on cree le nomDuType
+ if multiple : self.inUnion=True
+ #print ('exploreObjet SIMP')
+ self.getNomDuCodeDumpe()
+ self.aCreer = True
+ self.texteComplexe = ""
+ self.texteSimple = ""
+ self.texteElt = ""
+ if self.nom =='Consigne' : return
+
+ # --> homonymie on peut utiliser genealogie ?
+ self.nomDuTypeDeBase = self.traduitType()
+ if debug : print ('nomDuTypeDeBase', self.nomDuTypeDeBase)
+ if debug : print ('multiple', multiple, 'first', first)
+ if not multiple :
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ else :
+ if first :
+ # on force la creation
+ self.nomDuTypePyxb = self.definitNomDuTypePyxb()
+ self.aCreer = True
+ else :
+ self.nomDuTypePyxb='NonDetermine'
+
+ 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
+
+ if self.suisUnTuple :
+ self.dumpSpecifiqueTuple(minOccurs)
+ return
+
+ if self.avecBlancs and self.max > 1 :
+ self.dumpSpecifiqueTexteAvecBlancs(minOccurs,multiple)
+ return
+
+ #print ('minOccurs',minOccurs)
+ # le defaut est dans l elt Name -> tester la coherence d existence avec Accas
+ # regles Accas
+
+ # pas d elt si on est dans multiple
+ # 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=""
+ for val in self.defaut : txtDefaut+=str(val) + " "
+ # cela ne fonctionne pas tres bien. a revoir
+ txtDefaut+=txtDefaut[0:-1]
+ if not('TXM' in (self.type)) :
+ # a revoir pour les tuples avec defaut
+ 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 :
+ 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 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 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:
+ # 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
+ # ou si elt est le 1er d une liste identique
+ if debug : print ('je suis aCreer', self.aCreer)
+ if not self.aCreer : return
+
+ typeATraduire=self.type[0]
+
+ self.texteSimplePart1=""
+ if not(isinstance(typeATraduire,str)) and not(isinstance(typeATraduire,Accas.Tuple)) and issubclass(typeATraduire, Accas.UserASSD) :
+ cata = CONTEXT.getCurrentCata()
+ if len(self.type) == 2 and self.type[1]=='createObject' : suffixe = 'C'
+ else : suffixe = 'U'
+ #print (cata.listeUserASSDDumpes)
+ #print (typeATraduire.__name__)
+ #print (typeATraduire.__name__ in cata.listeUserASSDDumpes)
+ if typeATraduire.__name__ not in cata.listeUserASSDDumpes :
+ cata.listeUserASSDDumpes.add(typeATraduire.__name__)
+ if issubclass(typeATraduire, Accas.UserASSDMultiple) :
+ self.texteSimplePart1 = defUserASSDMultiple.format(typeATraduire.__name__)
+ if cata.definitUserASSDMultiple == False :
+ cata.definitUserASSDMultiple = True
+ cata.texteSimple = cata.texteSimple + defBaseXSDUserASSDMultiple
+ else :
+ self.texteSimplePart1 = defUserASSD.format(typeATraduire.__name__)
+ if cata.definitUserASSD == False :
+ cata.definitUserASSD = True
+ cata.texteSimple = cata.texteSimple + defBaseXSDUserASSD
+ if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes :
+ cata.texteSimple = cata.texteSimple + defUserASSDOrUserASSDMultiple.format(typeATraduire.__name__, suffixe,typeATraduire.__name__)
+ cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe)
+
+
+ if not multiple : self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
+ else : self.texteSimple += debutSimpleTypeSsNom
+ # On est dans une liste
+ if self.max > 1 or self.max == '**' or self.max == float('inf') or hasattr(self.type[0], 'ntuple') :
+ self.texteSimple += debutTypeSimpleListe
+ self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(self.nomDuTypeDeBase)
+ if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min)
+ if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max)
+ if self.into != None:
+ # PN --> traduction des into
+ into=self.into
+ if self.intoXML != None : into = self.intoXML
+ for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val)
+ if PourTraduction :
+ for val in into : print (str(val))
+ self.texteSimple += fermeBalisesMileu
+ if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max)
+ if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min)
+ self.texteSimple += fermeRestrictionBase
+ else :
+ # ou pas
+ self.texteSimple += debutRestrictionBase.format(self.nomDuTypeDeBase)
+ if self.val_min != float('-inf') : self.texteSimple += minInclusiveBorne.format(self.val_min)
+ if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple += maxInclusiveBorne.format(self.val_max)
+ if self.into != None:
+ into=self.into
+ if self.intoXML != None : into = self.intoXML
+ for val in into : self.texteSimple += enumeration.format(val)
+ if PourTraduction :
+ for val in into : print (str(val))
+ self.texteSimple += fermeRestrictionBase
+ self.texteSimple += fermeSimpleType
+ self.texteSimplePart2 = self.texteSimple
+ self.texteSimple = self.texteSimplePart1 + self.texteSimplePart2
+
+
+ def dumpSpecifiqueTexteAvecBlancs(self,minOccurs,multiple):
+ # attention multiple non traite
+ # pour l instant on n a pas max =1 et on ne traite pas les into
+
+ texteAide = ""
+ if self.ang != '' : texteAide = self.ang
+ elif self.fr != '' : texteAide = self.fr
+
+ self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+ txtDefaut=""
+ # Pas de Defaut pour les string en XSD
+ # max sert pour la taille de la liste
+ if self.defaut : texteAide += ' Valeur par defaut dans le comm : '+str(self.defaut)
+ 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)
+
+
+ if self.max == '**' or self.max == float('inf') : max='unbounded'
+ else : max = self.max
+
+ if self.max > 1 : # juste au cas ou on traite 1 pareil
+ self.texteSimple = ''
+ cata = CONTEXT.getCurrentCata()
+ if self.nomDuTypePyxb in cata.listeTypeTXMAvecBlancs: return
+ cata.listeTypeTXMAvecBlancs.add(self.nomDuTypePyxb)
+ self.texteSimple = complexChaineAvecBlancs.format(self.nomDuTypePyxb,max,self.nomDuTypePyxb)
+ if self.intoXML != None : into = self.intoXML
+ else : into = self.into
+ if into == None :
+ self.texteSimple += typeEltChaineAvecBlancSansInto.format(self.nomDuTypePyxb)
+ else :
+ self.texteSimple += debutChaineAvecBlancsInto.format(self.nomDuTypePyxb)
+ for val in into : self.texteSimple += milieuChaineAvecBlancsInto.format(val)
+ self.texteSimple += finChaineAvecBlancsInto
+
+
+ def dumpSpecifiqueTuple(self,minOccurs):
+ self.nomDuTypeDeBase = self.traduitType()
+ tousPareil=True
+ # il faut gerer l aide et les defaut
+ if self.defaut : print ('il faut tester le defaut')
+ if self.max == '**' or self.max == float('inf') : max='unbounded'
+ else : max = self.max
+ self.texteElt = tupleNonHomogeneElt.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,max)
+ leType=self.nomDuTypeDeBase[0]
+ for leTypeComp in self.nomDuTypeDeBase[1:] :
+ if leTypeComp != leType :
+ tousPareil = False
+ break;
+ #if tousPareil :
+ #PN PN a statuer
+ # self.texteSimple += debutSimpleType.format(self.nomDuTypePyxb)
+ # self.texteSimple += debutTypeSimpleListe
+ # self.texteSimple += "\t\t\t\t"+debutRestrictionBase.format(leType)
+ # if self.val_min != float('-inf') : self.texteSimple += "\t\t\t\t"+minInclusiveBorne.format(self.val_min)
+ # if self.val_max != float('inf') and self.val_max != '**' : self.texteSimple +="\t\t\t\t"+ maxInclusiveBorne.format(self.val_max)
+ # if self.into != None:
+ # into=self.into
+ # if self.intoXML != None : into = self.intoXML
+ # for val in into : self.texteSimple += "\t\t\t\t"+enumeration.format(val)
+ # if PourTraduction :
+ # for val in into : print (str(val))
+ # self.texteSimple += fermeBalisesMileu
+ # if self.max !=1 and self.max != '**' and self.max != float('inf') : self.texteSimple += maxLengthTypeSimple.format(self.max)
+ # if self.min !=1 and self.min != float('-inf') : self.texteSimple += minLengthTypeSimple.format(self.min)
+ # self.texteSimple += fermeSimpleType
+ # return
+
+ self.texteSimple = ''
+ complexeTypeTuple = tupleDebutComplexeType.format(self.nomDuTypePyxb)
+ num = 1
+ for leType in self.nomDuTypeDeBase :
+ self.texteSimple += tupleNonHomogeneSimpleType.format(self.nomDuTypePyxb,str(num),leType)
+ complexeTypeTuple += tupleMilieuComplexeType.format(str(num),self.nomDuTypePyxb,str(num))
+ num = num + 1
+ complexeTypeTuple += tupleFinComplexeType
+ self.texteSimple += complexeTypeTuple
+
+
+ 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.code,nom,nbLigs,nbLigs,nom,self.code,nom,self.min,self.max)
+ self.texteElt = eltMatrice.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+
+
+ def prepareDumpXSD(self):
+ self.inUnion=False
+ if self.statut == 'f' : self.arbrePossibles = (self.nom,[])
+ else : self.arbrePossibles = (self.nom,)
+ self.mcXSD=[]
+
+
+
+ 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
+ # on presume que le type de l elt est un ASSD
+ if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string'
+ return dictNomsDesTypes[self.type[0].typElt]
+ else :
+ self.suisUneMatrice = False
+ if hasattr(self.type[0], 'ntuple') :
+ self.suisUnTuple = True
+ # Pour l instant pas de into dans les tuples non homogenes et pas de reference
+ # sinon, il faudra faire un for sur la suite avec les createObjet
+ leType=self.validators.typeDesTuples[0]
+ enRetour=[]
+ for i in range(self.type[0].ntuple):
+ enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]])
+ return enRetour
+ #typeATraduire=leType
+ else :
+ self.suisUnTuple = False
+ typeATraduire=self.type[0]
+ if not (typeATraduire in list(dictNomsDesTypes.keys())) :
+ #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
+ if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) :
+ # cas d une creation
+ cata = CONTEXT.getCurrentCata()
+ # PNPNPN a Revoir pour la creation des keyrefs
+ if len(self.type) == 2 and self.type[1]=='createObject' :
+ if typeATraduire.__name__ not in list(cata.dictTypesASSDorUserASSDCrees) :
+ cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C'
+ else : return 'xs:string'
+
+ # cas d une consommation
+ if typeATraduire not in list(cata.dictTypesASSDorUserASSDUtilises) :
+ cata.dictTypesASSDorUserASSDUtilises[typeATraduire]=[self,]
+ else :
+ cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,)
+ if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U'
+ else : return 'xs:string'
+ else : return ('YYYYY')
+ return dictNomsDesTypes[typeATraduire]
+
+ 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)
+
+ def compare(self,autreMC):
+ if self.label != autreMC.label : return False
+ if self.inUnion == True or autreMC.inUnion == True : return False
+ if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None : return True
+ listeAComparer = [ 'type', 'defaut', 'min' ,'max' ,'val_min' , 'val_max' ]
+ if self.intoXML != None : listeAComparer.append('intoXML')
+ else : listeAComparer.append('into')
+ if (hasattr (self, 'nomXML')) and self.nomXML != None : nomUtil=self.nomXML
+ for attr in listeAComparer :
+ val1=getattr(self,attr)
+ val2=getattr(autreMC,attr)
+ if val1 != val2 : return False
+ return True
+
+ def construitArbrePossibles(self):
+ if self.statut == 'f' :
+ self.arbrePossibles = (self.nom,[])
+ else :
+ self.arbrePossibles = (self.nom,)
+ #print ('SIMP arbre des possibles de ' ,self.nom, self.arbrePossibles)
+
+
+#-----------------
+class X_JDC_CATA :
+#-----------------
+
+ def dumpXsd(self, avecEltAbstrait, debug = True):
+ cata = CONTEXT.getCurrentCata()
+ if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait)
+
+ if debug : print ('self.importedBy -------------------', self.importedBy)
+ if debug : print ('self.code -------------------', self.code)
+
+ self.texteSimple = ""
+ self.texteComplexe = ""
+ self.texteCata = ""
+ self.texteDeclaration = ""
+ self.texteInclusion = ""
+ self.texteElt = ""
+ self.texteTypeAbstrait = ""
+
+ if self.implement == "" :
+ self.nomDuCodeDumpe = self.code
+ self.implement = self.code
+ self.nomDuXsdPere = self.code
+ else :
+ self.implement,self.nomDuXsdPere=self.implement.split(':')
+ self.nomDuCodeDumpe = self.implement
+
+ if debug : print ('self.implement -------------------', self.implement)
+ if debug : print ('self.nomDuCodeDumpe -------------------', self.nomDuCodeDumpe)
+ if debug : print ('self.nomDuXsdPere -------------------', self.nomDuXsdPere)
+
+ self.nomDuTypePyxb = 'T_'+self.nomDuCodeDumpe
+ self.dumpLesCommandes()
+
+ if self.implement == self.code :
+ self.texteCata += eltAbstraitCataPPal.format(self.code)
+ 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 0 : pass
+ else : self.texteCata += eltCataFils.format(self.implement,self.nomDuXsdPere,self.nomDuXsdPere,self.nomDuXsdPere)
+ self.texteInclusion += includeCata.format(self.nomDuXsdPere)
+
+
+ self.texteCata += eltCata.format(self.implement,self.implement,self.implement,self.implement,self.nomDuXsdPere)
+ #if self.implement == self.code :
+ # self.texteCata += debutTypeCata.format(self.nomDuCodeDumpe)
+ #else :
+ # self.texteCata += debutTypeCataExtension.format(self.nomDuCodeDumpe)
+ # self.texteCata += debutExtension.format(self.code,self.nomDuCodeDumpe)
+ # self.texteInclusion += includeCata.format(self.nomDuXsdPere)
+
+
+
+ #for codeHeritant in self.importedBy:
+ # self.texteCata += eltCodeSpecDsCata.format(codeHeritant)
+ # self.texteTypeAbstrait += eltAbstrait.format(codeHeritant,codeHeritant,self.code,codeHeritant)
+
+ #if self.implement != "" : self.texteCata = self.texteCata + finExtension + finTypeCompo
+ #else : self.texteCata += finTypeCata
+
+ #if self.implement != "" :
+ # self.texteElt=implementeAbstrait.format(self.nomDuCodeDumpe,self.code,self.nomDuTypePyxb,self.code,self.nomDuCodeDumpe)
+ #else :
+ # self.texteElt = eltCata.format(self.nomDuCodeDumpe,self.code, self.nomDuTypePyxb)
+
+ if self.implement == self.code :
+ self.texteXSD = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code)
+ elif self.nomDuXsdPere == self.code :
+ self.texteXSD = texteDebutNiveau2.format(self.code,self.implement,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
+ else :
+ self.texteXSD = texteDebutNiveau3.format(self.code,self.implement,self.code,self.nomDuXsdPere,self.code,self.code,self.code, self.code,self.code,self.code,self.code,self.code)
+
+ if self.texteInclusion != "" : self.texteXSD += self.texteInclusion
+ self.texteXSD += self.texteSimple
+ self.texteXSD += self.texteComplexe
+
+ #if self.texteTypeAbstrait != "" : self.texteXSD += self.texteTypeAbstrait
+ self.texteXSD += self.texteCata
+ #self.texteXSD += self.texteElt
+
+ toutesLesKeys=set()
+ texteKeyRef = ""
+ # Pour le nom des key_ref en creation : le type ( une seule key-ref par type. facile a retrouver)
+ for clef in self.dictTypesASSDorUserASSDCrees:
+ existeASSD=0
+ texteDesFields=""
+ for unOper in self.dictTypesASSDorUserASSDCrees[clef]:
+ if not(isinstance(unOper, Accas.OPER)) : continue
+ existeASSD=1
+ texteDesFields+=texteFieldUnitaire.format(self.code, unOper.nom)
+ if existeASSD : texteDesFields=texteDesFields[0:-2]
+ texteDesUserASSD=''
+ existeunUserASSD=0
+ for unSimp in self.dictTypesASSDorUserASSDCrees[clef]:
+ if not (isinstance(unSimp, Accas.SIMP)) : continue
+ texteDesUserASSD += unSimp.getXPathSansSelf() + " | "
+ #print (unSimp.getXPathSansSelf())
+ #texteFieldUnitaire='/'+self.code+":"+unSimp.nom
+ existeunUserASSD=1
+ if existeunUserASSD:
+ if existeASSD : texteDesFields = texteDesFields + texteDesUserASSD[0:-2] +"/>\n\t\t"
+ else: texteDesFields = texteDesUserASSD[0:-2]
+ #print (texteDesUserASSD)
+ #print (texteDesFields)
+ if texteDesFields != "" :
+ texteKeyRef += producingASSDkeyRefDeclaration.format( clef ,texteDesFields)
+
+
+ # Pour le nom des key-ref en utilisation : la genealogie complete ( une key-ref par utilisation et on retrouve facilement la )
+ for clef in self.dictTypesASSDorUserASSDUtilises:
+ for unSimp in self.dictTypesASSDorUserASSDUtilises[clef]:
+ # il faut la genealogie
+ texteKeyRef += UsingASSDkeyRefDeclaration.format(unSimp.getNomCompletAvecBloc(), unSimp.type[0].__name__,self.code, unSimp.type[0].__name__,unSimp.getXPathComplet() )
+
+ #PNPN on debranche les keyref le temps de bien reflechir a leur forme
+ #if texteKeyRef != '' :
+ # self.texteXSD = self.texteXSD[0:-3]+'>\n'
+ # self.texteXSD += texteKeyRef
+ # self.texteXSD += fermeEltCata
+
+
+
+ #if not PourTraduction : print (self.texteXSD)
+
+ import pprint
+ #pprint.pprint (cata.dictTypesXSDJumeaux)
+ #for k in cata.dictTypesXSDJumeaux:
+ # print (k.nom, k.nomComplet())
+ # print (cata.dictTypesXSDJumeaux[k][0].nom, cata.dictTypesXSDJumeaux[k][0].nomComplet())
+
+ #pprint.pprint (cata.dictTypesXSD)
+ #for k in cata.dictTypesXSD:
+ # print (k)
+ # print (cata.dictTypesXSD)
+
+ dico = {}
+ for k in list(cata.dictTypesXSD.keys()):
+ dico[k]={}
+ different=False
+ for definition in cata.dictTypesXSD[k] :
+ if definition.label == 'BLOC' or definition.label == 'BlocAmbigu':continue
+ if definition.nomDuTypePyxb != 'T_'+definition.nom : different=True
+ listeATraiter=[definition.geneaCompleteSousFormeDeListe(),]
+ while listeATraiter != [] :
+ listeGenea=listeATraiter[0]
+ listeATraiter=listeATraiter[1:]
+ txtNomComplet=''
+ indexMC=0
+ for MC in listeGenea:
+ txtNomComplet=txtNomComplet+'_'+MC.nom
+ if MC in list(cata.dictTypesXSDJumeaux.keys()) :
+ for MCJumeau in cata.dictTypesXSDJumeaux[MC]:
+ # attention nvlleGenalogie n a pas de sens en Accas
+ nvlleGenalogie=listeGenea[:indexMC]+MCJumeau.geneaCompleteSousFormeDeListe()
+ listeATraiter.append(nvlleGenalogie)
+ indexMC=indexMC+1
+ dico[k][txtNomComplet]=definition.nomDuTypePyxb
+ if dico[k]== {} or (not different) : del dico[k]
+ import pprint
+ #pprint.pprint(dico)
+ # PN reflechir a ce *** de nom
+ #if dico != {} : self.texteXSD += texteAnnotation.format(self.nomDuCodeDumpe,str(dico))
+ if dico != {} : self.texteXSD += texteAnnotation.format(str(dico))
+
+ #import pprint
+ #if (not PourTraduction) and (dico != {}) : pprint.pprint(dico)
+ print ('__________________________ decommenter pour le texteXSD________________________')
+ #print (dico)
+ #print (self.texteXSD)
+ self.texteXSD += texteFin
+ return self.texteXSD
+
+
+ def dumpLesCommandes(self):
+ cata = CONTEXT.getCurrentCata()
+ fichierCataSourceExt=os.path.basename(cata.cata.__file__)
+ fichierCataSource, extension=os.path.splitext(fichierCataSourceExt)
+ importCataSource=__import__(fichierCataSource,{},{})
+
+ texte=""
+ for m in sys.modules:
+ monModule=sys.modules[m]
+ try :
+ if m in ('os', 'sys', 'inspect', 'six', 'pickle', 'codecs') : continue
+ if m in ('cPickle', 'pprint', 'dis', '_sre', 'encodings.aliases'): continue
+ if m in ('numbers', 'optparse', 'binascii', 'posixpath') : continue
+ if m in ('_locale', '_sysconfigdata_nd', 'gc', 'functools') : continue
+ if m in ('posixpath', 'types', 'posix', 'prefs') : continue
+ if m in ('warnings', 'types', 'posix', 'prefs') : continue
+ if monModule.__name__[0:15] == '_sysconfigdata_' : continue
+ if monModule.__name__ == '__future__' : continue
+ if monModule.__name__[0:3] == 'Ihm' : continue
+ if monModule.__name__[0:5] == 'numpy' : continue
+ if monModule.__name__[0:5] == 'Noyau' : continue
+ if monModule.__name__[0:5] == 'Accas' : continue
+ if monModule.__name__[0:7] == 'convert' : continue
+ if monModule.__name__[0:7] == 'Efi2Xsd' : continue
+ if monModule.__name__[0:7] == 'Editeur' : continue
+ if monModule.__name__[0:9] == 'generator' : continue
+ if monModule.__name__[0:10] == 'Validation' : continue
+ if monModule.__name__[0:10] == 'Extensions' : continue
+ if monModule.__name__[0:12] == 'InterfaceQT4' : continue
+ if monModule.__name__ == fichierCataSource : continue
+ texte= texte + "try : import "+ monModule.__name__ + " \n"
+ texte= texte + "except : pass \n"
+ texte= texte + "try : from "+ monModule.__name__ + ' import * \n'
+ texte= texte + "except : pass \n"
+ except :
+ pass
+
+ newModule=imp.new_module('__main__')
+ exec (texte, newModule.__dict__)
+ allClassToDump=[]
+ for i in dir(importCataSource):
+ if i not in dir(newModule):
+ allClassToDump.append(importCataSource.__dict__[i])
+
+
+ self.texteSimple = ''
+ self.texteComplexe = ''
+ for c in allClassToDump :
+ if not(isinstance(c, Accas.OPER)) and not(isinstance(c, Accas.PROC)) : continue
+ c.nomDuCodeDumpe=self.nomDuCodeDumpe
+ c.code=self.implement
+ c.dumpXsd()
+
+ self.texteSimple += c.texteSimple
+ self.texteComplexe += c.texteComplexe
+ if c.ang != '' : c.texteElt = eltEtapeWithHelp.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement,c.ang)
+ elif c.fr != '' : c.texteElt = eltEtapeWithHelp.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement,c.fr)
+ else : c.texteElt = eltEtape.format(c.nom,self.implement,c.nomDuTypePyxb,self.implement)
+ self.texteCata += c.texteElt
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import sys,os
+import inspect
+import traceback
+def trace():
+ traceback.print_stack()
+#import raw.efficas as efficas
+import types
+
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+
+try :
+ import pyxb
+ import pyxb.binding
+ import pyxb.binding.basis
+ #import pyxb.utils.utility
+ #import pyxb.utils.domutils
+except : pass
+
+from Accas import A_ASSD
+
+class X_OBJECT:
+# -------------
+
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if self.nom == 'Consigne' : return None
+ trouve = False
+
+ if debug : print ('--------------- in delObjPyxb pour ' , self.nom)
+ if debug : print (self.perePyxb.objPyxb.orderedContent())
+ if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
+ if (elt.elementDeclaration.isPlural()):
+ if debug : print ('je suis Plural')
+ # monIndexInOrderedContent=0
+ # for c in self.perePyxb.objPyxb.orderedContent():
+ # if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
+ # listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+ # if len(listeObjetsAccas) == 1 : monIndex=0
+ # else : monIndex=listeObjetsAccas.index(self)
+ # listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ # listeObjetsPyxb.pop(monIndex)
+ # self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
+ for c in self.perePyxb.objPyxb.orderedContent():
+ trouve=False
+ if isinstance(c._Content__value,list) and isinstance(c._Content__value[0],type(self.objPyxb)):
+ monIndex=c.value.index(self.objPyxb)
+ trouve = True
+ if trouve : break
+ if not trouve : print ("************ pas trouve au delete"); return
+ listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ listeObjetsPyxb.pop(monIndex)
+ # si dernier ?
+ else :
+ newOrderedContent = []
+ for i in self.perePyxb.objPyxb.orderedContent():
+ if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
+ newOrderedContent.append(i)
+ if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
+ for i in range(len(newOrderedContent)):
+ self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
+ self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
+
+ setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
+ if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+
+
+ def addObjPyxb(self,indiceDsLeContenu,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+ # adherence Accas sur le parent
+ parent=self.parent
+ while (parent.isBLOC()):
+ if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
+ parent=parent.parent
+ self.perePyxb=parent
+
+ if debug :print ('indiceDsLeContenu',indiceDsLeContenu)
+ if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+
+ #if self.objPyxb ! = None : self.objPyxb.objAccas=self
+ elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+ self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
+ if (elt.elementDeclaration.isPlural()):
+ # je suis donc un MCList
+ listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+ if len(listeObjetsAccas) == 1 : monIndex=1
+ else : monIndex=listeObjetsAccas.index(self)
+ listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+ listeObjetsPyxb.insert(monIndex,self.objPyxb)
+ else :
+ setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
+ if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+ if debug : print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+
+
+ def rangDsPyxb(self):
+ monRangEnAccas=self.parent.mcListe.index(self)
+ rangEnPyxb=0
+ for frere in self.parent.mcListe[0: monRangEnAccas] :
+ rangEnPyxb += frere.longueurDsArbre()
+ return rangEnPyxb
+
+
+class X_MCSIMP(X_OBJECT):
+# -----------------------
+
+ def buildObjPyxb(self, debug=True) :
+ if not self.cata or not self.cata.modeleMetier : return
+ if self.nom == 'Consigne' : return None
+ if debug : print (self.definition.nomComplet())
+ if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
+ if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
+ elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
+
+ if self.objPyxbDeConstruction != None :
+ self.objPyxb = self.objPyxbDeConstruction
+ self.maClasseModeleMetier =type(self.objPyxb)
+ self.objPyxbDeConstruction = None
+ if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+ self.needFactory=True
+ self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+ 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()) :
+ nomComplet=self.definition.nomComplet()
+ if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()):
+ self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][nomComplet]
+ if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier)
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+ if self.waitMatrice() :
+ #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
+ # 27/04 je ne sais pas si cela posera pb
+ self.listeLines = []
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
+ if debug : print ('Matrice de type ', self.maClasseModeleMetier)
+ for v in self.valeur:
+ l=self.maClasseModeleMetier_line(v)
+ self.listeLines.append(l)
+ self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
+ #if self.objPyxb !=None : self.objPyxb.objAccas=self
+ if debug : print ('Matrice ', self.nom, self.objPyxb)
+ return
+ if self.waitTuple() :
+ self.objPyxb = []
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ # if faut traiter l autre cas
+ # et optimiser
+ if self.definition.max !=1 :
+ for v in self.valeur :
+ if debug : print ('je traite ', v)
+ listeConstruction=[]
+ for i in range(self.combienEltDsTuple()):
+ num=i+1
+ maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num))
+ listeConstruction.append(maClasseElt(v[i]))
+ self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
+ if debug : print (self.objPyxb)
+ return
+ if self.waitChaineAvecBlancs() and self.definition.max > 1:
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ if debug : print (self.valeur)
+ if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
+ else :self.objPyxb = self.maClasseModeleMetier()
+ if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+ if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+ return
+
+
+ if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+ if debug : print ('needFactory')
+ self.needFactory=True
+ self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+ else : self.needFactory=False
+
+ if self.valeur != None :
+ if self.needFactory :
+ if self.definition.max > 1 :
+ # PNPN A corriger
+ # self.objPyxb=self.maClasseModeleMetier(self.valeur)
+ self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+ else : self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+ else : self.objPyxb=self.maClasseModeleMetier(self.valeur)
+ else :
+ if self.needFactory : self.objPyxb=None
+ else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
+
+
+ #if self.objPyxb !=None : self.objPyxb.objAccas=self
+ if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+ if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+
+
+ def setValeurObjPyxb(self,newVal, debug=True):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
+ if debug : print (' self.perePyxb = ', self.perePyxb.nom)
+ if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
+ if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+ #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
+ if newVal != None :
+ if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
+ else : nvlObj=self.maClasseModeleMetier(newVal)
+ else :
+ if self.needFactory : nvlObj =None
+ else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
+ self.val=newVal
+ if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+ if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) :
+ newVal = newVal.nom
+ setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+ trouve=False
+ indice=0
+ for i in self.perePyxb.objPyxb.orderedContent():
+ if i.elementDeclaration.id() == self.nom:
+ #if isinstance(i._Content__value, self.maClasseModeleMetier) :
+ self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
+ del(self.perePyxb.objPyxb.orderedContent()[-1])
+ trouve=True
+ break
+ indice+=1
+ if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
+ self.objPyxb=nvlObj
+ #self.objPyxb.objAccas=self
+ if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+
+
+
+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 == 'Scenario_data' : debug=1
+ if debug : print ('X_MCCOMPO', self.nom)
+ deepDebug=False
+ self.listArg=[]
+ self.dicoArg={}
+ for objAccas in mc_list :
+ if objAccas.nature == 'MCBLOC' :
+ self.exploreBLOC(objAccas)
+ elif objAccas.nature == 'MCList' :
+ if objAccas[0].definition.max > 1 :
+ self.listArg.append(objAccas) # les MCList n ont pas objPyxb
+ self.dicoArg[objAccas.nom]=[]
+ for fils in objAccas :
+ fils.perePyxb=self
+ self.dicoArg[objAccas.nom].append(fils.objPyxb)
+ else :
+ objAccas[0].perePyxb=self
+ self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
+ self.listArg.append(objAccas[0].objPyxb)
+ else :
+ if objAccas.nom == 'Consigne' : continue
+ print ('______________', objAccas.nom, objAccas.objPyxb)
+ self.listArg.append(objAccas.objPyxb)
+ self.dicoArg[objAccas.nom]=objAccas.objPyxb
+ objAccas.perePyxb=self
+
+ if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
+ if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
+
+
+ self.monNomClasseModeleMetier='T_'+self.nom
+ if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
+ self.nomComplet=self.definition.nomComplet()
+ self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet]
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+ # PN : Ne doit-on pas tester avant
+ if self.objPyxbDeConstruction != None :
+ self.objPyxb = self.objPyxbDeConstruction
+ self.objPyxbDeConstruction = None
+ if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
+ if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
+ else :
+ if debug : print (self.listArg)
+ if debug : print (self.maClasseModeleMetier)
+ # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
+ self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
+ if deepDebug :
+ print ('debut de __________ new ordered content')
+ for o in self.objPyxb.orderedContent():
+ print ('o', o)
+ print ('value', o.value)
+ print ('type', type(o.value))
+ print ('id', id(o.value))
+ print ('fin __________ new ordered content')
+ print ('debut de __________ listArg')
+ for obj in self.listArg:
+ print ('obj',obj)
+ print ('type obj', type(obj))
+ print ('id(obj)', id(obj))
+ print ('fin __________ listArg')
+
+ newOrderedContent=[]
+ if debug : print ('list Arg')
+ for obj in self.listArg:
+ if debug :
+ print ('obj',obj)
+ print ('type obj', type(obj))
+ print ('id(obj)', id(obj))
+
+ # on teste le caractere pluriel
+ if isinstance(obj, list):
+ for c in self.objPyxb.orderedContent() :
+ if hasattr (c,'value') and c.value == obj :
+ newOrderedContent.append(c)
+ continue
+ if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
+ max=obj[0].definition.max
+ else : max = 1
+ if max == 1 :
+ #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
+ # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+ #else :
+ # newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
+ # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum
+ newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+ else : # element Pural
+ for c in self.objPyxb.orderedContent() :
+ if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
+
+ for i in range(len(self.listArg)):
+ self.objPyxb.orderedContent()[i]=newOrderedContent[i]
+ debug=True
+ if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
+ if debug : print ('X_MCCOMPO', self.listArg)
+ if debug : print ('X_MCCOMPO', newOrderedContent)
+ if debug : print ( 'X_MCCOMPO',self.objPyxb.orderedContent())
+ if debug : print ('fin buildObjetPyxb _______________________________________')
+ # assert(self.objPyxb.validateBinding())
+
+
+ def exploreBLOC(self,objAccas,debug=False):
+ if debug : print (' ds exploreBLOC', objAccas.nom)
+ laListeSsLesBlocs=[]
+ for fils in objAccas.mcListe:
+ if fils.nature == 'MCBLOC' :
+ self.exploreBLOC(fils)
+ elif fils.nature == 'MCList' :
+ #print ('exploreBLOC des MCList', fils.nom)
+ self.dicoArg[fils.nom]=[]
+ if fils[0].definition.max > 1 :
+ #print ('ajout de ', fils)
+ self.listArg.append(fils) # les MCList n ont pas objPyxb
+ for objFils in fils :
+ objFils.perePyxb=self
+ self.dicoArg[fils.nom].append(objFils.objPyxb)
+ else:
+ fils[0].perePyxb=self
+ self.dicoArg[fils.nom]=fils[0].objPyxb
+ self.listArg.append(fils[0].objPyxb)
+ else :
+ if fils.nom == "Consigne" : continue
+ self.listArg.append(fils.objPyxb)
+ self.dicoArg[fils.nom]=fils.objPyxb
+ fils.perePyxb=self
+ if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
+ if debug : print ('fin ds exploreBLOC', objAccas .nom)
+
+
+
+
+class X_MCBLOC (X_MCCOMPO):
+# --------------------------
+ def buildObjPyxb(self,mc_list,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
+ self.perePyxb=None
+ self.objPyxb=None
+
+ def addObjPyxb(self, indiceDsLeContenu, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
+ rangDeLObjet=indiceDsLeContenu
+ for obj in self.mcListe:
+ obj.addObjPyxb( rangDeLObjet)
+ rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
+
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
+ for obj in self.mcListe:
+ obj.delObjPyxb()
+ if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
+
+class X_MCLIST (X_MCCOMPO):
+# --------------------------
+
+ def buildObjPyxb(self,mc_list, debug=False):
+ if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
+ pass
+
+ def addObjPyxb(self,indiceDsLeContenu, debug=False):
+ if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
+ rangDeLObjet=indiceDsLeContenu
+ for objFils in self :
+ objFils.addObjPyxb(rangDeLObjet)
+ rangDeLObjet= rangDeLObjet + 1
+
+ def delObjPyxb(self, debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
+ for obj in self:
+ obj.delObjPyxb()
+ if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
+
+
+class X_MCFACT (X_MCCOMPO):
+# -------------------------
+ pass
+
+class X_ETAPE(X_MCCOMPO) :
+# -------------------------
+
+ def metAJourNomASSD(self, nom,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
+ self.objPyxb.sdName=nom
+
+class X_JDC (X_MCCOMPO):
+# ---------------------
+
+ def __init__(self):
+ self.perePyxb=None
+ if not self.cata or not self.cata.modeleMetier : return
+ #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
+ if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
+ self.monNomClasseModeleMetier=self.code
+ self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+ self.objPyxb=self.maClasseModeleMetier()
+ #self.objPyxb.objAccas=self
+ pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.NEVER)
+ pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+ pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+
+
+
+ def enregistreEtapePyxb(self,etape,indice=0):
+ # 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 not self.cata.modeleMetier : return
+ self.objPyxb.append(etape.objPyxb)
+ etape.perePyxb = self
+
+ #print (self.objPyxb.orderedContent())
+ #if indice != (len(self.objPyxb.orderedContent()) ) :
+ # tampon=self.objPyxb.orderedContent()[-1]
+ # for i in reversed(range(len(self.objPyxb.orderedContent()))):
+ # self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
+ # if i == indice + 1 : break
+ # self.objPyxb.orderedContent()[indice]=tampon
+
+ #print (self.objPyxb.orderedContent())
+ #try:
+ # self.objPyxb.validateBinding()
+ #except pyxb.ValidationError as e:
+ # print(e.details())
+
+ 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())
+ return (self.objPyxb.toDOM().toprettyxml())
+
+
+ def analyseFromXML(self,debug=False):
+ 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'):
+ from Accas import UserASSD
+ self.cata.modeleMetier.AccasUserAssd=UserASSD
+ for contentObjEtape in self.objPyxb.orderedContent():
+ objEtape=contentObjEtape.value
+ objEtape.dictArgs=(self.pyxbToDict(objEtape))
+ objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
+ objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
+ # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
+ objEtape.dictPyxb['objEnPyxb']=objEtape
+ objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
+ if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
+ maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+ if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+ if debug : print ('maClasseAccas ', maClasseAccas)
+ if debug : print ('objEtape ', objEtape , type(objEtape))
+ if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
+ if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName))
+ if debug : print ('dictArgs ',objEtape.dictArgs)
+ if debug : print ('dictPyxb ',objEtape.dictPyxb)
+ # attention au call d Oper qui renomme l objet pyxb
+ if hasattr(objEtape,'sdName') :
+ if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName)
+ objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs))
+ else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
+ if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+
+
+ def pyxbToDict(self,objAAnalyser, debug=True):
+ # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
+ if objAAnalyser is None: return
+ if debug : print ('debut pour_____________________________ ',objAAnalyser)
+ dictArgs = {}
+ # traitement SIMP
+ # ---------------
+ # a revoir pour les matrices
+ # et les tuples
+ debug = 1
+ if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
+ if debug : print ('je suis un MCSimple', objAAnalyser)
+ # traitement scalaire
+ objAAnalyser.dictPyxb=objAAnalyser
+ if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
+ if debug : print ('je suis un scalaire')
+ if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
+ if debug : print ('je suis un UserASSD')
+ laClassePyxbUserAssd=type(objAAnalyser)
+ return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
+ if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser)
+ if isinstance(objAAnalyser, str) : return str(objAAnalyser)
+ if isinstance(objAAnalyser, int) : return int(objAAnalyser)
+ if isinstance(objAAnalyser, float): return float(objAAnalyser)
+ if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser)
+ return objAAnalyser
+ else :
+ if debug : print ('je suis une liste')
+ laListe=[]
+ # liste homogene
+ if len(objAAnalyser)>0:
+ if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
+ else : estUnUserASSDorUserASSDMultiple=False
+ else : estUnUserASSDorUserASSDMultiple=False
+ if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
+ for obj in objAAnalyser :
+ if estUnUserASSDorUserASSDMultiple:
+ laClassePyxbUserAssd=obj.__class__
+ laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
+ elif isinstance(obj, str): laListe.append (str(obj))
+ elif isinstance(obj, int): laListe.append (int(obj))
+ elif isinstance(obj, float): laListe.append (float(obj))
+ elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
+ else : laListe.append(obj)
+ return (laListe)
+ # if debug : print ('je suis Plural')
+ # ou ? return objAAnalyser
+ #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
+ #pour une enum getattr(value dans le type)
+ # return pythonLiteral(ReferenceFacet(facet=value, **kw))
+ #print ('je suis un mot complexe')
+ # traitement FACT ou BLOC
+ # ------------------------
+ # il faut traiter les fact multiples
+ objAAnalyser.dictPyxb = {}
+ objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
+ #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
+ # objPyxbName = expandedName.localName()
+ # objPyxbValue = getattr(objAAnalyser, objPyxbName)
+ for objEltContentFils in objAAnalyser.orderedContent():
+ objPyxbValue = objEltContentFils.value
+ objPyxbName = objEltContentFils.elementDeclaration.id()
+ elementDeclaration = objEltContentFils.elementDeclaration
+ #if objPyxbValue == None or objPyxbValue == [] : continue
+ if elementDeclaration.isPlural():
+ if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[]
+ if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[]
+ dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
+ objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
+ else:
+ dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
+ objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
+ # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
+ #print ('avec la valeur', 'de', objAAnalyser.dictPyxb[objPyxbName])
+
+ #print ("***********************************")
+ #print ('pyxbToDict fin pour ********** ', objAAnalyser)
+ #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
+ #print ('pyxbToDict fin pour ********** ', objAAnalyser)
+ #print ("***********************************")
+ #print (dictArgs)
+ #print (dictPyxb)
+ #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
+ #print ('fin pour ',objAAnalyser)
+ return dictArgs
+
+ def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True):
+
+ enCreation=False
+ if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
+ leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()
+ if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
+ if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
+ if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
+ elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit()
+ nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
+ if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
+ laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
+ print (laClasseAccas)
+ if not(enCreation):
+ if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)]
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
+ if str(objAAnalyser) in self.g_context.keys():
+ if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas):
+ return self.g_context[str(objAAnalyser)]
+ else :
+ nvlObj=laClasseAccas()
+ oldObj=self.g_context[str(objAAnalyser)]
+ nvlObj.transfere(oldObj)
+ self.g_context[str(objAAnalyser)]=nvlObj
+ return nvlObj
+ else :
+ obj=laClasseAccas()
+ self.g_context[str(objAAnalyser)]=obj
+ return obj
+
+# def analyseContent(self,objAAnalyser):
+# objAAnalyser.dictArgs={}
+# for objContenu in objAAnalyser.content():
+# #print ('j analyse ', objContenu)
+# objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
+# objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
+# #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
+# if objContenu._IsSimpleTypeContent():
+# print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
+# print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
+# #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
+# print (dir(objContenu))
+# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
+# #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
+# else :
+# self.analyseContent(objContenu)
+# objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
+ #print ( '________________')
+ #print (objAAnalyser.monNomClasseAccas)
+ #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
+ #print ( '________________')
+
+
+
+if __name__ == "__main__":
+ print ('a faire')
--- /dev/null
+texteDebut='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\nxmlns="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
+texteDebutNiveau2='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\nxmlns="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
+texteDebutNiveau3='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\nxmlns="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
+texteFin='</xs:schema>'
+
+#texteAnnotation= '\t<xs:simpleType name="PNEFdico_{}">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
+texteAnnotation= '\t<xs:simpleType name="PNEFdico">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
+
+# SIMP
+debutSimpleType = '\t<xs:simpleType name="{}">\n'
+debutSimpleTypeSsNom = '\t<xs:simpleType>\n'
+fermeSimpleType = '\t</xs:simpleType>\n'
+debutRestrictionBase = '\t\t<xs:restriction base="{}">\n'
+fermeRestrictionBase = '\t\t</xs:restriction>\n'
+enumeration = '\t\t\t<xs:enumeration value="{}"/>\n'
+maxInclusiveBorne = '\t\t\t<xs:maxInclusive value = "{}"/>\n'
+minInclusiveBorne = '\t\t\t<xs:minInclusive value = "{}"/>\n'
+
+debutTypeSimpleListe = '\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'
+finTypeSimpleListe = '\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'
+fermeBalisesMileu = '\t\t\t\t\t\t</xs:restriction>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t </xs:simpleType>\n'
+
+maxLengthTypeSimple = '\t\t\t<xs:maxLength value = "{}"/>\n'
+minLengthTypeSimple = '\t\t\t<xs:minLength value = "{}"/>\n'
+eltDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+eltDsSequenceWithHelp = '\t\t\t<xs:element name="{}" type="{}:{}" 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:element>\n'
+eltDsSequenceWithDefautAndHelp = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}" default="{}">\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'
+eltDsSequenceWithDefaut = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}" default="{}"/>\n'
+UsingASSDkeyRefDeclaration = '\n\t<xs:keyref name="{}_Name_ref_a{}" refer="{}:Key_Name_For_{}"> \n\t\t<xs:selector xpath="{}"/>\n\t\t<xs:field xpath="."/>\n\t</xs:keyref>\n'
+# <xs:key name="Key_Name_For_ElementarySurface">
+# <xs:selector xpath="./Vimmp:CDM/Vimmp:Geometric_Domain/Vimmp:Surface"/>
+# <xs:field xpath="./Vimmp:SurfaceName"/>
+# </xs:key>
+
+ #<xs:keyref name="MyField_Ref_A_CreateMesh" refer="Test1:Key_Name_In_ReadMesh_CreateMesh">
+ #<xs:selector xpath="./Test1:MyField/Test1:onMesh"/>
+
+
+
+
+# COMPO
+debutTypeCompo = '\t<xs:complexType name="{}" >\n'
+debutTypeCompoEtape = '\t <xs:complexContent>\n\t <xs:extension base="T_step_{}">\n'
+finTypeCompoEtape = '\t </xs:extension>\n\t </xs:complexContent>\n'
+debutTypeCompoSeq = '\t\t<xs:sequence>\n'
+finTypeCompoSeq = '\t\t</xs:sequence>\n'
+finTypeCompo = '\t</xs:complexType>\n'
+eltCompoDsSequence = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+eltCompoDsSequenceWithHelp = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+#name="{}" type="{}:{}" 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:element>\n'
+#eltCompoDsSequenceInExtension = '\t\t\t<xs:element name="{}" type="{}:{}"/>\n'
+
+# ETAPE
+eltEtape = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}"/>\n'
+eltEtapeWithHelp = '\t<xs:element name="{}" type="{}:{}" substitutionGroup="step_{}">\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'
+
+# 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\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 = '\t\t<xs:choice>\n'
+debutChoiceDsBlocAvecMin = '<xs:choice minOccurs="{}">\n'
+finChoiceDsBloc = '\t\t</xs:choice>\n'
+debSequenceDsBloc = '<xs:sequence>\n'
+finSequenceDsBloc = '</xs:sequence>\n'
+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'
+
+
+
+# User OR ASSD
+attributeNameName = '\t\t<xs:attribute name="sdName" type="xs:string"/>\n'
+attributeTypeForASSD = '\t\t<xs:attribute name="sdType" type="xs:string" fixed="ASSD"/>\n'
+attributeTypeUtilisateurName = '\t\t<xs:attribute name="typeUtilisateur" type="xs:string" fixed="{}"/>\n'
+producingASSDkeyRefDeclaration='\t<xs:key name="Key_Name_For_{}">\n\t\t<xs:selector xpath="."/>\n\t\t<xs:field xpath="{}"/>\n\t</xs:key>\n'
+texteFieldUnitaire="./{}:{}/@name |"
+defBaseXSDUserASSD='\t<xs:simpleType name="AccasUserAssd">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+defBaseXSDUserASSDMultiple='\t<xs:simpleType name="AccasUserAssdMultiple">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
+defUserASSDMultiple='\t<xs:simpleType name="{}">\n\t\t<xs:restriction base="AccasUserAssdMultiple">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+defUserASSD ='\t<xs:simpleType name="{}">\n\t\t<xs:restriction base="AccasUserAssd">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
+defUserASSDOrUserASSDMultiple='\t<xs:simpleType name="{}_{}">\n\t\t<xs:restriction base="{}">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
+
+
+# CATA
+debutTypeCata = '\t<xs:complexType name="T_{}">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
+debutTypeCataExtension = '\t<xs:complexType name="T_{}">\n'
+finTypeCata = '\t\t</xs:choice>\n\t</xs:complexType>\n'
+finSchema = '</xs:schema>'
+#eltCata = '\t<xs:element name="{}" type="{}:{}"/>\n'
+#eltCodeSpecDsCata = '\t\t\t<xs:element ref="{}_Abstract" minOccurs="0" maxOccurs="1"/>\n'
+#fermeEltCata = '\t</xs:element>\n'
+includeCata = '<xs:include schemaLocation="cata_{}.xsd" />\n\n'
+
+
+# EXTENSION
+debutExtension = '\t\t<xs:complexContent>\n\t\t<xs:extension base="{}:T_{}_Abstract">\n\t\t<xs:choice minOccurs="0" maxOccurs="unbounded">\n'
+finExtension = '\t\t</xs:choice>\n\t\t</xs:extension>\n\t\t</xs:complexContent>\n'
+
+# TYPE ABSTRAIT
+eltAbstraitCataPPal = '\t<xs:complexType name="T_step_{}" abstract="true"/>\n'
+eltAbstraitCataFils = '\t<xs:complexType name="T_step_{}" abstract="true">\n\t\t<xs:complexContent>\n\t\t\t<xs:extension base="{}:T_step_{}"/>\n\t\t</xs:complexContent>\n\t</xs:complexType>\n'
+eltCataPPal = '\t<xs:element name="step_{}" type="{}:T_step_{}"/>\n'
+eltCataPPalWithHelp = '\t<xs:element name="step_{}" type="{}:T_step_{}"/>\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'
+eltCataFils = '\t<xs:element name="step_{}" type="{}:T_step_{}" substitutionGroup="step_{}"/>\n'
+eltCataFilsWithHelp = '\t<xs:element name="step_{}" type="{}:T_step_{}" substitutionGroup="step_{}"/>\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'
+
+eltCata = '\t<xs:element name="{}" type="{}:T_{}"/>\n\t\t<xs:complexType name="T_{}">\n\t\t <xs:choice minOccurs="0" maxOccurs="unbounded">\n\t\t\t<xs:element ref="step_{}" minOccurs="0" maxOccurs="1"/>\n\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'
+tupleNonHomogeneElt = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
+tupleDebutComplexeType = '\t<xs:complexType name="{}">\n\t\t<xs:sequence>'
+tupleMilieuComplexeType = '\n\t\t\t<xs:element name="n{}" type="{}_n{}_tuple" minOccurs="1" maxOccurs="1"/>'
+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: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'
+
+# CHAINES AVEC BLANC
+debutChaineAvecBlancsInto = '\t<xs:simpleType name="{}_enum">\n\t\t<xs:restriction base="xs:string">\n'
+milieuChaineAvecBlancsInto = '\t\t\t<xs:enumeration value="{}"/>\n'
+finChaineAvecBlancsInto = '\t\t</xs:restriction>\n\t\t</xs:simpleType>\n'
+
+complexChaineAvecBlancs = '\t<xs:complexType name="{}">\n\t\t<xs:sequence maxOccurs="{}">\n\t\t\t\t<xs:element name="s__" type="{}_enum"/>\n\t\t\t</xs:sequence>\n\t</xs:complexType>\n'
+
+typeEltChaineAvecBlancSansInto = '\t\t<xs:simpleType name="{}_enum">\n\t\t\t<xs:restriction base="xs:string">\n\t\t\t</xs:restriction>\n\t\t</xs:simpleType>'
+if __name__ == '__main__' :
+ print ('ne fait rien')
--- /dev/null
+class Tuple:
+ def __init__(self,ntuple):
+ self.ntuple=ntuple
+
+ def __convert__(self,valeur):
+ if type(valeur) == types.StringType:
+ return None
+ if len(valeur) != self.ntuple:
+ return None
+ return valeur
+
+ def info(self):
+ return "Tuple de %s elements" % self.ntuple
+
+ __repr__=info
+ __str__=info
+
+
+
+def inverseDico(dicoSource) :
+#---------------------------
+ dicoInverse = {}
+ for (clef,valeur) in dicoSource.items():
+ if not(type(valeur) is tuple):
+ dicoInverse[valeur]=clef
+ continue
+ (elt,att)=valeur
+ if elt not in dicoInverse : dicoInverse[elt]={}
+ dicoInverse[elt][att]=clef
+ return dicoInverse
+
+dictSIMPEficasXML= { 'typ' : 'nomTypeAttendu',
+ 'statut' : 'statut',
+ 'min' : 'minOccurences',
+ 'max' : 'maxOccurences',
+ 'homo' : 'homo' ,
+ 'position' : 'portee',
+ 'validators' : 'validators' ,
+ 'sug' : 'valeurSugg',
+ 'defaut' : 'valeurDef' ,
+ 'into' : ('plageValeur','into'),
+ 'val_min' : ('plageValeur','borneInf'),
+ 'val_max' : ('plageValeur','borneSup'),
+ 'ang' : ('doc','ang'),
+ 'fr' : ('doc','fr',),
+ 'docu' : ('doc','docu'),
+ }
+
+dictSIMPXMLEficas= inverseDico(dictSIMPEficasXML)
+
+
+
+dictFACTEficasXML = { 'statut' : 'statut',
+ 'min' : 'minOccurences',
+ 'max' : 'maxOccurences',
+ 'ang' : ('doc','ang'),
+ 'fr' : ('doc','fr',),
+ 'docu' : ('doc','docu'),
+ 'regles' : 'regles',
+ 'validators' : 'validators' ,
+ }
+
+dictFACTXMLEficas = inverseDico(dictFACTEficasXML)
+
+dictBLOCEficasXML = { 'statut' : 'statut',
+ 'ang' : ('doc','ang'),
+ 'fr' : ('doc','fr',),
+ 'regles' : 'regles',
+ 'condition' : 'condition' ,
+ }
+
+dictBLOCXMLEficas = inverseDico(dictBLOCEficasXML)
+
+dictPROCEficasXML = { 'nom' : 'nom',
+ 'regles' : 'regles',
+ 'ang' : ('doc','ang'),
+ 'fr' : ('doc','fr',),
+ 'docu' : ('doc','docu'),
+ }
+
+dictPROCXMLEficas = inverseDico(dictPROCEficasXML)
+
+dictOPEREficasXML = dictPROCEficasXML
+dictOPERXMLEficas = dictPROCXMLEficas
+
+dictPourCast = { 'I' : int, 'R' : float, 'bool' : bool , }
+dictNomsDesTypes = { 'I' : 'xs:int', 'R' : 'xs:float', bool : 'xs:boolean' , 'TXM' : 'xs:string', 'Fichier' : 'xs:string', 'Repertoire':'xs:string', 'FichierNoAbs' : 'xs:string', 'FichierOuRepertoire':'xs:string' }
+
+listeParamDeTypeTypeAttendu = ( 'defaut', 'sug', 'val_min', 'val_max', 'into', 'intoSug')
+listeParamDeTypeStr = ('fr', 'docu', 'ang', 'nom' )
+
+listeParamTjsSequence = ('into' , 'intoSug')
+listeParamSelonType = ('defaut', 'sug', 'into', 'intoSug')
+
+if __name__ == "__main__":
+ import pprint
+ pp=pprint.PrettyPrinter(indent=4)
+ print ('dictSIMPEficasXML')
+ pp.pprint(dictSIMPEficasXML)
+ print ('\n\n')
+ print ('dictSIMPXMLEficas')
+ pp.pprint(dictSIMPXMLEficas)
+ print ('\n\n')
+ print ('dictFACTEficasXML')
+ pp.pprint(dictFACTEficasXML)
+ print ('\n\n')
+ print ('dictFACTXMLEficas')
+ pp.pprint(dictFACTXMLEficas)
+ print ('\n\n')
+ print ('dictPROCEficasXML')
+ pp.pprint(dictPROCEficasXML)
+ print ('\n\n')
+ print ('dictPROCXMLEficas')
+ pp.pprint(dictPROCXMLEficas)
+ print ('\n\n')
+ print ('dictNomsDesTypes')
+ pp.pprint(dictNomsDesTypes )
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+ Ce module sert pour charger les parametres de configuration d'EFICAS
+"""
+# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
+import os, sys, types, re
+import traceback
+from Editeur.Eficas_utils import read_file
+from Extensions.i18n import tr
+
+
+class configBase(object):
+
+ #-------------------------------
+ def __init__(self,appliEficas,repIni):
+ #-------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs
+ # On a deux directories : la directory generale (Repertoire d install + Nom du code
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
+ # et la directorie de l utilisateur
+ # HOME/.Eficas_Openturns
+ # Le fichier prefs.py va etre lu dans la directory generale
+ # puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE}
+ # par celui de l utilisateur
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+ # dans le fichier general sinon
+
+ self.appliEficas = appliEficas
+ self.code = appliEficas.code
+ self.salome = appliEficas.salome
+ if self.salome : self.name="editeur_salome.ini"
+ else : self.name="editeur.ini"
+ self.rep_mat = None
+ self.repIni = repIni
+
+ if self.code == None : self.code=''
+ if sys.platform[0:5]=="linux" :
+ self.rep_user = os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
+ else :
+ self.rep_user = os.path.join('C:/','.config/Eficas',self.code)
+
+
+ self.setValeursParDefaut()
+
+ if self.code != '' :
+ self.lectureFichierIniStandard()
+ self.lectureFichierIniIntegrateur()
+ self.lectureFichierIniUtilisateur()
+
+ if self.boutonDsMenuBar:
+ self.closeAutreCommande = True
+ self.closeFrameRechercheCommande = True
+
+ #Particularite des schemas MAP
+ if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
+
+ #if self.appliEficas: self.parent=appliEficas.top
+ #else: self.parent=None
+
+ if not os.path.isdir(self.savedir) :
+ if sys.platform[0:5]=="linux" :
+ self.savedir=os.environ['HOME']
+ else:
+ self.savedir='C:/'
+
+
+
+ def setValeursParDefaut(self):
+ #-----------------------------
+
+ # Valeurs par defaut
+ if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
+ self.path_doc = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
+ self.exec_acrobat = 'acroread'
+ nomDir="Eficas_"+self.code
+ if sys.platform[0:5]=="linux" :
+ self.savedir = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
+ else:
+ self.savedir = os.path.abspath('C:/')
+ self.modeNouvCommande='initial'
+ self.affiche="alpha"
+ self.closeAutreCommande = False
+ self.closeFrameRechercheCommande = False
+ self.closeFrameRechercheCommandeSurPageDesCommandes = False
+ self.closeEntete = False
+ self.closeArbre = False
+ self.demandeLangue=False
+ self.suiteTelemac=False
+ self.nombreDeBoutonParLigne=0
+ self.translatorFichier=None
+ self.dicoImages= {}
+ self.dicoIcones= {}
+ self.afficheCommandesPliees = True
+ self.afficheFirstPlies = False
+ self.simpleClic = False
+ self.afficheOptionnelVide=False
+ self.afficheListesPliees=True
+ self.boutonDsMenuBar=False
+ self.ficIcones=None
+ self.repIcones=None
+ self.differencieSiDefaut=False
+ self.typeDeCata='Python'
+ self.closeParenthese=False
+ self.closeOptionnel=False
+ self.afficheFactOptionnel=False
+ self.enleverActionStructures=False
+ self.enleverPoubellePourCommande=False
+ self.enleverParametres=False
+ self.enleverSupprimer=False
+ self.ajoutExecution=False
+ self.utilParExtensions=[]
+ self.rendVisiblesLesCaches=False
+ self.pasDeMCOptionnels=False
+
+ self.dumpXSD=False
+ self.withXSD=False
+ self.afficheIhm=True
+
+ self.afficheUQ=False
+ self.afficheUQ=True
+
+
+
+ #--------------------------------------
+ def lectureFichierIniStandard(self):
+ #--------------------------------------
+
+ name='prefs_'+self.appliEficas.code
+ try :
+ prefsCode=__import__(name)
+ except :
+ self.catalogues=[]
+ print ('pas de fichier de prefs')
+ return
+ for k in dir(prefsCode):
+ if (k[0:1] != "__" and k[-1:-2] !='__'):
+ valeur=getattr(prefsCode,k)
+ setattr(self,k,valeur)
+
+
+
+ #--------------------------------------
+ def lectureFichierIniIntegrateur(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ clef="PREFS_CATA_"+self.code
+ try :
+ repIntegrateur=os.path.abspath(os.environ[clef])
+ except :
+ return
+
+ fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
+ if not os.path.isfile(fic_ini_integrateur): return
+ txt = read_file(fic_ini_integrateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ try :
+ from PyQt5.QtWidgets import QMessageBox
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ except :
+ print("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
+ return
+ self.labels_eficas.append('rep_aide')
+ for k in self.labels_eficas :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+
+ #--------------------------------------
+ def lectureFichierIniUtilisateur(self):
+ #--------------------------------------
+ # Surcharge les parametres standards par les parametres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
+ if not os.path.isfile(self.fic_ini_utilisateur): return
+
+ txt = read_file(self.fic_ini_utilisateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ try :
+ from PyQt5.QtWidgets import QMessageBox
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ except :
+ print ("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur))
+ for k in self.labels_user :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+ #--------------------------------------
+ def saveParams(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux parametres dans le fichier de configuration utilisateur
+ #
+ texte=""
+ for clef in self.labels_user :
+ if hasattr(self,clef):
+ valeur=getattr(self,clef)
+ texte= texte + clef+" = " + repr(valeur) +"\n"
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in dir(self):
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ valeur=getattr(self,k)
+ texte= texte + k+" = " + repr(valeur) +"\n"
+
+ f=open(self.fic_ini_utilisateur,'w+')
+ f.write(texte)
+ f.close()
+#
+
+
+def makeConfig(appliEficas,rep):
+ return configBase(appliEficas,rep)
# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013 EDF R&D
+# Copyright (C) 2007-2021 EDF R&D
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
- from builtins import range
+ from builtins import str
+ from builtins import range
except : pass
import types,sys,os, re
import subprocess
import traceback
-import six
-from six.moves import range
import traceback
# Methodes Communes ou appelees depuis avec Ihm
# ---------------------------------------------
- def __init__ (self,appli,fichier = None, jdc = None, units = None, include=0 ):
- #------------------------------------------------------------------------------#
+ def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ):
+ #-----------------------------------------------------------------------------------#
# paticularisee avec Ihm
if debug : print ('dans le init de JDCEditorSsIhm')
- self.appliEficas = appli
- self.appli = appli
+ self.appliEficas = appliEficas
self.fichier = fichier
- self.fichierComplet = fichier
+ self.fichierComplet = fichier
+ if fichier != None : self.extensionFichier = os.path.splitext(fichier)[1]
+ else : self.extensionFichier = None
self.jdc = jdc
- self.first = True
+ self.first = True
self.jdc_item = None
self.dicoNouveauxMC = {}
self.dicoNouveauxFact = {}
self.dict_reels = {}
self.liste_simp_reel = []
- if appli != None : self.salome = self.appliEficas.salome
+ if self.appliEficas != None : self.salome = self.appliEficas.salome
else : self.salome = 0
# ces attributs sont mis a jour par definitCode appelee par newEditor
self.code = self.appliEficas.maConfiguration.code
self.maConfiguration = self.appliEficas.maConfiguration
- self.version_code = session.d_env.cata
-
if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
- if self.maConfiguration.typeDeCata == 'XML' :
- from . import readercataXML as readercata
- else :
- from . import readercata
- self.readercata = readercata.ReaderCata( self, self.appliEficas )
- self.appliEficas.readercata=self.readercata
- self.appliEficas.code=self.code
+ if self.maConfiguration.typeDeCata == 'XML' :
+ from . import readercataXML as readercata
+ else :
+ from . import readercata
+ self.readercata = readercata.ReaderCata( self, self.appliEficas )
+ self.appliEficas.readercata=self.readercata
+ self.appliEficas.code=self.code
else :
- self.readercata=self.appliEficas.readercata
- if self.readercata.fic_cata == None : return #Sortie Salome
+ self.readercata=self.appliEficas.readercata
+ if self.readercata.fichierCata == None : return #Sortie Salome
self.titre=self.readercata.titre
- self.format = self.appliEficas.format_fichier
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
- if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
+ #if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
self.dict_reels={}
self.liste_simp_reel=[]
self.dicoNouveauxMC={}
try:
- self.maConfiguration.generator_module
- _module = __import__(self.maConfiguration.generator_module)
- info = _module.entryPoint()
- generator.plugins.addEntryPoint(info)
+ self.maConfiguration.generator_module
+ _module = __import__(self.maConfiguration.generator_module)
+ info = _module.entryPoint()
+ generator.plugins.addEntryPoint(info)
except:
- pass
+ pass
try:
- self.maConfiguration.convert_module
- #print self.maConfiguration.convert_module
- _module = __import__(self.maConfiguration.convert_module)
- info = _module.entryPoint()
- convert.plugins.addEntryPoint(info)
+ self.maConfiguration.convert_module
+ #print self.maConfiguration.convert_module
+ _module = __import__(self.maConfiguration.convert_module)
+ info = _module.entryPoint()
+ convert.plugins.addEntryPoint(info)
except :
- pass
+ pass
self.maConfiguration.mesGenerators = generator
self.maConfiguration.mesconvertisseurs = convert
+ try : self.XMLgenerator=generator.plugins['xml']()
+ except : self.XMLgenerator=None
+
+
+ if self.formatFichierOut in generator.plugins.keys():
+ self.generator = generator.plugins[self.formatFichierOut]()
+
self.fileInfo = None
self.lastModified = 0
self.nouveau=0
if self.fichier is not None: # fichier jdc fourni
if jdc==None :
- #print ('PNPN : chgt try en if')
- try :
- #if 1 :
- self.jdc = self.readFile(self.fichier)
- except :
- print ("mauvaise lecture du fichier")
- if self.salome :
- try :
- self.appliEficas.addJdcInSalome( self.fichier)
- except :
- print ("mauvais enregistrement dans Salome")
+ #print ('PNPN : chgt try en if')
+ try :
+ #if 1 :
+ self.jdc = self.readFile(self.fichier)
+ except :
+ print ("mauvaise lecture du fichier")
+ if self.salome :
+ try : self.appliEficas.addJdcInSalome( self.fichier)
+ except : print ("mauvais enregistrement dans Salome")
else :
- self.jdc=jdc
+ self.jdc=jdc
if self.jdc is not None and units is not None:
- self.jdc.recorded_units=units
- self.jdc.old_recorded_units=units
+ self.jdc.recorded_units=units
+ self.jdc.old_recorded_units=units
else:
if not self.jdc: # nouveau jdc
- if not include :
- self.jdc = self._newJDC(units=units)
- else :
- self.jdc = self._newJDCInclude(units=units)
+ if not include : self.jdc = self._newJDC(units=units)
+ else : self.jdc = self._newJDCInclude(units=units)
self.nouveau=1
if self.jdc:
- self.jdc.appli = self # a resorber
self.jdc.editor = self
- self.jdc.lang = self.appli.langue
+ self.jdc.lang = self.appliEficas.langue
self.jdc.aReafficher=False
txt_exception = None
if not jdc:
- self.jdc.analyse()
+ if self.extensionFichier == '.xml' :
+ if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
+ else : print ('run MDM with -x option (MDM for XML)'); exit()
+ else : self.jdc.analyse()
txt_exception = self.jdc.cr.getMessException()
if txt_exception :
self.jdc = None
self.informe('pb chargement jdc',txt_exception)
- else:
+ #else:
#comploader.chargerComposants()
- #cette ligne devrait etre dans editor ???
- self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+ #self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
#-------------------------------#
def readFile(self, fn):
# charge un JDC
# paticularisee avec Ihm
- fn = six.text_type(fn)
+ fn = str(fn)
jdcName=os.path.basename(fn)
# Il faut convertir le contenu du fichier en fonction du format
- if self.appliEficas.format_fichier_in in convert.plugins:
- # Le convertisseur existe on l'utilise
-
- p=convert.plugins[self.appliEficas.format_fichier_in]()
- p.readfile(fn)
-
- if p.text=="" : self.nouveau=1
- #print ('PNPN --> CIST a faire')
-
- pareil,texteNew=self.verifieChecksum(p.text)
- if not pareil :
- self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
-
- p.text=texteNew
- memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
- if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
- p.text=texteNew
-
- text=p.convert('exec',self.appliEficas)
-
- if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ formatIn=self.appliEficas.formatFichierIn
+ if self.extensionFichier == '.xml' and self.appliEficas.maConfiguration.withXSD: formatIn='xml'
+ if formatIn in convert.plugins:
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[formatIn]()
+ p.readfile(fn)
+
+ if p.text=="" : self.nouveau=1
+ #print ('PNPN --> CIST a faire')
+
+ if formatIn != 'xml':
+ pareil,texteNew=self.verifieChecksum(p.text)
+ if not pareil : self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
+ p.text=texteNew
+ memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
+ if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
+ p.text=texteNew
+ text=p.convert('exec',self.appliEficas)
+ if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ else:
+ text=p.text
else :
self.afficheInfos("Type de fichier non reconnu",'red')
self.informe( "Type de fichier non reconnu",
- "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
return None
CONTEXT.unsetCurrentStep()
#jdc=self.readercata.cata[0].JdC(procedure=text,
jdc=self.readercata.cata.JdC(procedure=text,
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
nom=jdcName,
if self.code == "PSEN" : texte = self._newPSEN()
if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
- #if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
- #jdc=self.readercata.cata[0].JdC( procedure =texte,
- #print (self.readercata.cata)
jdc=self.readercata.cata.JdC( procedure =texte,
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
rep_mat=self.maConfiguration.rep_mat
)
- jdc.lang = self.appli.langue
+ jdc.lang = self.appliEficas.langue
if units is not None:
- jdc.recorded_units=units
- jdc.old_recorded_units=units
- ## PNPN est ce que la ligne suivante est bien utile ?
- # elle positionne le contexte
+ jdc.recorded_units=units
+ jdc.old_recorded_units=units
+ # chgt le 15/10/19
+ # Attention positionne contexte ?
# est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
- if self.format == 'xml' : return jdc
- if texte == "" :
- jdc.editor=self
- jdc.analyse()
+ jdc.editor=self
return jdc
- #--------------------------------#
+ #--------------------------------#
def _newJDCInclude( self ,units = None):
#--------------------------------#
"""
#jaux=self.readercata.cata[0].JdC( procedure="",
jaux=self.readercata.cata.JdC( procedure="",
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
rep_mat=self.maConfiguration.rep_mat,
)
+ jaux.editor=self
jaux.analyse()
J=JdC_aux( procedure="",
- appli=self,
+ appliEficas=self.appliEficas,
cata=self.readercata.cata,
cata_ord_dico=self.readercata.cata_ordonne_dico,
jdc_pere=jaux,
rep_mat=self.maConfiguration.rep_mat,
)
+ J.editor=self
J.analyse()
if units is not None:
- J.recorded_units=units
- J.old_recorded_units=units
+ J.recorded_units=units
+ J.old_recorded_units=units
return J
#-----------------------#
# Il faut convertir le contenu du fichier en fonction du format
- if self.format in convert.plugins :
+ if self.formatFichierIn in convert.plugins :
# Le convertisseur existe on l'utilise
- p=convert.plugins[self.format]()
+ p=convert.plugins[self.formatFichierIn]()
p.readfile(file)
text=p.convert('execnoparseur')
if not p.cr.estvide():
# Il n'existe pas c'est une erreur
self.afficheInfos("Type de fichier non reconnu",'red')
self.informe( "Type de fichier non reconnu",
- "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
return None
#----------------------------------------------#
#-----------------------#
def generDico(self):
#-----------------------#
- if 'dico' in generator.plugins:
- self.generator=generator.plugins['dico']()
- #print (self.generator)
- jdc_formate=self.generator.gener(self.jdc)
- #print (jdc_formate)
- dico=self.generator.Dico
- #print (dico)
- return dico
+ if 'dico' in generator.plugins:
+ self.generator=generator.plugins['dico']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ #print (jdc_formate)
+ dico=self.generator.Dico
+ #print (dico)
+ return dico
#-----------------------#
def viewJdcSource(self):
#-----------------------#
if self.fichier == None : return
- f=open(self.fichier,'r')
- texteSource=f.read()
- f.close()
- self._viewText(texteSource, "JDC_SOURCE")
+ if os.path.isfile(self.fichier):
+ f=open(self.fichier,'r')
+ texteSource=f.read()
+ f.close()
+ self._viewText(texteSource, "JDC_SOURCE")
+ else :
+ self._viewText("file doesn't exist", "JDC_SOURCE")
+
#-----------------------#
def viewJdcPy(self):
#-----------------------#
- strSource = str( self.getTextJDC(self.format) )
+ strSource = str( self.getTextJDC(self.formatFichierOut) )
self._viewText(strSource, "JDC_RESULTAT")
#-----------------------#
def viewJdcRapport(self):
#-----------------------#
# on ajoute les regles
- strRapport = six.text_type( self.jdc.report() )
+ strRapport = str( self.jdc.report() )
self._viewText(strRapport, "JDC_RAPPORT")
#-----------------------#
def viewJdcRegles(self):
#-----------------------#
# on ajoute les regles
- texte_global, test_global = self.jdc.verifRegles()
+ texte_global, test_global = self.jdc.verifRegles()
self._viewText(texte_global, "JDC_REGLES")
#-----------------------#
def getJdcRapport(self):
#-----------------------#
# on ajoute les regles
- strRapport = six.text_type( self.jdc.report() )
+ strRapport = str( self.jdc.report() )
return strRapport
#---------------------#
def getFileName(self):
#---------------------#
- return self.fichier
+ return self.fichier
#-------------------#
def initModif(self):
#-------------------#
- """
- Met l'attribut modified a 'o' : utilise par Eficas pour savoir
- si un JDC doit etre sauvegarde avant destruction ou non
- """
- self.modified = True
+ """
+ Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+ si un JDC doit etre sauvegarde avant destruction ou non
+ """
+ self.modified = True
#--------------------------------------------------#
@return flag indicating success
"""
- fn = six.text_type(fn)
+ fn = str(fn)
if txt == None :
- txt = self.getTextJDC(self.format,formatLigne=formatLigne)
+ txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
eol = '\n'
if len(txt) >= len(eol):
- if txt[-len(eol):] != eol:
- txt += eol
+ if txt[-len(eol):] != eol:
+ txt += eol
else:
txt += eol
txt=self.ajoutVersionCataDsJDC(txt)
f.close()
return 1
except IOError as why:
- self.afficheInfos('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' + str(why))
+ print('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' , str(why))
+ self.afficheInfos('Le fichier'+str(fn) + 'n a pas pu etre sauvegarde ' , 'red')
return 0
+
#-----------------------------------------------------------#
- def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"):
+ def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"):
#-----------------------------------------------------------#
- if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
- if format in generator.plugins:
-
- # Le generateur existe on l'utilise
- self.generator=generator.plugins[format]()
- try :
- jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
- if pourRun : jdc_formate=self.generator.textePourRun
- if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
- except ValueError as e:
- self.informe( "Erreur a la generation",str(e),'red')
- return
-
- if not self.generator.cr.estvide():
- self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+ if format == None : format = self.formatFichierOut
+ if format in generator.plugins:
+
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ try :
+ jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+ if pourRun : jdc_formate=self.generator.textePourRun
+ if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+ except ValueError as e:
+ self.informe( "Erreur a la generation",str(e),'red')
+ return
+
+ if not self.generator.cr.estvide():
+ self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ return ""
+ else:
+ return jdc_formate
+ else:
+ # Il n'existe pas c'est une erreur
+ self.informe("Format inconnu", self.format + " non reconnu" )
return ""
- else:
- return jdc_formate
- else:
- # Il n'existe pas c'est une erreur
- self.informe("Format inconnu", self.format + " non reconnu" )
- return ""
#------------------------------#
def verifieChecksum(self,text):
checkAvant=text[indexDeb:indexFin+13]
textJDC=text[0:indexDeb]+text[indexFin+13:-1]
if self.code != 'PSEN' and self.code != 'PSEN_N1':
- checksum=self.getChecksum(textJDC)
- pareil=(checkAvant==checksum)
+ checksum=self.getChecksum(textJDC)
+ pareil=(checkAvant==checksum)
else :
- pareil=1
+ pareil=1
return pareil, textJDC
#---------------------------#
def getChecksum(self,texte):
#---------------------------#
try :
- import haslib
- newtexte=texte.replace('"','\\"')
- hash_checksum = hashlib.md5()
- hash_checksum.update(newtexte.encode('utf-8'))
- checksum = hash_checksum.hexdigest()
- ligne = "#CHECKSUM:"+checksum+":FIN CHECKSUM"
- except :
- try :
- newtexte=texte.replace('"','\\"')
- commande='echo "'+newtexte+'"|md5sum'
- a=os.popen(commande)
- checksum=a.read()
- a.close()
- except :
- checksum='Fichier trop long \n'
- ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
- return ligne
+ import haslib
+ newtexte=texte.replace('"','\\"')
+ hash_checksum = hashlib.md5()
+ hash_checksum.update(newtexte.encode('utf-8'))
+ checksum = hash_checksum.hexdigest()
+ ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
+ except :
+ try :
+ newtexte=texte.replace('"','\\"')
+ commande='echo "'+newtexte+'"|md5sum'
+ a=os.popen(commande)
+ checksum=a.read()
+ a.close()
+ except :
+ checksum='Fichier trop long \n'
+ ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+ return ligne
#----------------------#
def getDico(self):
#---------------------#
- if 'dicoImbrique' in generator.plugins:
- self.generator=generator.plugins['dicoImbrique']()
- #print (self.generator)
- jdc_formate=self.generator.gener(self.jdc)
- dico=self.generator.Dico
- return dico
- else :
- self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
- return ""
-
- #-----------------------------------------#
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+ return dico
+ else :
+ self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
+ return ""
+
+ #-----------------------------------------#
def chercheGroupes(self):
#-----------------------------------------#
listeMA,listeNO=self.getTextJDC("GroupMA")
def chercheDico(self):
#-----------------------------------------#
dicoCourant={}
- format = self.appliEficas.format_fichier
+ format = self.appliEficas.formatFichierOut
if format in generator.plugins:
- # Le generateur existe on l'utilise
- self.generator=generator.plugins[format]()
- jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
- dicoCourant=self.generator.dico
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
+ dicoCourant=self.generator.dico
return dicoCourant
#-----------------------------------------------------------------#
def saveFileLegerAs(self, fileName = None) :
#-----------------------------------------------------------------#
if fileName != None :
- self.fichier = fileName
- return self.saveFileLeger(fileName)
+ self.fichier = fileName
+ return self.saveFileLeger(fileName)
return self.saveFileLeger()
#-----------------------------------------------------------------#
self.generator=generator.plugins[self.format]()
print (self.generator)
if hasattr(self.generator, "writeComplet"):
- self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
+ self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
# ---------------------------------------------
#--------------------------------#
def ajoutCommentaire(self):
#--------------------------------#
- print ('pas programme sans Ihm')
- print ('prevenir la maintenance du besoin')
+ print ('pas programme sans Ihm')
+ print ('prevenir la maintenance du besoin')
#--------------------------------------#
def informe(self,titre,txt,critique=True):
#--------------------------------------#
# methode differenre avec et sans ihm
- if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
- print (titre)
- print (txt)
- if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ print (titre)
+ print (txt)
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
#--------------------------------------#
def afficheInfos(self,txt,couleur=None):
#--------------------------------------#
# methode differenre avec et sans ihm
- print (txt)
+ print (txt)
#-----------------------------------------------------------------------#
def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
"""
- if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
self.fichierOut = fichier
-
- if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
+ if self.appliEficas.maConfiguration.fichierXML !=None : self.jdc.analyseXML()
+ if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
+ if self.jdc.cata.modeleMetier and self.jdc.isValid():
+ if self.generator != self.XMLgenerator :
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fichier)
+ return(1,self.fichier)
+ if self.jdc.isValid() and hasattr(self.generator, "writeDefault"):
self.generator.writeDefault(fichier)
elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
self.generator.writeDefault(fichier)
-
self.modified = 0
-
return (1, self.fichier)
#
etape=monItem.item.object
CONTEXT.set_current_step(etape)
try :
- ok=etape.build_includeEtape(texte)
+ ok=etape.build_includeEtape(texte)
except :
- ok=0
+ ok=0
if not ok :
- QMessageBox.information( self,
- tr("Import texte"),
- tr("Impossible d importer le texte"))
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
self.tree.racine.build_children()
return ok
# dans le JDC
ouChercher=etape
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC != None : ouChercher.suppentite(monMC)
ouChercher.state='changed'
ouChercher=etape
if debug : print (ouChercher)
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui", debug=1)
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC == None : monMC = ouChercher.addEntite(MCFils)
monMC.valeur=valeurs
ouChercher=etape
if debug : print (ouChercher)
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui", debug=1)
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
# Attention si +sieursMCFACT
ouChercher=ouChercher[0]
if debug : print (ouChercher)
# dans le JDC
ouChercher=etape
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
monMC=etape.getChild(ouChercher,restreint="oui")
if monMC== None : monMC= ouChercher.addEntite(MCFils)
monMC.isvalid()
# pour VP
monObj=etape
for mot in listeAvant :
- monObj=monObj.getChild(mot,restreint="oui")
- if monObj==None : return False
+ monObj=monObj.getChild(mot,restreint="oui")
+ if monObj==None : return False
if monObj == None : return False
if monObj.valeur != valeur :
- # PNPN le setValeur fait des bugs --> pourquoi
- #monObj.setValeur(valeur)
- monObj.valeur=valeur
- monObj.isValid()
+ # PNPN le setValeur fait des bugs --> pourquoi
+ #monObj.setValeur(valeur)
+ monObj.valeur=valeur
+ monObj.isValid()
return True
#-------------------------------------------------#
if debug : print ('etape trouvee', ouChercher)
if ouChercher==None : return None
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if debug : print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
if debug : print ('monMC', monMC)
if monMC== None : return None
ouChercher=etape
debug=0
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if debug : print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
if debug : print ('monMC', monMC)
return monMC
if e.nom == nomEtape : ouChercher=e; break
if ouChercher==None : return None
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- #print (mot, ouChercher)
- if ouChercher==None : return None
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ #print (mot, ouChercher)
+ if ouChercher==None : return None
monMC=ouChercher.getChild(MCFils,restreint="oui")
monMC.set_valeur(valeur)
monMC.isvalid()
# dans le JDC
ouChercher=etape
if isinstance (etape, str):
- ouChercher=None
- for e in self.jdc.etapes:
- if e.nom == etape : ouChercher=e; break
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == etape : ouChercher=e; break
if ouChercher==None : return
for mot in listeAvant :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
- if ouChercher==None : return
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
monMC=ouChercher.getChild(MCFils,restreint="oui")
if monMC== None : monMC= ouChercher.addEntite(MCFils)
for mot in listeAvant :
try :
- ouChercher=ouChercher.getChild(mot,restreint="oui")
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
# Le mot clef n est pas la
except : return 0
try :
- monMC=ouChercher.getChild(MCFils,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
# Le mot clef n est pas la
except : return 0
if monMC == None : return 0
if hasattr(monMC.definition,'into') :
- if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
- else : maListeDeValeur=monMC.definition.into
+ if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+ else : maListeDeValeur=monMC.definition.into
else :
- return 0
+ return 0
monMC.state='changed'
return 1
+ def dumpXsd(self, avecEltAbstrait = False):
+ #-----------------------------------------#
+ texteXSD = self.readercata.cata.JdC.dumpXsd(avecEltAbstrait)
+ return texteXSD
+
+ def dumpStructure(self):
+ #----------------------------#
+ texteStructure = self.readercata.cata.JdC.dumpStructure()
+ return texteStructure
+
#-------------------------------------#
def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
#-------------------------------------#
ouChercher=definitionEtape
if len(listeMC) > 1 :
- for mc in listeMC[0:-1]:
- mcfact=ouChercher.entites[mc]
- ouChercher=mcfact
+ for mc in listeMC[0:-1]:
+ mcfact=ouChercher.entites[mc]
+ ouChercher=mcfact
mcAccas=ouChercher.entites[listeMC[-1]]
mcAccas.defaut=valeurs
# dans le MDD
#print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
if isinstance (etape, str):
- for e in self.jdc.etapes:
- if e.nom == etape : etape=e; break
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
if etape == None : return
#definitionEtape=getattr(self.jdc.cata[0],etape)
definitionEtape=getattr(self.jdc.cata,etape)
self.changeIntoDefMC(etape,listeMC,into)
if isinstance (etape, str):
- for e in self.jdc.etapes:
- if e.nom == etape : etape=e; break
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
if etape == None : return
ouChercher = etape
indexDeb=text.find("#VERSION_CATALOGUE:")
indexFin=text.find(":FIN VERSION_CATALOGUE")
if indexDeb < 0 :
- self.versionCataDuJDC="sans"
- textJDC=text
+ self.versionCataDuJDC="sans"
+ textJDC=text
else :
- self.versionCataDuJDC=text[indexDeb+19:indexFin]
- textJDC=text[0:indexDeb]+text[indexFin+23:-1]
+ self.versionCataDuJDC=text[indexDeb+19:indexFin]
+ textJDC=text[0:indexDeb]+text[indexFin+23:-1]
self.versionCata="sans"
if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
#---------------------------#
def _newJDCCND(self):
#---------------------------#
- extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
-
- #if self.salome == 0 :
- QMessageBox.information( self,
- tr("Fichier Med"),
- tr("Veuillez selectionner un fichier Med"))
- QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
- caption='Fichier Med',
- filter=extensions)
- QSfichier=QSfichier[0]
- self.fichierMED=QSfichier
- from acquiertGroupes import getGroupes
- erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
- if erreur != "" : print ("a traiter")
- texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
- texteSources=""
- texteCond=""
- texteNoCond=""
- texteVcut=""
- texteZs=""
- for groupe in self.listeGroupes :
- if groupe[0:8]=='CURRENT_':
- texteSources +=groupe[8:]+"=SOURCE("
- texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
- if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
- if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
- if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
- if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
- texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
- self.newTexteCND=texte
- self.modified=1
- return texte
+ extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
+
+ #if self.salome == 0 :
+ QMessageBox.information( self,
+ tr("Fichier Med"),
+ tr("Veuillez selectionner un fichier Med"))
+ QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
+ caption='Fichier Med',
+ filter=extensions)
+ QSfichier=QSfichier[0]
+ self.fichierMED=QSfichier
+ from acquiertGroupes import getGroupes
+ erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
+ if erreur != "" : print ("a traiter")
+ texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
+ texteSources=""
+ texteCond=""
+ texteNoCond=""
+ texteVcut=""
+ texteZs=""
+ for groupe in self.listeGroupes :
+ if groupe[0:8]=='CURRENT_':
+ texteSources +=groupe[8:]+"=SOURCE("
+ texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
+ if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
+ if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
+ if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
+ if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
+ texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
+ self.newTexteCND=texte
+ self.modified=1
+ return texte
if __name__ == "__main__":
- print ('a faire')
+ print ('a faire')
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import sys,os
-repIni=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
-ihmQTDir=os.path.join(repIni,"UiQT5")
-editeurDir=os.path.join(repIni,"Editeur")
-ihmDir=os.path.join(repIni,"InterfaceQT4")
+repIni = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
+ihmQTDir = os.path.join(repIni,"UiQT5")
+editeurDir = os.path.join(repIni,"Editeur")
+ihmDir = os.path.join(repIni,"InterfaceQT4")
-if ihmDir not in sys.path : sys.path.append(ihmDir)
-if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
-if editeurDir not in sys.path :sys.path.append(editeurDir)
-
-def getEficasSsIhm(code=None,fichier=None,ssCode=None,multi=False,langue='en',versionCode=None):
- #print (versionCode)
- from .qtEficasSsIhm import AppliSsIhm
- Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode)
- from Editeur import session
- options=session.parse(['ssIhm','-k',code,'-v',versionCode])
- return Eficas
+if ihmDir not in sys.path : sys.path.append(ihmDir)
+if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
+if editeurDir not in sys.path : sys.path.append(editeurDir)
+if sys.version_info[0] < 3:
+ print("Must be using Python 3")
+ sys.exit()
-def lanceEficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'):
+def lanceEficas(code=None, multi=False, langue='en', labelCode=None):
+#-------------------------------------------------------------------
"""
- Lance l'appli EFICAS
+ Lance l'appli EFICAS avec Ihm
"""
- # Analyse des arguments de la ligne de commande
try :
- from PyQt5.QtWidgets import QApplication
+ from PyQt5.QtWidgets import QApplication
except :
- print('Please, set qt environment')
- return
+ print('Please, set qt environment')
+ return
from Editeur import session
- options=session.parse(sys.argv)
- if options.code!= None : code=options.code
- if options.ssCode!= None : ssCode=options.ssCode
+ options = session.parse(sys.argv)
+ if options.code != None : code=options.code
from InterfaceQT4.qtEficas import Appli
app = QApplication(sys.argv)
- #import cProfile, pstats, StringIO
- #pr = cProfile.Profile()
- #pr.enable()
-
- Eficas=Appli(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue)
- #pr.disable()
- #s = StringIO.StringIO()
- #sortby = 'cumulative'
- #ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- #ps.print_stats()
- #print (s.getValue())
-
+ Eficas=Appli(code=code,salome=0,multi=multi,langue=langue,labelCode=labelCode)
Eficas.show()
res=app.exec_()
sys.exit(res)
+def getEficasSsIhm(code=None, multi=False, langue='en', labelCode=None,forceXML=False, genereXSD=False, fichierCata=None):
+#-------------------------------------------------------------------------------------------------------------------------
+ """
+ Lance l'appli EFICAS sans Ihm
+ """
+ from Editeur import session
+ options = session.parse(sys.argv)
+ if options.code != None : code=options.code
+ if forceXML : options.withXSD=True
+
+ from .qtEficasSsIhm import AppliSsIhm
+ Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, labelCode=labelCode, genereXSD=genereXSD, fichierCata=fichierCata)
+ return Eficas
+
+
+
+def genereXSD(code=None):
+#------------------------
+ from Editeur import session
+ options = session.parse(sys.argv)
+ if code != None : options.code = code
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+
+ monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
+ monEditor=monEficasSsIhm.getEditor()
+ #texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
+ texteXSD=monEditor.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
+
+ fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
+ #if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
+ #if fichierCataTrunc[0] in ('_','-') : fichierCataTrunc=fichierCataTrunc[1:]
+ fileXSD = fichierCataTrunc + '.xsd'
+
+ f = open( str(fileXSD), 'w')
+ f.write(str(texteXSD))
+
+def lanceEficas_Web(code=None):
+#------------------------------
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if code != None : options.code = code
+ try : fichier=options.comm[0]
+ except : fichier=None
+
+ monEficasSsIhm = getEficasSsIhm(code=options.code )
+ from .editorSsIhm import JDCEditorSsIhm
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ print ('voici le JDCEditor', monEditeur)
+
+def genereXML(code=None):
+#-----------------------
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if code != None : options.code = code
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+ try : fichier=options.comm[0]
+ except : fichier=None
+ if fichier==None :
+ print ('comm file is needed')
+ return
+
+ monEficasSsIhm = getEficasSsIhm(code=options.code, forceXML=True)
+
+ from .editorSsIhm import JDCEditorSsIhm
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ print (options)
+ if options.fichierXMLOut == None :
+ fichierXMLOut=fichier[:fichier.rfind(".")]+'.xml'
+ else :
+ fichierXMLOut=options.fichierXMLOut
+ if not(monEditeur.jdc.isValid()):
+ print ('Fichier comm is not valid')
+ return
+ #print ('Fichier comm is not valid')
+ monEditeur.XMLgenerator.gener(monEditeur.jdc)
+ monEditeur.XMLgenerator.writeDefault(fichierXMLOut)
+
+def genereStructure(code=None):
+#------------------------------
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if code != None : options.code = code
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+
+ monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
+ monEditor=monEficasSsIhm.getEditor()
+ texteStructure=monEditor.dumpStructure()
+
+ fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
+ fileStructure = fichierCataTrunc + '.txt'
+ f = open( str(fileStructure), 'w')
+ f.write(str(texteStructure))
+ f.close()
+
+def validateDataSet(code=None):
+#------------------------------
+ from Editeur import session
+ options=session.parse(sys.argv)
+ if code != None : options.code = code
+ if options.fichierCata == None :
+ print ('Use -c cata_name.py')
+ return
+ fichier=options.comm[0]
+ if fichier==None :
+ print ('comm file is needed')
+ return
+ from .editorSsIhm import JDCEditorSsIhm
+ monEficasSsIhm = getEficasSsIhm(code=options.code)
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ if not (monEditeur.jdc.isValid()) : print (monEditeur.getJdcRapport())
+ else : print ('Jdc is valid')
+ return monEditeur.jdc.isValid()
+
+def validateFonction(laFonction, debug=False):
+#-------------------------------
+ # ici un singleton pour avoir l editor, le catalogue et...
+ monEficasSsIhm = getEficasSsIhm(code='Essai')
+ monEditor=monEficasSsIhm.getEditor()
+ #print ('_______ validateFonction', laFonction, laFonction.__name__)
+ from functools import wraps
+ from collections import OrderedDict
+ from inspect import getargspec
+ @wraps(laFonction)
+ def fonctionValidee(*args, **kwargs):
+ laFonctionName = laFonction.__name__
+ if debug : print('Appel {} avec args={} et kwargs={}'.format( laFonction.__name__, args, kwargs))
+ laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
+ objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(*args,**kwargs)
+ if (objConstruit.isValid()) :
+ ret = laFonction(*args, **kwargs)
+ return ret
+ else :
+ print ('mauvais arguments')
+ print (objConstruit.CR())
+ return None
+ return fonctionValidee
+
+ #maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+ return fonctionValidee
+
+ return laFonction
+
+def createFromDocumentAccas(fichierCata=None,fichier=None,code=None):
+#------------------------------------------------------------
+ if fichier == None : print ('file is needed'); return None
+ if fichierCata == None : print ('cata file is needed'); return None
+
+ from Noyau.N_OBJECT import activeSurcharge
+ activeSurcharge()
+
+ from .editorSsIhm import JDCEditorSsIhm
+ monEficasSsIhm = getEficasSsIhm(code='Essai', fichierCata=fichierCata)
+ monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
+ return monEditeur.jdc
+ #from Noyau
+
+
+# --------------------------- toutes les fonctions après sont obseletes
def lanceEficas_ssIhm(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en'):
"""
- Lance l'appli EFICAS pour trouver les noms des groupes
+ Lance l'appli EFICAS SsIhm
"""
# Analyse des arguments de la ligne de commande
+ print ('deprecated')
from Editeur import session
options=session.parse(sys.argv)
- if version!=None and options.cata==None : options.cata=version
- if fichier==None : fichier=options.comm[0]
- if code == None : code=options.code
+ if version!=None and options.version == None : options.version=version
+ if fichier == None : fichier=options.comm[0]
+ if code == None : code=options.code
from .qtEficas import Appli
Eficas=Appli(code=code,salome=0,ssCode=ssCode,ssIhm=True,langue=langue)
from . import readercata
if not hasattr ( Eficas, 'readercata'):
- monreadercata = readercata.ReaderCata( parent, Eficas )
- Eficas.readercata=monreadercata
+ monreadercata = readercata.ReaderCata( parent, Eficas )
+ Eficas.readercata=monreadercata
from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
return monEditeur
def lanceEficas_ssIhm_chercheGroupes(code=None,fichier=None,ssCode=None,version=None):
+ print ('deprecated')
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
print((monEditeur.chercheGroupes()))
def lanceEficas_ssIhm_cherche_cr(code=None,fichier=None,ssCode=None,version=None):
+ print ('deprecated')
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
print((monEditeur.jdc.cr))
def lanceEficas_ssIhm_reecrit(code=None,fichier=None,ssCode=None,version=None,ou=None,cr=False,debug=False,leger=False,langue='ang'):
+ print ('deprecated')
#print 'lanceEficas_ssIhm_reecrit', fichier
monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version,langue=langue)
- if ou == None :
- fileName=fichier.split(".")[0]+"_reecrit.comm"
- fn=fichier.split(".")[0]+"_cr.txt"
+ if ou == None :
+ fileName=fichier.split(".")[0]+"_reecrit.comm"
+ fn=fichier.split(".")[0]+"_cr.txt"
else :
- f=fichier.split(".")[0]+"_reecrit.comm"
- f1=os.path.basename(f)
- fn=fichier.split(".")[0]+"_cr.txt"
- f2=os.path.basename(fn)
- fileName=os.path.join(ou,f1)
- fileCr=os.path.join(ou,f2)
+ f=fichier.split(".")[0]+"_reecrit.comm"
+ f1=os.path.basename(f)
+ fn=fichier.split(".")[0]+"_cr.txt"
+ f2=os.path.basename(fn)
+ fileName=os.path.join(ou,f1)
+ fileCr=os.path.join(ou,f2)
debut=False
if debug :
- import cProfile, pstats, StringIO
- pr = cProfile.Profile()
- pr.enable()
- monEditeur.saveFileAs(fileName=fileName)
- pr.disable()
- s = StringIO.StringIO()
- sortby = 'cumulative'
- ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
- ps.print_stats()
- print (s.getValue())
+ import cProfile, pstats, StringIO
+ pr = cProfile.Profile()
+ pr.enable()
+ monEditeur.saveFileAs(fileName=fileName)
+ pr.disable()
+ s = StringIO.StringIO()
+ sortby = 'cumulative'
+ ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
+ ps.print_stats()
+ print (s.getValue())
elif not leger : monEditeur.saveFileAs(fileName=fileName)
else : monEditeur.saveFileLegerAs(fileName=fileName)
if cr:
- f = open(fileCr, 'w')
- f.write(str(monEditeur.jdc.report()))
- f.close()
+ f = open(fileCr, 'w')
+ f.write(str(monEditeur.jdc.report()))
+ f.close()
def lanceEficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION_STUDY'):
"""
Lance l'appli EFICAS pour trouver les noms des groupes
"""
+ print ('deprecated')
# Analyse des arguments de la ligne de commande
from Editeur import session
options=session.parse(sys.argv)
from .qtEficas import Appli
- #app = QApplication(sys.argv)
- #Eficas=Appli(code=code,ssCode=None,salome=0)
from .ssIhm import QWParentSSIhm
Eficas=QWParentSSIhm(code,version)
from . import readercata
if not hasattr ( Eficas, 'readercata'):
- monreadercata = readercata.ReaderCata( parent, Eficas )
- Eficas.readercata=monreadercata
+ monreadercata = readercata.ReaderCata( parent, Eficas )
+ Eficas.readercata=monreadercata
from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
parameters=getJdcParameters(texte,macro)
return parameters
-#def getEficasSsIhm(code='Adao',versionCode='V0'):
-# from .qtEficasSsIhm import AppliSsIhm
-# Eficas=AppliSsIhm(code=code,ssCode=None,salome=0)
-# return Eficas
def getJdcParameters(jdc,macro):
"""
specified jdc text to a python dictionnary whose keys are the
names of the data of the macro.
"""
+ print ('deprecated')
context = {}
source = "def args_to_dict(**kwargs): return kwargs \n"
source+= "%s = _F = args_to_dict \n"%macro
This function loads the text from the specified JdC file. A JdC
file is the persistence file of Eficas (*.comm).
"""
+ print ('deprecated')
fcomm=open(filename,'r')
jdc = ""
for line in fcomm.readlines():
if not (line[0]=='#'):
- jdc+="%s"%line
+ jdc+="%s"%line
# Warning, we have to make sure that the jdc comes as a simple
# string without any extra spaces/newlines
return jdc.strip()
-def lanceEficas_Web(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en',multi=False,versionCode=None):
- from Editeur import session
- options=session.parse(sys.argv)
- if version!=None and options.cata == None : options.cata=version
- if fichier==None and options.comm != [] : fichier=options.comm[0]
- if code == None : code=options.code
-
- from .qtEficasSsIhm import AppliSsIhm
- Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode)
-
- from .ssIhm import QWParentSSIhm
- parent=QWParentSSIhm(code,Eficas,version)
-
- from . import readercata
- if not hasattr ( Eficas, 'readercata'):
- monreadercata = readercata.ReaderCata( parent, Eficas )
- Eficas.readercata=monreadercata
-
- from .editor import JDCEditor
- monEditeur=JDCEditor(Eficas,fichier)
- return monEditeur
-
-
if __name__ == "__main__":
import sys
sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
- lanceEficas(code=None,fichier=None,ssCode=None,multi=True)
-
-
+ lanceEficas(code=None,multi=True)
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+
from __future__ import absolute_import
from __future__ import print_function
try :
- from builtins import str
+ from builtins import str
except : pass
import os, sys
-import six
from Extensions.eficas_exception import EficasException
from Extensions import param2
from .getVersion import getEficasVersion
from .viewManagerSsIhm import MyViewManagerSsIhm
+from Editeur import session
+
class AppliSsIhm:
"""
Class implementing the main user interface.
"""
- def __init__(self,code=None,salome=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=True,versionCode=None):
+ def __init__(self,code=None,salome=1,parent=None,multi=False,langue='fr',ssIhm=True,labelCode=None,genereXSD=False,fichierCata=None):
"""
Constructor
"""
version=getEficasVersion()
self.VERSION_EFICAS="Eficas QT5 Salome " + version
- self.versionCode=versionCode
+ self.labelCode=labelCode
self.salome=salome
self.ssIhm=True
self.code=code
+ self.genereXSD=genereXSD
self.dict_reels={}
self.fichierIn=None
self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
+ if fichierCata== None: self.fichierCata=session.d_env.fichierCata
+ else : self.fichierCata=fichierCata
+ if session.d_env.labelCode : self.labelCode=session.d_env.labelCode
+ self.withXSD=session.d_env.withXSD
+
if self.salome:
- import Accas
- try :
- import eficasSalome
- Accas.SalomeEntry = eficasSalome.SalomeEntry
- except :
- print ('eficas hors salome')
+ import Accas
+ try :
+ import eficasSalome
+ Accas.SalomeEntry = eficasSalome.SalomeEntry
+ except :
+ print ('eficas hors salome')
self.multi=multi
- if self.multi :
- print ('pas de multi sans ihm')
+ if self.multi :
+ print ('pas de multi sans ihm')
if langue=='fr': self.langue=langue
else : self.langue="ang"
if self.multi == False :
- self.definitCode(code,ssCode)
- if code==None: return
+ self.definitCode(code,None)
+ if code==None: return
self.suiteTelemac=False
self.viewmanager=MyViewManagerSsIhm(self)
self.ssCode=ssCode
if self.code == None:return # pour le cancel de la fenetre choix code
- name='prefs_'+self.code
- prefsCode=__import__(name)
+ try :
+ name='prefs_'+self.code
+ prefsCode=__import__(name)
+ self.repIni=prefsCode.repIni
+ except :
+ self.repIni=os.path.dirname(os.path.abspath(__file__))
+
- self.repIni=prefsCode.repIni
if ssCode != None :
- self.format_fichier= ssCode #par defaut
- prefsCode.NAME_SCHEME=ssCode
+ self.formatFichierOut = ssCode #par defaut
+ prefsCode.NAME_SCHEME = ssCode
else :
- self.format_fichier="python" #par defaut
+ self.formatFichierIn = "python" #par defaut
+ self.formatFichierOut = "python" #par defaut
nameConf='configuration_'+self.code
- configuration=__import__(nameConf)
- self.maConfiguration = configuration.make_config(self,prefsCode.repIni)
+ try :
+ configuration=__import__(nameConf)
+ self.maConfiguration = configuration.make_config(self,self.repIni)
+ except :
+ from .configuration import makeConfig
+ #self.maConfiguration = configuration.makeConfig(self,prefsCode.repIni)
+ self.maConfiguration = makeConfig(self,self.repIni)
if hasattr (self,'maConfiguration') and self.maConfiguration.translatorFichier :
- from Extensions import localisation
- localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
+ from Extensions import localisation
+ localisation.localise(None,self.langue,translatorFichier=self.maConfiguration.translatorFichier)
+ if self.withXSD : self.maConfiguration.withXSD=True
def getSource(self,file):
def initEditor(self,fichier = None,jdc = None, units = None,include=0):
- if self.editor != None :
- print ('un seul editeur par appli')
- sys.Exit()
- self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
-
+ if (hasattr(self, 'editor')) and self.editor != None :
+ print ('un seul editeur par application')
+ sys.exit()
+ self.editor = self.viewmanager.getNewEditorNormal()
+
+ def initEditorNormal(self,fichier = None,jdc = None, units = None,include=0):
+ if (hasattr(self, 'editor')) and self.editor != None :
+ print ('un seul editeur par application')
+ sys.Exit()
+ #self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include)
+ self.editor = self.viewmanager.getNewEditorNormal()
+
def fileNew(self):
- self.editor=initEditor(self)
+ self.editor=self.initEditor()
def getEditor(self):
+ if (hasattr(self, 'editor')) and self.editor != None : return self.editor
+ self.initEditor()
return self.editor
def fileOpen(self,fichier):
- fichierIn = os.path.abspath(six.text_type(fichier))
+ fichierIn = os.path.abspath(fichier)
try:
monEditor=self.viewmanager.handleOpen(fichierIn)
except EficasException as exc:
ok = editor.saveFileAs()
print ('ok ',ok)
- def dumpXsd(self):
- current_cata = CONTEXT.getCurrentCata()
- current_cata.dumpXsd()
- if self.maConfiguration.afficheIhm==False : exit()
+ def dumpXsd(self, avecEltAbstrait = False):
+ currentCata = CONTEXT.getCurrentCata()
+ texteXSD = currentCata.dumpXsd( avecEltAbstrait)
+ return texteXSD
+ #if self.maConfiguration.afficheIhm==False : exit()
+ #else : return texteXSD
+
#,self.fileSaveAs
#,self.fileClose
#,self.jdcRegles
#,self.jdcFichierSource
#,self.visuJdcPy
-
+
if __name__=='__main__':
# Modules Eficas
- monEficas= AppliSsIhm(code='Adao',salome=0,versionCode='V83')
+ monEficas= AppliSsIhm(code='Adao',salome=0,labelCode='V83')
from __future__ import absolute_import
try :
- from builtins import str
- from builtins import object
+ from builtins import str
+ from builtins import object
except : pass
import os
from Extensions.i18n import tr
-import six
-from PyQt5.QtWidgets import QFileDialog, QMessageBox
-from PyQt5.QtCore import QFileInfo
# --------------------------------
class JdcSsIhmHandler(object):
# --------------------------------
# retourne a l utilisateur
- def __init__(self,viewManager):
+ def __init__(self,viewManager):
# --------------------------------------
- self.viewManagerSsIhm=viewManager
+ self.viewManagerSsIhm=viewManager
- def viewJdcPy(self) :
+ def viewJdcPy(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcPy(self)
+ self.viewManagerSsIhm.handleViewJdcPy(self)
- def viewJdcSource(self) :
+ def viewJdcSource(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcSource(self)
+ self.viewManagerSsIhm.handleViewJdcSource(self)
- def getFileName(self):
+ def getFileName(self):
# ---------------------
- self.viewManagerSsIhm.getFileName(self)
+ self.viewManagerSsIhm.getFileName(self)
- def viewJdcRapport(self) :
+ def viewJdcRapport(self) :
# ---------------------
- self.viewManagerSsIhm.handleViewJdcRapport(self)
+ self.viewManagerSsIhm.handleViewJdcRapport(self)
- def getJdcRapport(self) :
+ def getJdcRapport(self) :
# ---------------------
- return self.viewManagerSsIhm.handleGetJdcRapport(self)
+ return self.viewManagerSsIhm.handleGetJdcRapport(self)
- def getDicoPython(self) :
+ def getDicoPython(self) :
# -------------------------
- return self.viewManagerSsIhm.generDico(self)
+ return self.viewManagerSsIhm.generDico(self)
- def isJdcValid(self) :
+ def isJdcValid(self) :
# -------------------------
- return self.viewManagerSsIhm.isJdcValid(self)
+ return self.viewManagerSsIhm.isJdcValid(self)
- def fileSaveAs(self,fileName):
+ def fileSaveAs(self,fileName):
# -------------------------
- return self.viewManagerSsIhm.fileSaveAs(self,fileName)
+ return self.viewManagerSsIhm.fileSaveAs(self,fileName)
- def fileLegerSaveAs(self,fileName):
+ def fileLegerSaveAs(self,fileName):
# -----------------------------------
- return self.viewManagerSsIhm.fileLegerSaveAs(self,fileName)
+ return self.viewManagerSsIhm.fileLegerSaveAs(self,fileName)
#--------------------------------
# Symetrique de ViewManager mais pas d heritage entre les 2
# dans le viewManager pas de souci pour savoir qui est le jdc sur lequel on travaille
-# ici en revanche.... c est moins sur
+# ici en revanche.... c est moins sur . voir avec le fichier
# --------------------------------
- def __init__(self,appliEficas):
+ def __init__(self,appliEficas):
# --------------------------------
- self.appliEficas=appliEficas
- self.tabWidgets = []
- self.mesIndexes = {}
- self.dictEditors={}
- self.untitledCount = 0
- self.doubles = {}
+ self.appliEficas=appliEficas
+ self.tabWidgets = []
+ self.mesIndexes = {}
+ self.dictEditors={}
+ self.untitledCount = 0
+ self.doubles = {}
# ------------------------------------------------------
- def handleOpen(self,fichier=None, units=None):
+ def handleOpen(self,fichier=None, units=None):
# ------------------------------------------------------
- result = None
- if fichier is None:
- print ('nom de fichier obligatoire')
- return None
+ result = None
+ if fichier is None:
+ print ('nom de fichier obligatoire')
+ return None
- for handler in self.dictEditors :
- editor=self.dictEditors[handler]
- if self.samePath(fichier, editor.getFileName()):
- print ('fichier deja ouvert . pas de nouvel editor')
- return handler
+ for handler in self.dictEditors :
+ editor=self.dictEditors[handler]
+ if self.samePath(fichier, editor.getFileName()):
+ print ('fichier deja ouvert . pas de nouvel editor')
+ return handler
- monNewHandler = self.getNewEditor(fichier,units)
- return monNewHandler
+ monNewHandler = self.getNewEditor(fichier,units)
+ return monNewHandler
# ----------------------------------------------------------------------
- def getNewEditor(self,fichier = None,jdc = None, units = None,include=0):
+ def getNewEditor(self,fichier = None,jdc = None, units = None,include=0):
# ----------------------------------------------------------------------
-
- from .editorSsIhm import JDCEditorSsIhm
- editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
-
- if editor.jdc: # le fichier est bien un jdc
- monHandler = JdcSsIhmHandler(self)
- self.dictEditors[monHandler]=editor
- return monHandler
- else:
- print ('impossible de construire le jdc')
- return None
+# il faudrait decider entre e handler ou non
+# le cas d usage n est pas tout a fait identique :
+# avec handler pour les utilisateurs avance
+# sans pour les utilisateurs encore plus ancvances et les tests
+
+ from .editorSsIhm import JDCEditorSsIhm
+ editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
+
+ if editor.jdc: # le fichier est bien un jdc
+ monHandler = JdcSsIhmHandler(self)
+ self.dictEditors[monHandler]=editor
+ return monHandler
+ else:
+ print ('impossible de construire le jdc')
+ return None
+
+# --------------------------------------------------------------------------------
+ def getNewEditorNormal(self,fichier = None,jdc = None, units = None,include=0):
+# --------------------------------------------------------------------------------
+
+ from .editorSsIhm import JDCEditorSsIhm
+ editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include)
+ self.editor=editor
+ return editor
# -----------------------------
- def samePath(self,f1, f2):
+ def samePath(self,f1, f2):
# ------------------------------
- """
- compare two paths.
- """
- if f1 is None or f2 is None: return 0
- if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
- return 0
+ """
+ compare two paths.
+ """
+ if f1 is None or f2 is None: return 0
+ if os.path.normcase(os.path.normpath(f1)) == os.path.normcase(os.path.normpath(f2)) : return 1
+ return 0
# ---------------------------------
- def handleViewJdcPy(self,handler):
+ def handleViewJdcPy(self,handler):
# ---------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcPy()
# ---------------------------------
- def getFileName(self,handler):
+ def getFileName(self,handler):
# ---------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].getFileName()
# ---------------------------------------------
- def handleViewJdcSource(self,handler):
+ def handleViewJdcSource(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcSource()
# ---------------------------------------------
- def handleViewJdcRapport(self,handler):
+ def handleViewJdcRapport(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcRapport()
# ---------------------------------------------
- def handleGetJdcRapport(self,handler):
+ def handleGetJdcRapport(self,handler):
# ---------------------------------------------
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].getJdcRapport()
# ---------------------------------------------
- def handleViewJdcRapport(self,handler):
+ def handleViewJdcRapport(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].viewJdcRapport()
# ---------------------------------------------
- def generDico(self,handler):
+ def generDico(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].generDico()
# ---------------------------------------------
- def isJdcValid(self,handler):
+ def isJdcValid(self,handler):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].jdc.isValid()
# ---------------------------------------------
- def fileSaveAs(self,handler,fileName):
+ def fileSaveAs(self,handler,fileName):
# ---------------------------------------------
print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
return self.dictEditors[handler].saveFile(fileName)
# ---------------------------------------------
- def fileLegerSaveAs(self, handler,fileName):
+ def fileLegerSaveAs(self, handler,fileName):
# ---------------------------------------------
# print (handler)
if not (handler in self.dictEditors) :
- print ('editor non trouve')
- return
+ print ('editor non trouve')
+ return
self.dictEditors[handler].saveFileLegerAs(fileName)
-
-
-# def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')):
-# if doitSauverRecent : self.appliEficas.sauveRecents()
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# res=self.checkDirty(self.dict_editors[index],texte)
-# if res == 2 : return 2 # l utilisateur a annule
-# index=self.myQtab.currentIndex()
-# idx=index
-# while idx < len(self.dict_editors) -1 :
-# self.dict_editors[idx]=self.dict_editors[idx+1]
-# idx = idx + 1
-# del self.dict_editors[len (self.dict_editors) -1]
-# try :
-# del self.doubles[self.dict_editors[index]]
-# except :
-# pass
-# self.myQtab.removeTab(index)
-# return res
-#
-
-#
-# def handleCloseAll(self,texte=tr('Quitter')):
-# res=0
-# self.appliEficas.sauveRecents()
-# while len(self.dict_editors) > 0 :
-# self.myQtab.setCurrentIndex(0)
-# res=self.handleClose(0,texte)
-# if res==2 : return res # l utilsateur a annule
-# return res
-#
-#
-#
-# def newEditor(self,include=0):
-# if self.appliEficas.demande==True :
-# self.appliEficas.definitCode(None,None)
-# if self.appliEficas.code == None:return
-# maPage=self.getEditor(include=include)
-#
-
-#
-# def handleViewJdcRegles(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# self.dict_editors[index].viewJdcRegles()
-#
-# def handleGestionParam(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 :
-# QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees"))
-# return
-# self.dict_editors[index].gestionParam()
-#
-#
-#
-# def saveCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# if editor in self.doubles :
-# QMessageBox.warning(
-# None,
-# tr("Fichier Duplique"),
-# tr("Le fichier ne sera pas sauvegarde."),)
-# return
-# ok, newName = editor.saveFile()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# return ok
-#
-# def saveLegerCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# ok, newName = editor.saveFileLeger()
-# return ok
-#
-# def sauveLigneCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# if editor in self.doubles :
-# QMessageBox.warning(
-# None,
-# tr("Fichier Duplique"),
-# tr("Le fichier ne sera pas sauvegarde."),)
-# return
-# ok, newName = editor.sauveLigneFile()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# return ok
-#
-#
-# def saveAsCurrentEditor(self):
-# index=self.myQtab.currentIndex()
-# editor=self.dict_editors[index]
-# oldName=editor.fichier
-# ok,newName = editor.saveFileAs()
-# if ok :
-# fileName=os.path.basename(six.text_type(newName))
-# self.myQtab.setTabText(index,fileName)
-# if editor in self.doubles :
-# if oldName != newName :
-# del self.doubles[editor]
-# return ok
-#
-# def displayJDC(self,jdc,fn=None):
-# """
-# Public slot to display a file in an editor.
-# @param fn name of file to be opened
-# # insert filename into list of recently opened files
-# """
-# titre=None
-# if fn != None : titre=fn.split("/")[-1]
-# editor = self.getEditor(fichier= fn, jdc = jdc ,include=1)
-# self.appliEficas.addToRecentList(editor.getFileName())
-#
-
-##PNPNPNPN --> a affiner
-# if fichier is None:
-# self.untitledCount += 1
-# self.myQtab.addTab(win, tr("Fichier non encore nomme ", self.untitledCount))
-# #self.myQtab.addTab(win, str(self.appliEficas.code))
-# else:
-# liste=fichier.split('/')
-# txt = liste[-1]
-# if not QFileInfo(fichier).isWritable():
-# txt = '%s (ro)' % txt
-# self.myQtab.addTab(win,txt )
-# self.myQtab.setCurrentWidget(win)
-# self.currentEditor=win
-# win.setFocus()
-#
-# def getOpenStartDir(self) :
-# #PN --> Les Preferences
-# try :
-# userDir=os.path.expanduser("~/Eficas_install/")
-# return userDir
-# except :
-# return ""
-#
-#
-# def checkDirty(self, editor,texte):
-# """
-# Private method to check dirty status and open a message window.
-#
-# @param editor editor window to check
-# @return flag indicating successful reset of the dirty flag (boolean)
-# """
-# res=1
-# if (editor.modified) and (editor in self.doubles) :
-# msgBox = QMessageBox(None)
-# msgBox.setWindowTitle(tr("Fichier Duplique"))
-# msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
-# msgBox.addButton(texte,0)
-# msgBox.addButton(tr("&Annuler"),1)
-# res=msgBox.exec_()
-# if res == 0 : return 1
-# return 2
-# if editor.modified:
-# fn = editor.getFileName()
-# if fn is None: fn = tr('Noname')
-# msgBox = QMessageBox(None)
-# msgBox.setWindowTitle(tr("Fichier Modifie"))
-# msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
-# msgBox.addButton(tr("&Sauvegarder"),1)
-# msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
-# msgBox.addButton(tr("&Annuler"),2)
-# res=msgBox.exec_()
-# if res == 2 : return res
-# if res == 0:
-# (ok, newName) = editor.saveFile()
-# if ok:
-# fileName=os.path.basename(six.text_type(newName))
-# index=self.myQtab.currentIndex()
-# self.myQtab.setTabText(index,fileName)
-# return ok
-# return res
-#
-# def handleAjoutGroup(self,listeGroup):
-# index=self.myQtab.currentIndex()
-# if index < 0 : return
-# editor=self.dict_editors[index]
-# editor.handleAjoutGroup(listeGroup)
--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
+import types,sys,os, re
+import subprocess
+import traceback
+
+
+import traceback
+
+# Modules Eficas
+
+import convert, generator
+from Editeur import session
+from Editeur import comploader
+from Editeur import Objecttreeitem
+
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
+debug = False
+
+
+
+class JDCEditorSsIhm :
+# ------------------- #
+ """
+ Editeur de jdc
+ """
+
+# ---------------------------------------------
+# Methodes Communes ou appelees depuis avec Ihm
+# ---------------------------------------------
+
+ def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ):
+ #-----------------------------------------------------------------------------------#
+ # paticularisee avec Ihm
+
+ if debug : print ('dans le init de JDCEditorSsIhm')
+ self.appliEficas = appliEficas
+ self.fichier = fichier
+ self.fichierComplet = fichier
+ if fichier != None : self.extensionFichier = os.path.splitext(fichier)[1]
+ else : self.extensionFichier = None
+ self.jdc = jdc
+ self.first = True
+ self.jdc_item = None
+ self.dicoNouveauxMC = {}
+ self.dicoNouveauxFact = {}
+ self.dict_reels = {}
+ self.liste_simp_reel = []
+
+ if self.appliEficas != None : self.salome = self.appliEficas.salome
+ else : self.salome = 0
+
+ # ces attributs sont mis a jour par definitCode appelee par newEditor
+ self.code = self.appliEficas.maConfiguration.code
+ self.maConfiguration = self.appliEficas.maConfiguration
+
+
+ if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
+ if self.maConfiguration.typeDeCata == 'XML' :
+ from . import readercataXML as readercata
+ else :
+ from . import readercata
+ self.readercata = readercata.ReaderCata( self, self.appliEficas )
+ self.appliEficas.readercata=self.readercata
+ self.appliEficas.code=self.code
+ else :
+ self.readercata=self.appliEficas.readercata
+ if self.readercata.fichierCata == None : return #Sortie Salome
+ self.titre=self.readercata.titre
+
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
+
+ #if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
+ self.dict_reels={}
+ self.liste_simp_reel=[]
+ self.dicoNouveauxMC={}
+ self.dicoNouveauxFact={}
+
+
+ try:
+ self.maConfiguration.generator_module
+ _module = __import__(self.maConfiguration.generator_module)
+ info = _module.entryPoint()
+ generator.plugins.addEntryPoint(info)
+ except:
+ pass
+
+ try:
+ self.maConfiguration.convert_module
+ #print self.maConfiguration.convert_module
+ _module = __import__(self.maConfiguration.convert_module)
+ info = _module.entryPoint()
+ convert.plugins.addEntryPoint(info)
+ except :
+ pass
+
+ self.maConfiguration.mesGenerators = generator
+ self.maConfiguration.mesconvertisseurs = convert
+ try : self.XMLgenerator=generator.plugins['xml']()
+ except : self.XMLgenerator=None
+
+
+ if self.formatFichierOut in generator.plugins.keys():
+ self.generator = generator.plugins[self.formatFichierOut]()
+
+
+ self.fileInfo = None
+ self.lastModified = 0
+
+ self.modified = False
+ self.isReadOnly = False
+
+ #------- construction du jdc --------------
+
+
+ self.nouveau=0
+ if self.fichier is not None: # fichier jdc fourni
+ if jdc==None :
+ #print ('PNPN : chgt try en if')
+ try :
+ #if 1 :
+ self.jdc = self.readFile(self.fichier)
+ except :
+ print ("mauvaise lecture du fichier")
+ if self.salome :
+ try : self.appliEficas.addJdcInSalome( self.fichier)
+ except : print ("mauvais enregistrement dans Salome")
+ else :
+ self.jdc=jdc
+
+ if self.jdc is not None and units is not None:
+ self.jdc.recorded_units=units
+ self.jdc.old_recorded_units=units
+
+ else:
+ if not self.jdc: # nouveau jdc
+ if not include : self.jdc = self._newJDC(units=units)
+ else : self.jdc = self._newJDCInclude(units=units)
+ self.nouveau=1
+
+ if self.jdc:
+ self.jdc.editor = self
+ self.jdc.lang = self.appliEficas.langue
+ self.jdc.aReafficher=False
+ txt_exception = None
+ if not jdc:
+ if self.extensionFichier == '.xml' :
+ if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
+ else : print ('run MDM with -x option (MDM for XML)'); exit()
+ else : self.jdc.analyse()
+ txt_exception = self.jdc.cr.getMessException()
+ if txt_exception :
+ self.jdc = None
+ self.informe('pb chargement jdc',txt_exception)
+ #else:
+ #comploader.chargerComposants()
+ #self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
+ #-------------------------------#
+ def readFile(self, fn):
+ #--------------------------------#
+ """
+ Public slot to read the text from a file.
+ @param fn filename to read from (string or QString)
+ """
+
+ # charge un JDC
+ # paticularisee avec Ihm
+
+ fn = str(fn)
+ jdcName=os.path.basename(fn)
+
+ # Il faut convertir le contenu du fichier en fonction du format
+ formatIn=self.appliEficas.formatFichierIn
+ if self.extensionFichier == '.xml' and self.appliEficas.maConfiguration.withXSD: formatIn='xml'
+ if formatIn in convert.plugins:
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[formatIn]()
+ p.readfile(fn)
+
+ if p.text=="" : self.nouveau=1
+ #print ('PNPN --> CIST a faire')
+
+ if formatIn != 'xml':
+ pareil,texteNew=self.verifieChecksum(p.text)
+ if not pareil : self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
+ p.text=texteNew
+ memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
+ if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
+ p.text=texteNew
+ text=p.convert('exec',self.appliEficas)
+ if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ else:
+ text=p.text
+ else :
+ self.afficheInfos("Type de fichier non reconnu",'red')
+ self.informe( "Type de fichier non reconnu",
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+ return None
+
+ CONTEXT.unsetCurrentStep()
+
+ #jdc=self.readercata.cata[0].JdC(procedure=text,
+ jdc=self.readercata.cata.JdC(procedure=text,
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ nom=jdcName,
+ rep_mat=self.maConfiguration.rep_mat
+ )
+ self.modified = False
+ return jdc
+
+
+ #--------------------------------#
+ def _newJDC( self ,units = None):
+ #--------------------------------#
+ """
+ Initialise un nouveau JDC vierge
+ """
+ self.modified=1
+ CONTEXT.unsetCurrentStep()
+
+ texte=""
+ if self.code == "CARMELCND" : texte=self._newJDCCND()
+ if self.code == "ZCRACKS" : texte=self._newZCRACKS()
+ if self.code == "PSEN" : texte = self._newPSEN()
+ if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
+
+ if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
+
+
+ jdc=self.readercata.cata.JdC( procedure =texte,
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ rep_mat=self.maConfiguration.rep_mat
+ )
+
+ jdc.lang = self.appliEficas.langue
+ if units is not None:
+ jdc.recorded_units=units
+ jdc.old_recorded_units=units
+ # chgt le 15/10/19
+ # Attention positionne contexte ?
+ # est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
+ jdc.editor=self
+ return jdc
+
+ #--------------------------------#
+ def _newJDCInclude( self ,units = None):
+ #--------------------------------#
+ """
+ Initialise un nouveau JDC vierge
+ """
+ import Extensions.jdc_include
+ JdC_aux=Extensions.jdc_include.JdC_include
+ CONTEXT.unsetCurrentStep()
+
+ #jaux=self.readercata.cata[0].JdC( procedure="",
+ jaux=self.readercata.cata.JdC( procedure="",
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ rep_mat=self.maConfiguration.rep_mat,
+ )
+ jaux.editor=self
+ jaux.analyse()
+
+ J=JdC_aux( procedure="",
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ jdc_pere=jaux,
+ rep_mat=self.maConfiguration.rep_mat,
+ )
+ J.editor=self
+ J.analyse()
+ if units is not None:
+ J.recorded_units=units
+ J.old_recorded_units=units
+ return J
+
+
+
+ #-----------------------#
+ def getSource(self,file):
+ #-----------------------#
+
+ # Il faut convertir le contenu du fichier en fonction du format
+ if self.formatFichierIn in convert.plugins :
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[self.formatFichierIn]()
+ p.readfile(file)
+ text=p.convert('execnoparseur')
+ if not p.cr.estvide():
+ self.afficheInfos("Erreur a la conversion",'red')
+ return text
+ else:
+ # Il n'existe pas c'est une erreur
+ self.afficheInfos("Type de fichier non reconnu",'red')
+ self.informe( "Type de fichier non reconnu",
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+ return None
+
+ #----------------------------------------------#
+ def __generateTempFilename(self, prefix, suffix):
+ #----------------------------------------------#
+ import tempfile
+ (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
+ os.close(fd)
+ return filename
+
+ #-----------------------#
+ def generDico(self):
+ #-----------------------#
+ if 'dico' in generator.plugins:
+ self.generator=generator.plugins['dico']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ #print (jdc_formate)
+ dico=self.generator.Dico
+ #print (dico)
+ return dico
+
+ #-----------------------#
+ def viewJdcSource(self):
+ #-----------------------#
+ if self.fichier == None : return
+ if os.path.isfile(self.fichier):
+ f=open(self.fichier,'r')
+ texteSource=f.read()
+ f.close()
+ self._viewText(texteSource, "JDC_SOURCE")
+ else :
+ self._viewText("file doesn't exist", "JDC_SOURCE")
+
+
+ #-----------------------#
+ def viewJdcPy(self):
+ #-----------------------#
+ strSource = str( self.getTextJDC(self.formatFichierOut) )
+ self._viewText(strSource, "JDC_RESULTAT")
+
+ #-----------------------#
+ def viewJdcRapport(self):
+ #-----------------------#
+ # on ajoute les regles
+ strRapport = str( self.jdc.report() )
+ self._viewText(strRapport, "JDC_RAPPORT")
+
+ #-----------------------#
+ def viewJdcRegles(self):
+ #-----------------------#
+ # on ajoute les regles
+ texte_global, test_global = self.jdc.verifRegles()
+ self._viewText(texte_global, "JDC_REGLES")
+
+ #-----------------------#
+ def getJdcRapport(self):
+ #-----------------------#
+ # on ajoute les regles
+ strRapport = str( self.jdc.report() )
+ return strRapport
+
+ #---------------------#
+ def getFileName(self):
+ #---------------------#
+ return self.fichier
+
+ #-------------------#
+ def initModif(self):
+ #-------------------#
+ """
+ Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+ si un JDC doit etre sauvegarde avant destruction ou non
+ """
+ self.modified = True
+
+
+ #--------------------------------------------------#
+ def writeFile(self, fn, txt = None,formatLigne="beautifie"):
+ #--------------------------------------------------#
+ """
+ Public slot to write the text to a file.
+
+ @param fn filename to write to string
+ @return flag indicating success
+ """
+
+ fn = str(fn)
+
+ if txt == None :
+ txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
+ eol = '\n'
+ if len(txt) >= len(eol):
+ if txt[-len(eol):] != eol:
+ txt += eol
+ else:
+ txt += eol
+ txt=self.ajoutVersionCataDsJDC(txt)
+ if self.code != 'PSEN' and self.code != 'PSEN_N1' : checksum=self.getChecksum(txt)
+ else : checksum=''
+ txt=txt+checksum
+ if self.code=="TELEMAC" : return 1
+ try:
+ f = open(fn, 'w')
+ f.write(txt)
+ f.close()
+ return 1
+ except IOError as why:
+ print('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' , str(why))
+ self.afficheInfos('Le fichier'+str(fn) + 'n a pas pu etre sauvegarde ' , 'red')
+ return 0
+
+
+ #-----------------------------------------------------------#
+ def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"):
+ #-----------------------------------------------------------#
+ if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+ if format == None : format = self.formatFichierOut
+ if format in generator.plugins:
+
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ try :
+ jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+ if pourRun : jdc_formate=self.generator.textePourRun
+ if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+ except ValueError as e:
+ self.informe( "Erreur a la generation",str(e),'red')
+ return
+
+ if not self.generator.cr.estvide():
+ self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ return ""
+ else:
+ return jdc_formate
+ else:
+ # Il n'existe pas c'est une erreur
+ self.informe("Format inconnu", self.format + " non reconnu" )
+ return ""
+
+ #------------------------------#
+ def verifieChecksum(self,text):
+ #------------------------------#
+ # Attention : souci sous Windows
+ #
+ indexDeb=text.find("#CHECKSUM:")
+ if indexDeb < 0 : return 1, text
+ indexFin=text.find(":FIN CHECKSUM")
+ checkAvant=text[indexDeb:indexFin+13]
+ textJDC=text[0:indexDeb]+text[indexFin+13:-1]
+ if self.code != 'PSEN' and self.code != 'PSEN_N1':
+ checksum=self.getChecksum(textJDC)
+ pareil=(checkAvant==checksum)
+ else :
+ pareil=1
+ return pareil, textJDC
+
+ #---------------------------#
+ def getChecksum(self,texte):
+ #---------------------------#
+ try :
+ import haslib
+ newtexte=texte.replace('"','\\"')
+ hash_checksum = hashlib.md5()
+ hash_checksum.update(newtexte.encode('utf-8'))
+ checksum = hash_checksum.hexdigest()
+ ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
+ except :
+ try :
+ newtexte=texte.replace('"','\\"')
+ commande='echo "'+newtexte+'"|md5sum'
+ a=os.popen(commande)
+ checksum=a.read()
+ a.close()
+ except :
+ checksum='Fichier trop long \n'
+ ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+ return ligne
+
+ #----------------------#
+ def getDico(self):
+ #---------------------#
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+ return dico
+ else :
+ self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
+ return ""
+
+ #-----------------------------------------#
+ def chercheGroupes(self):
+ #-----------------------------------------#
+ listeMA,listeNO=self.getTextJDC("GroupMA")
+ return listeMA,listeNO
+
+ #-----------------------------------------#
+ def chercheDico(self):
+ #-----------------------------------------#
+ dicoCourant={}
+ format = self.appliEficas.formatFichierOut
+ if format in generator.plugins:
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
+ dicoCourant=self.generator.dico
+ return dicoCourant
+
+ #-----------------------------------------------------------------#
+ def saveFileLegerAs(self, fileName = None) :
+ #-----------------------------------------------------------------#
+ if fileName != None :
+ self.fichier = fileName
+ return self.saveFileLeger(fileName)
+ return self.saveFileLeger()
+
+ #-----------------------------------------------------------------#
+ def saveFileComplet(self, fichier = None, formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
+ fn = fichier
+ self.generator=generator.plugins[self.format]()
+ print (self.generator)
+ if hasattr(self.generator, "writeComplet"):
+ self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+
+
+# ---------------------------------------------
+# Methodes Surchargees par avecIhm
+# ---------------------------------------------
+
+ #--------------------------------#
+ def ajoutCommentaire(self):
+ #--------------------------------#
+ print ('pas programme sans Ihm')
+ print ('prevenir la maintenance du besoin')
+
+
+ #--------------------------------------#
+ def informe(self,titre,txt,critique=True):
+ #--------------------------------------#
+ # methode differenre avec et sans ihm
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ print (titre)
+ print (txt)
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+
+ #--------------------------------------#
+ def afficheInfos(self,txt,couleur=None):
+ #--------------------------------------#
+ # methode differenre avec et sans ihm
+ print (txt)
+
+ #-----------------------------------------------------------------------#
+ def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
+ #--------------------------------------------------------------------#
+ print ('_____________________________')
+ print (txt)
+ print ('_____________________________')
+
+
+ #-----------------------------------------------------------------#
+ def saveFile(self, fichier, formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
+ """
+ Public slot to save the text to a file.
+
+ @param path directory to save the file in (string or QString)
+ @return tuple of two values (boolean, string) giving a success indicator and
+ the name of the saved file
+ """
+
+
+ self.fichierOut = fichier
+ if self.appliEficas.maConfiguration.fichierXML !=None : self.jdc.analyseXML()
+ if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
+ if self.jdc.cata.modeleMetier and self.jdc.isValid():
+ if self.generator != self.XMLgenerator :
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fichier)
+ return(1,self.fichier)
+ if self.jdc.isValid() and hasattr(self.generator, "writeDefault"):
+ self.generator.writeDefault(fichier)
+ elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
+ self.generator.writeDefault(fichier)
+ self.modified = 0
+ return (1, self.fichier)
+#
+
+ #----------------------------------------------#
+ def sauveLigneFile(self):
+ #----------------------------------------------#
+ self.modified=1
+ return self.saveFile(formatLigne="Ligne")
+
+
+ #-----------------------------------#
+ def updateJdc(self, itemApres,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ monItem=itemApres
+ etape=monItem.item.object
+ CONTEXT.setCurrentStep(etape)
+ etape.buildIncludeInclude(texte)
+ self.tree.racine.buildChildren()
+
+ #-----------------------------------#
+ def updateJdcEtape(self, itemApres,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ monItem=itemApres
+ etape=monItem.item.object
+ CONTEXT.set_current_step(etape)
+ try :
+ ok=etape.build_includeEtape(texte)
+ except :
+ ok=0
+ if not ok :
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
+ self.tree.racine.build_children()
+ return ok
+
+
+
+ #-------------------------------------#
+ def deleteEtape(self,etape):
+ #-------------------------------------#
+ # dans le JDC
+ self.jdc.suppentite(etape)
+
+ #-------------------------------------#
+ def deleteMC(self,etape,MCFils,listeAvant=()):
+ #-------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC != None : ouChercher.suppentite(monMC)
+ ouChercher.state='changed'
+ ouChercher.isvalid()
+
+ #--------------------------------------------------------#
+ def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
+ #--------------------------------------------------------#
+ # dans le JDC
+ debug=False
+ if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+ ouChercher=etape
+ if debug : print (ouChercher)
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC == None : monMC = ouChercher.addEntite(MCFils)
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isvalid()
+ return 1
+
+ #--------------------------------------------------------#
+ def ajoutMCinMCFactUnique(self,etape,MCFils,valeurs,listeAvant=()):
+ # Attention si +sieursMCFACT
+ #--------------------------------------------------------#
+ # dans le JDC
+ debug=False
+ if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+ ouChercher=etape
+ if debug : print (ouChercher)
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ # Attention si +sieursMCFACT
+ ouChercher=ouChercher[0]
+ if debug : print (ouChercher)
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC == None : monMC = ouChercher.addEntite(MCFils)
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isValid()
+ return 1
+
+ #----------------------------------------------#
+ def ajoutMCFact(self,etape,MCFils,listeAvant=()):
+ #----------------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=etape.getChild(ouChercher,restreint="oui")
+ if monMC== None : monMC= ouChercher.addEntite(MCFils)
+ monMC.isvalid()
+
+ #-----------------------------------------------------------------#
+ def setValeurMCSimpInEtape(self,etape,listeAvant,valeur):
+ #-----------------------------------------------------------------#
+ # pour VP
+ monObj=etape
+ for mot in listeAvant :
+ monObj=monObj.getChild(mot,restreint="oui")
+ if monObj==None : return False
+ if monObj == None : return False
+ if monObj.valeur != valeur :
+ # PNPN le setValeur fait des bugs --> pourquoi
+ #monObj.setValeur(valeur)
+ monObj.valeur=valeur
+ monObj.isValid()
+ return True
+
+ #-------------------------------------------------#
+ def getValeur(self,nomEtape,MCFils,listeAvant=()):
+ #-------------------------------------------------#
+ # dans le JDC
+
+ debug=0
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+ if debug : print ('etape trouvee', ouChercher)
+ if ouChercher==None : return None
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if debug : print ('monMC', monMC)
+ if monMC== None : return None
+ return monMC.valeur
+
+ #-------------------------------------------------#
+ def getMCDsEtape(self,etape,MCFils,listeAvant=()):
+ #-------------------------------------------------#
+ # dans le JDC
+
+ if etape==None : return None
+ ouChercher=etape
+ debug=0
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if debug : print ('monMC', monMC)
+ return monMC
+
+ #-----------------------------------------------------------#
+ def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()):
+ #--------------------------------------------------------#
+ # dans le JDC
+
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+ if ouChercher==None : return None
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ #print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ monMC.set_valeur(valeur)
+ monMC.isvalid()
+
+ #-----------------------------------------------------------#
+ def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
+ #-----------------------------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ if isinstance (etape, str):
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == etape : ouChercher=e; break
+ if ouChercher==None : return
+
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC== None : monMC= ouChercher.addEntite(MCFils)
+
+ monMC.definition.into=valeurs
+ from Noyau.N_VALIDATOR import IntoProtocol
+ monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max)
+ monMC.state='changed'
+ monMC.isvalid()
+
+ #-------------------------------------------------------------------#
+ def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()):
+ #-------------------------------------------------------------------#
+ # dans le JDC
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+
+ for mot in listeAvant :
+ try :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ # Le mot clef n est pas la
+ except : return 0
+ try :
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ # Le mot clef n est pas la
+ except : return 0
+ if monMC == None : return 0
+
+ if hasattr(monMC.definition,'into') :
+ if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+ else : maListeDeValeur=monMC.definition.into
+ else :
+ return 0
+
+ monMC.state='changed'
+ return 1
+
+ def dumpXsd(self, avecEltAbstrait = False):
+ #-----------------------------------------#
+ texteXSD = self.readercata.cata.JdC.dumpXsd(avecEltAbstrait)
+ return texteXSD
+
+ def dumpStructure(self):
+ #----------------------------#
+ texteStructure = self.readercata.cata.JdC.dumpStructure()
+ return texteStructure
+
+ #-------------------------------------#
+ def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
+ #-------------------------------------#
+ # dans le MDD
+
+ #if isinstance (etape, str):
+ # for e in self.jdc.etapes:
+ # if e.nom == etape : etape=e; break
+ #if etape == None : return
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ ouChercher=definitionEtape
+ if len(listeMC) > 1 :
+
+ for mc in listeMC[0:-1]:
+ mcfact=ouChercher.entites[mc]
+ ouChercher=mcfact
+
+ mcAccas=ouChercher.entites[listeMC[-1]]
+ mcAccas.defaut=valeurs
+ return 1
+
+ #------------------------------------------------#
+ def changeIntoDefMC(self,etape,listeMC,valeurs):
+ #------------------------------------------------#
+ # dans le MDD
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ #definitionEtape=getattr(self.jdc.cata,nomEtape)
+ print ( 'changeIntoDefMC ',etape,listeMC,valeurs)
+ ouChercher=getattr(self.jdc.cata,etape.nom)
+
+ #if len(listeMC) > 1 :
+ # for mc in listeMC[0:-1]:
+ # mcfact=ouChercher.entites[mc]
+ # ouChercher=mcfact
+ #mcAccas=ouChercher.entites[listeMC[-1]]
+
+ for mc in listeMC :
+ mcAccas=ouChercher.entites[mc]
+ ouChercher=mcAccas
+ if ouChercher == None : return 0
+
+ if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
+ else : oldValeurs=None
+
+ if oldValeurs==valeurs : return 1
+ mcAccas.into=valeurs
+ from Noyau.N_VALIDATOR import IntoProtocol
+ mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max)
+ return 1
+
+ #-------------------------------------------------------------#
+ def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
+ #-------------------------------------------------------------#
+ # dans le MDD
+ #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
+ if isinstance (etape, str):
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
+ if etape == None : return
+ #definitionEtape=getattr(self.jdc.cata[0],etape)
+ definitionEtape=getattr(self.jdc.cata,etape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ MCADetruire=ouChercher.entites[nomDuMC]
+ ouChercher.ordre_mc.remove(nomDuMC)
+ print ('remove de ', nomDuMC)
+ del ouChercher.entites[nomDuMC]
+ del self.dicoNouveauxMC[nomDuMC]
+
+
+ #-------------------------------------------------------------#
+ def ajoutDefinitionMC(self,nomEtape,listeAvant,nomDuMC,typ,**args):
+ #-------------------------------------------------------------#
+ # dans le MDD
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ from Accas import A_SIMP
+ Nouveau=A_SIMP.SIMP(typ,**args)
+ Nouveau.pere=ouChercher
+ Nouveau.nom=nomDuMC
+ #Nouveau.ordre_mc=[]
+ ouChercher.entites[nomDuMC]=Nouveau
+ ouChercher.ordre_mc.append(nomDuMC)
+ #print ('ajout de ', nomDuMC)
+ #traceback.print_stack()
+ # ajout CIST sauvegarde
+ if nomDuMC in self.dicoNouveauxMC : del self.dicoNouveauxMC[nomDuMC]
+ self.dicoNouveauxMC[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,typ,args)
+ #print self.dicoNouveauxMC
+
+ #---------------------------------------------------------------------#
+ def ajoutDefinitionMCFact(self,nomEtape,listeAvant,nomDuMC,listeMC,**args):
+ #---------------------------------------------------------------------#
+ # dans le MDD
+ print ('ajoutDefinitionMCFact', nomDuMC)
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ from Accas import A_SIMP
+ for mc in listeMC :
+ nomMC=mc[0]
+ typMC=mc[1]
+ argsMC=mc[2]
+ nouveauMC=A_SIMP.SIMP(typMC,**argsMC)
+ nouveauMC.nom=nomMC
+ args[nomMC]=nouveauMC
+ from Accas import A_FACT
+ nouveauFact=A_FACT.FACT(**args)
+ nouveauFact.pere=ouChercher
+ nouveauFact.nom=nomDuMC
+ from Editeur.autre_analyse_cata import traite_entite
+ traite_entite(nouveauFact,[])
+ ouChercher.entites[nomDuMC]=nouveauFact
+ ouChercher.ordre_mc.append(nomDuMC)
+ self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args)
+ #print self.dicoNouveauxMC
+
+ #----------------------------------------------------#
+
+ #----------------------------------------------------#
+ def changeIntoMCandSet(self,etape,listeMC,into,valeurs):
+ #----------------------------------------------------#
+ # dans le MDD et le JDC
+
+ self.changeIntoDefMC(etape,listeMC,into)
+
+ if isinstance (etape, str):
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
+ if etape == None : return
+
+ ouChercher = etape
+ for mot in listeMC[:-1] :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
+ MCFils=listeMC[-1]
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC== None : monMC= etape.addEntite(MCFils)
+
+ monMC.definition.into=into
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isvalid()
+
+ #-------------------------------------#
+ def ajoutVersionCataDsJDC(self,txt):
+ #-------------------------------------#
+ #if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt
+ if not hasattr(self.readercata.cata,'VERSION_CATALOGUE'): return txt
+ ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata.VERSION_CATALOGUE+":FIN VERSION_CATALOGUE\n"
+ texte=txt+ligneVersion
+ return texte
+
+ #-------------------------------------#
+ def verifieVersionCataDuJDC(self,text):
+ #-------------------------------------#
+ memeVersion=False
+ indexDeb=text.find("#VERSION_CATALOGUE:")
+ indexFin=text.find(":FIN VERSION_CATALOGUE")
+ if indexDeb < 0 :
+ self.versionCataDuJDC="sans"
+ textJDC=text
+ else :
+ self.versionCataDuJDC=text[indexDeb+19:indexFin]
+ textJDC=text[0:indexDeb]+text[indexFin+23:-1]
+
+ self.versionCata="sans"
+ if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
+
+ if self.versionCata==self.versionCataDuJDC : memeVersion=True
+ return memeVersion,textJDC
+
+ #-------------------------------#
+ def traduitCatalogue(self,texte):
+ #-------------------------------#
+ nomTraducteur="traduit"+self.readercata.code+self.versionCataDuJDC+"To"+self.versionCata
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../Traducteur")))
+ try :
+ traducteur=__import__(nomTraducteur)
+ monTraducteur=traducteur.MonTraducteur(texte)
+ nouveauTexte=monTraducteur.traduit()
+ return nouveauTexte
+ except :
+ return texte
+
+
+# Methodes a resorber
+# il faut mettre a jour les catalogues avec
+# TEXTE_NEW_JDC
+#
+
+ #---------------------------#
+ def _new_CF(self):
+ #---------------------------#
+ texte="CONDUITE_FORCEE();"
+ return texte
+
+ #---------------------------#
+ def _newPSEN(self):
+ #---------------------------#
+ texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
+ #texte=""
+ return texte
+
+ #---------------------------#
+ def _newPSEN_N1(self):
+ #---------------------------#
+ texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+ #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+ return texte
+
+ #---------------------------#
+ def _newZCRACKS(self):
+ #---------------------------#
+ texte="MAILLAGES();REMESHING();"
+ return texte
+
+
+ #---------------------------#
+ def _newJDCCND(self):
+ #---------------------------#
+ extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
+
+ #if self.salome == 0 :
+ QMessageBox.information( self,
+ tr("Fichier Med"),
+ tr("Veuillez selectionner un fichier Med"))
+ QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
+ caption='Fichier Med',
+ filter=extensions)
+ QSfichier=QSfichier[0]
+ self.fichierMED=QSfichier
+ from acquiertGroupes import getGroupes
+ erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
+ if erreur != "" : print ("a traiter")
+ texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
+ texteSources=""
+ texteCond=""
+ texteNoCond=""
+ texteVcut=""
+ texteZs=""
+ for groupe in self.listeGroupes :
+ if groupe[0:8]=='CURRENT_':
+ texteSources +=groupe[8:]+"=SOURCE("
+ texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
+ if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
+ if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
+ if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
+ if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
+ texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
+ self.newTexteCND=texte
+ self.modified=1
+ return texte
+
+
+if __name__ == "__main__":
+ print ('a faire')