Salome HOME
chgt Copyrigth
[tools/eficas.git] / Editeur / autre_analyse_cata.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   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 from __future__ import absolute_import
25 from __future__ import print_function
26 if __name__ == "__main__" :
27    import sys
28    sys.path[:0]=[".."]
29    sys.path[:0]=["../Aster"]
30    sys.path[:0]=["../Saturne"]
31
32 from Accas import NUPL
33
34 def traiteEntiteNUPL(entite):
35    """
36        Fonction speciale pour les nuplets (classe NUPL)
37        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
38        qui est une liste vide.
39    """
40    entite.ordre_mc=[]
41
42 def traiteEntite(entite,liste_simp_reel):
43    """
44        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
45        qui est une liste contenant le nom des sous entites dans l'ordre 
46        de leur apparition dans le catalogue.
47        L'ordre d'apparition dans le catalogue est donne par l'attribut _no
48        de l'entite
49        La fonction active le meme type de traitement pour les sous entites
50        de entite
51    """
52    l=[]
53    for k,v in list(entite.entites.items()):
54       if isinstance(v,NUPL):
55          traiteEntiteNUPL(v)
56       else:
57          traiteReel(v,liste_simp_reel)
58          traiteEntite(v,liste_simp_reel)
59          traiteCache(v)
60       l.append((v._no,k))
61    l.sort()
62    entite.ordre_mc=[ item for index, item in l ]
63
64 def traiteCache(objet):
65     if not hasattr(objet, "cache"): return
66     if objet.cache == 0 :return
67     clef=objet.nom
68     if objet.equiv != None : clef=objet.equiv
69     if hasattr(objet.pere,"mcOblig"):
70       objet.pere.mcOblig[clef]=objet.defaut
71     else :
72       objet.pere.mcOblig={}
73       objet.pere.mcOblig[clef]=objet.defaut
74
75 def traiteReel(objet,liste_simp_reel):
76     if objet.__class__.__name__ == "SIMP":
77        if ( 'R' in objet.type):
78           if objet.nom not in liste_simp_reel :
79              liste_simp_reel.append(objet.nom)
80
81 def analyseNiveau(cata_ordonne_dico,niveau,liste_simp_reel):
82    """
83        Analyse un niveau dans un catalogue de commandes
84    """
85    if niveau.l_niveaux == ():
86        # Il n'y a pas de sous niveaux
87        for oper in niveau.entites:
88            traiteEntite(oper,liste_simp_reel)
89            cata_ordonne_dico[oper.nom]=oper
90    else:
91        for niv in niveau.l_niveaux:
92            analyseNiveau(cata_ordonne_dico,niv)
93   
94 def analyseCatalogue(cata):
95    """
96       Cette fonction analyse le catalogue cata pour construire avec l'aide
97       de traiteEntite la structure de donnees ordre_mc qui donne l'ordre
98       d'apparition des mots cles dans le catalogue
99       Elle retourne un dictionnaire qui contient toutes les commandes
100       du catalogue indexees par leur nom
101    """
102    cata_ordonne_dico={}
103    liste_simp_reel=[]
104    if cata.JdC.l_niveaux == ():
105        # Il n'y a pas de niveaux
106        for oper in cata.JdC.commandes:
107            traiteEntite(oper,liste_simp_reel)
108            cata_ordonne_dico[oper.nom]=oper
109    else:
110        for niv in cata.JdC.l_niveaux:
111            analyseNiveau(cata_ordonne_dico,niv,liste_simp_reel)
112    return cata_ordonne_dico,liste_simp_reel
113
114
115 if __name__ == "__main__" :
116    from Cata import cata_STA6
117    dico=analyseCatalogue(cata_STA6)
118    #import cata_saturne
119    #dico=analyseCatalogue(cata_saturne)
120
121    def print_entite(entite,dec='  '):
122        print (dec,entite.nom,entite.__class__.__name__)
123        for mocle in entite.ordre_mc:
124           print_entite(entite.entites[mocle],dec=dec+'  ')
125
126    for k,v in list(dico.items()):
127       print_entite(v,dec='')
128
129    print (dico)