Salome HOME
22-06
[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         self.cr.debut = "BEGIN validation report : " + self.nom
51         self.cr.fin = "END validation report :" + self.nom
52         for e in self.etapes:
53             if e.isactif():
54                 self.cr.add(e.report())
55         self.state = 'modified'
56         self.isvalid(cr='oui')
57         return self.cr
58
59     def isvalid(self, cr='non'):
60         """
61           Méthode booléenne qui retourne 0 si le JDC est invalide, 1 sinon
62         """
63         # FR : on prend en compte l'état du JDC ('unchanged','modified','undetermined')
64         # afin d'accélérer le test de validité du JDC
65         if self.state == 'unchanged':
66             return self.valid
67         else:
68             valid = 1
69             texte, test = self.verif_regles()
70             if test == 0:
71                 if cr == 'oui':
72                     if texte != "" and (' '.strip(texte) == "") : self.cr.fatal(texte)
73                     else : self.cr.fatal(' '.strip(texte))
74                 valid = 0
75             if valid:
76                 for e in self.etapes:
77                     if not e.isactif():
78                         continue
79                     if not e.isvalid():
80                         valid = 0
81                         break
82             self.state = "unchanged"
83             self.valid = valid
84             return self.valid
85
86     def verif_regles(self):
87         """
88         Effectue la vérification de validité des règles du jeu de commandes
89         """
90         noms_etapes = [etape.nom for etape in self.etapes]
91         texte_global = ''
92         test_global = 1
93         for regle in self.regles:
94             texte, test = regle.verif(noms_etapes)
95             texte_global = texte_global + texte
96             test_global = test_global * test
97         return texte_global, test_global