]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
generator dico avec noms des concepts
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Tue, 1 Mar 2022 16:19:19 +0000 (17:19 +0100)
committerEric Fayolle <eric.fayolle@edf.fr>
Fri, 8 Apr 2022 08:44:07 +0000 (10:44 +0200)
generator/generator_dico.py

index 0b3eb71d6939e7dc98450e2ef042492d319a2e67..aa5acc75924d7b0768b519f2981458d2c54389ea 100644 (file)
@@ -63,6 +63,13 @@ class DicoGenerator(PythonGenerator):
         self.text=PythonGenerator.gener(self,obj,format)
         return self.text
 
+    def generDico(self,obj,format='brut',config=None,appliEficas=None):
+
+        self.initDico()
+        # Cette instruction genere le contenu du fichier de commandes (persistance)
+        self.text=PythonGenerator.gener(self,obj,format)
+        return self.dicoComm
+
 
 #----------------------------------------------------------------------------------------
 # initialisations
@@ -70,8 +77,8 @@ class DicoGenerator(PythonGenerator):
 
     def initDico(self) :
 
-        self.Dico={}
-        self.texteDico = ""
+        self.dicoComm={}
+        self.rang=0
 
 
 #----------------------------------------------------------------------------------------
@@ -81,7 +88,7 @@ class DicoGenerator(PythonGenerator):
     def writeDefault(self,fn) :
         fileDico = fn[:fn.rfind(".")] + '.py'
         f = open( str(fileDico), 'w')
-        f.write('Dico = '+str(self.Dico))
+        f.write('dicoComm = '+str(self.dicoComm))
         f.close()
 
 #----------------------------------------------------------------------------------------
@@ -97,20 +104,80 @@ class DicoGenerator(PythonGenerator):
             objTraite=objTraite.parent
             if objTraite.nature == 'JDC' : break
             if objTraite.nature == 'BLOC' : continue
-            if objTraite.nature == 'OPERATEUR' : 
-                if objTraite.sd.nom != None : listeParents.insert(0,objTraite.sd.nom)
-                else : listeParents.insert(0,'SD_non_nommee_erreur')
+            if objTraite.nature == 'OPERATEUR' or objTraite.nature == 'PROCEDURE' : 
+                listeParents.insert(0,objTraite)
             elif objTraite.nature == 'MCList' : 
                 if len(objTraite.data > 1) :
-                   monRang=objTraite.data.index(objTraite)
-                   listeParents.insert(0,objTraite.nom+'_'+str(monRang))
+                    monRang=objTraite.data.index(objTraite)
+                    listeParents.insert(0,objTraite.nom+'_'+str(monRang))
                 else : listeParents.insert(0,objTraite.nom)
             else : listeParents.insert(0,objTraite.nom)
-        courant=self.Dico
-        for p in listeParents:
+        courant=self.dicoComm
+        # On traite l etape pour ajouter le rang et la classe
+        etape=listeParents[0]
+        ordreId=etape.parent.etapes.index(etape)
+        if etape.nature == 'OPERATEUR' : 
+            if not etape.sd.nom in courant.keys() : 
+                courant[etape.sd.nom]={}
+                courant[etape.sd.nom]["@classeAccas"]= etape.nom
+                courant[etape.sd.nom]["@ordreAccas" ]= ordreId
+            courant=courant[etape.sd.nom]
+        else :
+            if not etape.nom in courant.keys() : 
+                courant[etape.nom]={}
+                courant[etape.nom]["@classeAccas"]= etape.nom
+                courant[etape.nom]["@ordreAccas" ]= ordreId
+                courant=courant[etape.nom]
+            else :
+                if not(isinstance(courant[etape.nom], list)) :
+                    laListe=[courant[etape.nom],]
+                    courant[etape.nom]=laListe
+                newDict={}
+                newDict["@classeAccas"]= etape.nom
+                newDict["@ordreAccas" ]= ordreId
+                courant[etape.nom].append(newDict)
+                courant=newDict
+        for p in listeParents[1:]:
             if not (p in courant.keys()) : courant[p]={}
             courant=courant[p]
-        courant[obj.nom]=s
-        self.texteDico+=obj.nom+ "=" + s[0:-1]+ "\n"
+        # on transforme les concepts en nom
+        laValeur=self.transformeObjInRef(obj)
+        courant[obj.nom]=laValeur
         return s
 
+    def transformeObjInRef(self,obj) :
+        # cas d une matrice d ASSD
+        for ssType in obj.definition.type:
+            if hasattr(ssType,'typElt') :
+                if ssType.typElt not in ('R','I','C','TXM') :
+                # on a une matrice d ASSD
+                   listeLigne=[]
+                   for ligne in obj.val:
+                       col=[]
+                       for elt in ligne :
+                           col.append(elt.nom)
+                       listeLigne.append(col)
+                   return listeLigne
+        if obj.nom == 'library_map' : print (type(obj.valeur))
+        waitASSDTuple=0
+        if type(obj.valeur) in (tuple,list) :
+           for ss_type in obj.definition.type:
+                if repr(ss_type).find('Tuple') != -1 :
+                    if hasattr(ssType,'typeDesTuples') :
+                       for t in ssType.typeDesTuples :
+                           if t not in ('R','I','C','TXM') : 
+                              waitASSDTuple=1
+                              break
+                elif ss_type not in ('R','I','C','TXM'):
+                              waitASSDTuple=1
+        if waitASSDTuple :
+           listeRetour=[]
+           for elt in obj.val :
+               if hasattr(elt,'nom') : listeRetour.append(elt.nom)
+               else : listeRetour.append(elt)
+           return listeRetour
+
+        if hasattr(obj.val,'nom') : listeRetour.append(obj.val.nom)
+        return obj.val
+
+