Salome HOME
Update version
[tools/eficas.git] / Noyau / N_JDC_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 """
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 from __future__ import absolute_import
27 import types
28 import traceback
29
30 from . import N_ENTITE
31 from . import N_JDC
32
33
34 class JDC_CATA(N_ENTITE.ENTITE):
35
36     """
37      Classe pour definir un jeu de commandes
38
39      Attributs de classe :
40
41      - class_instance qui indique la classe qui devra etre utilisée
42              pour créer l'objet qui servira à controler la conformité
43              du jeu de commandes avec sa définition
44
45      - label qui indique la nature de l'objet de définition (ici, JDC)
46
47     """
48     class_instance = N_JDC.JDC
49     label = 'JDC'
50
51     def __init__(self, code='', execmodul=None, regles=(), niveaux=(),fichierSource=None, fr='', ang ='', **args):
52         """
53         on se laisse la possibilite d initier fichierSource avec autre chose que le nom du fichier
54         au cas ou ... pour pouvoir changer le nom du 'sous code' implementer (cf readercata)
55         """
56         self.code = code
57         self.fr = fr
58         self.ang = ang
59         self.execmodul = execmodul
60         if type(regles) == tuple:
61             self.regles = regles
62         else:
63             self.regles = (regles,)
64         # Tous les arguments supplémentaires sont stockés dans l'attribut args
65         # et seront passés au JDC pour initialiser ses paramètres propres
66         self.args = args
67         self.d_niveaux = {}
68         self.l_niveaux = niveaux
69         self.commandes = []
70         self.fichierSource = fichierSource
71         for niveau in niveaux:
72             self.d_niveaux[niveau.nom] = niveau
73         # On change d'objet catalogue. Il faut d'abord mettre le catalogue
74         # courant à None
75         CONTEXT.unsetCurrentCata()
76         CONTEXT.setCurrentCata(self)
77         self.fenetreIhm=None
78         self.definitUserASSD = False
79         self.definitUserASSDMultiple = False
80         self.dictTypesXSD={}
81         self.dictTypesXSDJumeaux={}
82         self.dictTypesASSDorUserASSDCrees={}
83         self.dictTypesASSDorUserASSDUtilises={}
84         self.listeUserASSDDumpes=set()
85         self.listeTypeTXMAvecBlancs=set()
86
87
88     def __call__(self, procedure=None, cata=None, cata_ord_dico=None,
89                  nom='SansNom', parent=None, **args):
90         """
91             Construit l'objet JDC a partir de sa definition (self),
92         """
93         return self.class_instance(definition=self, procedure=procedure,
94                                    cata=cata, cata_ord_dico=cata_ord_dico,
95                                    nom=nom,
96                                    parent=parent,
97                                    **args
98                                    )
99
100     def enregistre(self, commande):
101         """
102            Methode qui permet aux definitions de commandes de s'enregistrer aupres
103            d'un JDC_CATA
104         """
105         self.commandes.append(commande)
106
107     def verifCata(self):
108         """
109             Méthode de vérification des attributs de définition
110         """
111         self.checkRegles()
112         self.verifCataRegles()
113
114     def verifCataRegles(self):
115         """
116            Cette méthode vérifie pour tous les objets stockés dans la liste entités
117            respectent les REGLES associés  à self
118         """
119         # A FAIRE
120
121     def report(self):
122         """
123            Methode pour produire un compte-rendu de validation d'un catalogue de commandes
124         """
125         self.cr = self.CR(
126             debut=u"Compte-rendu de validation du catalogue " + self.code,
127             fin=u"Fin Compte-rendu de validation du catalogue " + self.code)
128         self.verifCata()
129         for commande in self.commandes:
130             cr = commande.report()
131             cr.debut = u"Début Commande :" + commande.nom
132             cr.fin = u"Fin commande :" + commande.nom
133             self.cr.add(cr)
134         return self.cr
135
136     def supprime(self):
137         """
138             Méthode pour supprimer les références arrières susceptibles de provoquer
139             des cycles de références
140         """
141         for commande in self.commandes:
142             commande.supprime()
143
144     def getNiveau(self, nom_niveau):
145         """
146              Retourne l'objet de type NIVEAU de nom nom_niveau
147              ou None s'il n'existe pas
148         """
149         return self.d_niveaux.get(nom_niveau, None)
150
151
152     def dumpStructure(self):
153         texte=""
154         for c in self.commandes:
155             if not(c.label != "OPER") and not(c.label != 'PROC')  : continue
156             if c.label == "OPER"  : texte+=c.nom + " "+ str(c.sd_prod) + "\n"
157             if c.label == "PROC"  : texte+=c.nom + " \n"
158             texte+=c.dumpStructure()
159         return texte