Salome HOME
premiere version
[tools/eficas.git] / Editeur / autre_analyse_cata.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21    Ce module sert a retrouver l'ordre des mots cles d'un catalogue de
22    commandes
23 """
24 if __name__ == "__main__" :
25    import sys
26    sys.path[:0]=[".."]
27    sys.path[:0]=["../Aster"]
28    sys.path[:0]=["../Saturne"]
29
30 from Accas import NUPL
31
32 def traite_entiteNUPL(entite):
33    """
34        Fonction speciale pour les nuplets (classe NUPL)
35        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
36        qui est une liste vide.
37    """
38    entite.ordre_mc=[]
39
40 def traite_entite(entite,liste_simp_reel):
41    """
42        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
43        qui est une liste contenant le nom des sous entites dans l'ordre 
44        de leur apparition dans le catalogue.
45        L'ordre d'apparition dans le catalogue est donné par l'attribut _no
46        de l'entite
47        La fonction active le meme type de traitement pour les sous entites
48        de entite
49    """
50    l=[]
51    for k,v in entite.entites.items():
52       if isinstance(v,NUPL):
53          traite_entiteNUPL(v)
54       else:
55          traite_reel(v,liste_simp_reel)
56          traite_entite(v,liste_simp_reel)
57          traite_cache(v)
58       l.append((v._no,k))
59    l.sort()
60    entite.ordre_mc=[ item for index, item in l ]
61
62 def traite_cache(objet):
63     if not hasattr(objet, "cache"): return
64     if objet.cache == 0 :return
65     clef=objet.nom
66     if objet.equiv != None : clef=objet.equiv
67     if hasattr(objet.pere,"mcOblig"):
68       objet.pere.mcOblig[clef]=objet.defaut
69     else :
70       objet.pere.mcOblig={}
71       objet.pere.mcOblig[clef]=objet.defaut
72
73 def traite_reel(objet,liste_simp_reel):
74     if objet.__class__.__name__ == "SIMP":
75        if ( 'R' in objet.type):
76           if objet.nom not in liste_simp_reel :
77              liste_simp_reel.append(objet.nom)
78
79 def analyse_niveau(cata_ordonne_dico,niveau,liste_simp_reel):
80    """
81        Analyse un niveau dans un catalogue de commandes
82    """
83    if niveau.l_niveaux == ():
84        # Il n'y a pas de sous niveaux
85        for oper in niveau.entites:
86            traite_entite(oper,liste_simp_reel)
87            cata_ordonne_dico[oper.nom]=oper
88    else:
89        for niv in niveau.l_niveaux:
90            analyse_niveau(cata_ordonne_dico,niv)
91   
92 def analyse_catalogue(cata):
93    """
94       Cette fonction analyse le catalogue cata pour construire avec l'aide
95       de traite_entite la structure de données ordre_mc qui donne l'ordre
96       d'apparition des mots clés dans le catalogue
97       Elle retourne un dictionnaire qui contient toutes les commandes
98       du catalogue indexées par leur nom
99    """
100    cata_ordonne_dico={}
101    liste_simp_reel=[]
102    if cata.JdC.l_niveaux == ():
103        # Il n'y a pas de niveaux
104        for oper in cata.JdC.commandes:
105            traite_entite(oper,liste_simp_reel)
106            cata_ordonne_dico[oper.nom]=oper
107    else:
108        for niv in cata.JdC.l_niveaux:
109            analyse_niveau(cata_ordonne_dico,niv,liste_simp_reel)
110    return cata_ordonne_dico,liste_simp_reel
111
112
113 if __name__ == "__main__" :
114    from Cata import cata_STA6
115    dico=analyse_catalogue(cata_STA6)
116    #import cata_saturne
117    #dico=analyse_catalogue(cata_saturne)
118
119    def print_entite(entite,dec='  '):
120        print dec,entite.nom,entite.__class__.__name__
121        for mocle in entite.ordre_mc:
122           print_entite(entite.entites[mocle],dec=dec+'  ')
123
124    for k,v in dico.items():
125       print_entite(v,dec='')
126
127    print dico.keys()