Salome HOME
CCAR: Modification principale : ajout de la possibilité d'afficher les noms de
[tools/eficas.git] / Noyau / N_CR.py
1 #@ MODIF N_CR Noyau  DATE 29/05/2002   AUTEUR DURAND C.DURAND 
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  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 """ Ce module contient la classe compte-rendu de validation
22 """
23
24 import string
25
26 class CR :
27    """ 
28         Classe servant à la construction et à l'affichage des objets Comptes-rendus 
29    """
30    def __init__(self,verbeux = 'non',debut='',fin='',dec='   '):
31       """
32          Attributs
33           - verbeux
34           - debut
35           - fin
36           - dec
37       """
38       self.verbeux = verbeux
39       self.debut=debut
40       self.fin=fin
41       self.dec=dec
42       self.crok=[]
43       self.crwarn=[]
44       self.crfatal=[]
45       self.crexception=[]
46       self.subcr=[]
47
48    def ok(self,comment):
49       """ Ajoute un commentaire OK à la liste crok"""
50       self.crok.append(comment)
51
52    def warn(self,comment):
53       """ Ajoute un commentaire Warning à la liste crwarn"""
54       self.crwarn.append(comment)
55
56    def fatal(self,comment):
57       """ Ajoute un commentaire Erreur Fatale à la liste crfatal"""
58       self.crfatal.append(comment)
59
60    def exception(self,comment):
61       """ Ajoute un commentaire Exception à la liste crexception"""
62       self.crexception.append(comment)
63
64    def add(self,cr):
65       """ Ajoute un objet CR à la liste subcr :il s'agit de l'objet CR d'un fils de self """
66       self.subcr.append(cr)
67
68    def estvide(self):
69       """ 
70            Retourne 1 si self ne contient aucun message grave (fatal ou exception) et
71                           aucun CR qui en contienne,
72                     0 sinon
73       """
74       if self.crexception : return 0
75       if self.crfatal : return 0
76       for s in self.subcr :
77         if not s.estvide(): return 0
78       return 1
79
80    def purge(self):
81       """ 
82            Purge complètement le CR sauf les exceptions
83       """
84       self.debut=''
85       self.fin=''
86       self.dec='   '
87       self.crok=[]
88       self.crwarn=[]
89       self.crfatal=[]
90       self.subcr=[]
91
92    def beautifie_messages(self):
93       """
94         Beautifie les messages stockés dans crok,crfatal,crexception et crwarn
95       """
96       l=[]
97       for mess in self.crok:
98          l.append(mess+'\n')
99       self.crok_belle=l
100       l=[]
101       for mess in self.crwarn:
102          l.append(encadre_message(mess,'*'))
103       self.crwarn_belle = l
104       l=[]
105       for mess in self.crfatal:
106          l.append(encadre_message(mess,'!'))
107       self.crfatal_belle = l
108       l=[]
109       for mess in self.crexception:
110          l.append(encadre_message(mess,'!'))
111       self.crexception_belle = l
112
113    def indent(self,s):
114       """
115         Insère en tete de chaque ligne du texte s la chaine self.dec
116       """
117       l = string.split(s,'\n')
118       return self.dec+string.join(l,'\n'+self.dec)[:-3]
119
120    def __str__(self):
121       """
122         Retourne une chaine de caractères décorée et représentative de self
123       """
124       s=''
125       self.beautifie_messages()
126       s=s+string.join(self.crok_belle,'')
127       s=s+string.join(self.crwarn_belle,'')
128       s=s+string.join(self.crfatal_belle,'')
129       s=s+string.join(self.crexception_belle,'')
130       for subcr in self.subcr:
131          if self.verbeux == 'oui':
132             s=s+str(subcr)+'\n'
133          else:
134             if not subcr.estvide():
135                s=s+str(subcr)
136       if s != '':
137          s=self.debut+'\n'+self.indent(s)+self.fin+'\n'
138       else :
139          s=self.debut+'\n'+self.fin+'\n'
140       return s
141
142    def report(self,decalage = 2):
143       """
144         Retourne une chaine de caractères non encadrée mais représentative de self
145       """
146       s=''
147       # on stocke dans s les messages de premier niveau
148       for mess in self.crok :
149         s=s + decalage*self.dec + mess + self.dec + '\n'
150       for mess in self.crwarn:
151         s=s + decalage*self.dec + mess + self.dec + '\n'
152       for mess in self.crfatal:
153         s=s + decalage*self.dec + mess + self.dec + '\n'
154       for mess in self.crexception:
155         s=s + decalage*self.dec + mess + self.dec + '\n'
156       # on récupère les messages des sous comptes-rendus ...
157       for subcr in self.subcr:
158         if not subcr.estvide():
159             s=s+subcr.report(decalage = decalage + 1)
160       # on rajoute les flags de début et de fin ... (si self n'est pas vide)
161       if not self.estvide() :
162         s = (decalage-1)*self.dec+self.debut+'\n'+s+ \
163             (decalage-1)*self.dec+self.fin+'\n'
164       return s
165
166    def get_mess_fatal(self):
167       """
168           Retourne une chaine de caractères contenant les messages de 
169           la liste crfatal (du dernier au premier)
170       """
171       self.crfatal.reverse()
172       s=''
173       for elem in self.crfatal :
174         s=s+elem
175       self.crfatal.reverse()
176       return s
177
178    def get_mess_exception(self):
179       """
180           Retourne une chaine de caractères contenant les messages 
181           de la liste crexception (du dernier au premier)
182       """
183       self.crexception.reverse()
184       s=''
185       for elem in self.crexception :
186         s=s+elem
187       self.crexception.reverse()
188       return s
189
190
191
192
193 def justify_text(texte='',cesure=50):
194   """
195       Prend la chaine de caractères 'texte' et la retourne avec un retour chariot
196       tous les 'cesure' caractères s'il y a lieu (le retour chariot est placé dans un blanc
197       et non au milieu d'un mot
198   """
199   texte = string.strip(texte)
200   if len(texte) < cesure : return texte
201   liste_lignes = string.split(texte,'\n')
202   texte_justifie = ''
203   for ligne in liste_lignes :
204     ligne = string.strip(ligne)
205     if len(ligne) <= cesure :
206       texte_justifie = texte_justifie + ligne + '\n'
207       continue
208     longueur = 0
209     new_text = ''
210     liste_mots = string.split(ligne,' ')
211     for mot in liste_mots :
212       new_longueur = longueur + len(mot)+1
213       if new_longueur < cesure :
214         new_text = new_text+' '+mot
215         longueur = longueur + len(mot) + 1
216       else :
217         longueur = 0
218         new_text = new_text + '\n'+mot
219     texte_justifie = texte_justifie + string.strip(new_text) + '\n'
220   return texte_justifie[0:-1]
221
222 def encadre_message(texte,motif):
223   """ 
224      Retourne la chaine de caractères texte entourée d'un cadre formés
225      d'éléments 'motif'
226   """
227   texte = justify_text(texte,cesure=80)
228   lignes = string.split(texte,'\n')
229   longueur = 0
230   for ligne in lignes :
231     if len(ligne)> longueur : longueur = len(ligne)
232   longueur = longueur + 4
233   txt = motif*longueur+'\n'
234   for ligne in lignes :
235     txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
236   txt = txt + motif*longueur+'\n'
237   return txt
238
239
240
241