Salome HOME
1er mise en coherence avec la 7_6
[tools/eficas.git] / Validation / V_JDC.py
1 # coding=utf-8
2 # person_in_charge: mathieu.courtois at edf.fr
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2015  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21
22
23 """
24    Ce module contient la classe mixin JDC qui porte les méthodes
25    nécessaires pour réaliser la validation d'un objet de type JDC
26    dérivé de OBJECT.
27
28    Une classe mixin porte principalement des traitements et est
29    utilisée par héritage multiple pour composer les traitements.
30 """
31 # Modules EFICAS
32 import V_MCCOMPO
33 from Noyau.N_Exception import AsException
34 from Noyau.N_utils import AsType
35 from Noyau.strfunc import ufmt
36
37
38 class JDC(V_MCCOMPO.MCCOMPO):
39
40     """
41     """
42
43     def report(self):
44         """
45             Methode pour generation d un rapport de validite
46         """
47         self.cr.purge()
48         self.cr.debut = "DEBUT CR validation : " + self.nom
49         self.cr.fin = "FIN CR validation :" + self.nom
50         for e in self.etapes:
51             if e.isactif():
52                 self.cr.add(e.report())
53         self.state = 'modified'
54         self.isvalid(cr='oui')
55         return self.cr
56
57     def isvalid(self, cr='non'):
58         """
59           Méthode booléenne qui retourne 0 si le JDC est invalide, 1 sinon
60         """
61         # FR : on prend en compte l'état du JDC ('unchanged','modified','undetermined')
62         # afin d'accélérer le test de validité du JDC
63         if self.state == 'unchanged':
64             return self.valid
65         else:
66             valid = 1
67             texte, test = self.verif_regles()
68             if test == 0:
69                 if cr == 'oui':
70                     self.cr.fatal(' '.strip(texte))
71                 valid = 0
72             if valid:
73                 for e in self.etapes:
74                     if not e.isactif():
75                         continue
76                     if not e.isvalid():
77                         valid = 0
78                         break
79             self.state = "unchanged"
80             self.valid = valid
81             return self.valid
82
83     def verif_regles(self):
84         """
85         Effectue la vérification de validité des règles du jeu de commandes
86         """
87         noms_etapes = [etape.nom for etape in self.etapes]
88         texte_global = ''
89         test_global = 1
90         for regle in self.regles:
91             texte, test = regle.verif(noms_etapes)
92             texte_global = texte_global + texte
93             test_global = test_global * test
94         return texte_global, test_global