Salome HOME
sauve0206
[tools/eficas.git] / Noyau / N_JDC_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 """
22     Ce module contient la classe de definition JDC_CATA
23     qui permet de spécifier les caractéristiques d'un JDC
24 """
25
26 import types
27 import string
28 import traceback
29
30 import N_ENTITE
31 import N_JDC
32 from strfunc import ufmt
33
34
35 class JDC_CATA(N_ENTITE.ENTITE):
36
37     """
38      Classe pour definir un jeu de commandes
39
40      Attributs de classe :
41
42      - class_instance qui indique la classe qui devra etre utilisée
43              pour créer l'objet qui servira à controler la conformité
44              du jeu de commandes avec sa définition
45
46      - label qui indique la nature de l'objet de définition (ici, JDC)
47
48     """
49     class_instance = N_JDC.JDC
50     label = 'JDC'
51
52     def __init__(self, code='', execmodul=None, regles=(), niveaux=(), **args):
53         """
54         """
55         self.code = code
56         self.execmodul = execmodul
57         if type(regles) == types.TupleType:
58             self.regles = regles
59         else:
60             self.regles = (regles,)
61         # Tous les arguments supplémentaires sont stockés dans l'attribut args
62         # et seront passés au JDC pour initialiser ses paramètres propres
63         self.args = args
64         self.d_niveaux = {}
65         self.l_niveaux = niveaux
66         self.commandes = []
67         for niveau in niveaux:
68             self.d_niveaux[niveau.nom] = niveau
69         # On change d'objet catalogue. Il faut d'abord mettre le catalogue
70         # courant à None
71         CONTEXT.unset_current_cata()
72         CONTEXT.set_current_cata(self)
73
74     def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
75                  nom='SansNom', parent=None, **args):
76         """
77             Construit l'objet JDC a partir de sa definition (self),
78         """
79         return self.class_instance(definition=self, procedure=procedure,
80                                    cata=cata, cata_ord_dico=cata_ord_dico,
81                                    nom=nom,
82                                    parent=parent,
83                                    **args
84                                    )
85
86     def enregistre(self, commande):
87         """
88            Methode qui permet aux definitions de commandes de s'enregistrer aupres
89            d'un JDC_CATA
90         """
91         self.commandes.append(commande)
92
93     def verif_cata(self):
94         """
95             Méthode de vérification des attributs de définition
96         """
97         self.check_regles()
98         self.verif_cata_regles()
99
100     def verif_cata_regles(self):
101         """
102            Cette méthode vérifie pour tous les objets stockés dans la liste entités
103            respectent les REGLES associés  à self
104         """
105         # A FAIRE
106
107     def report(self):
108         """
109            Methode pour produire un compte-rendu de validation d'un catalogue de commandes
110         """
111         self.cr = self.CR(
112             debut=u"Compte-rendu de validation du catalogue " + self.code,
113             fin=u"Fin Compte-rendu de validation du catalogue " + self.code)
114         self.verif_cata()
115         for commande in self.commandes:
116             cr = commande.report()
117             cr.debut = u"Début Commande :" + commande.nom
118             cr.fin = u"Fin commande :" + commande.nom
119             self.cr.add(cr)
120         return self.cr
121
122     def supprime(self):
123         """
124             Méthode pour supprimer les références arrières susceptibles de provoquer
125             des cycles de références
126         """
127         for commande in self.commandes:
128             commande.supprime()
129
130     def get_niveau(self, nom_niveau):
131         """
132              Retourne l'objet de type NIVEAU de nom nom_niveau
133              ou None s'il n'existe pas
134         """
135         return self.d_niveaux.get(nom_niveau, None)