Salome HOME
CCAR: Modified Files:
[tools/eficas.git] / Editeur / autre_analyse_cata.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
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):
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_entite(v)
56       l.append((v._no,k))
57    l.sort()
58    entite.ordre_mc=[ item for index, item in l ]
59
60 def analyse_niveau(cata_ordonne_dico,niveau):
61    """
62        Analyse un niveau dans un catalogue de commandes
63    """
64    if niveau.l_niveaux == ():
65        # Il n'y a pas de sous niveaux
66        for oper in niveau.entites:
67            traite_entite(oper)
68            cata_ordonne_dico[oper.nom]=oper
69    else:
70        for niv in niveau.l_niveaux:
71            analyse_niveau(cata_ordonne_dico,niv)
72   
73 def analyse_catalogue(cata):
74    """
75       Cette fonction analyse le catalogue cata pour construire avec l'aide
76       de traite_entite la structure de données ordre_mc qui donne l'ordre
77       d'apparition des mots clés dans le catalogue
78       Elle retourne un dictionnaire qui contient toutes les commandes
79       du catalogue indexées par leur nom
80    """
81    cata_ordonne_dico={}
82    if cata.JdC.l_niveaux == ():
83        # Il n'y a pas de niveaux
84        for oper in cata.JdC.commandes:
85            traite_entite(oper)
86            cata_ordonne_dico[oper.nom]=oper
87    else:
88        for niv in cata.JdC.l_niveaux:
89            analyse_niveau(cata_ordonne_dico,niv)
90    return cata_ordonne_dico
91
92
93 if __name__ == "__main__" :
94    from Cata import cata_STA6
95    dico=analyse_catalogue(cata_STA6)
96    #import cata_saturne
97    #dico=analyse_catalogue(cata_saturne)
98
99    def print_entite(entite,dec='  '):
100        print dec,entite.nom,entite.__class__.__name__
101        for mocle in entite.ordre_mc:
102           print_entite(entite.entites[mocle],dec=dec+'  ')
103
104    for k,v in dico.items():
105       print_entite(v,dec='')
106
107    print dico.keys()