]> SALOME platform Git repositories - tools/eficas.git/blob - Noyau/N_UserASSD.py
Salome HOME
reindent + copyright + merge manuel avec la V9_dev sauf repertoires metier
[tools/eficas.git] / Noyau / N_UserASSD.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 """
23
24 from __future__ import absolute_import
25 from __future__ import print_function
26 try :
27     from builtins import object
28 except : pass
29 import traceback
30 import sys
31
32 from .N_ASSD import ASSD
33 from Ihm import CONNECTOR
34
35 class UserASSD(ASSD):
36     """
37        Classe de base pour definir des types de structures de donnees definie par
38        l utilisateur
39        equivalent d un concept ASSD pour un SIMP ou un FACT
40        Attention : le parent est a None au debut  et non le MC createur que l on ne connait pas
41        Lorsqu on ecrit le jdc, n ecrit nom=UserASSD()
42        le parent est le SIMP qui cree l objet
43        a la lecture si la classe commence par un majuscule on fait le boulot dans MCSIMP, sinon dans
44        l init de parametre car le parsing considere qu on a un parametre
45     """
46
47     def __init__(self,nom='sansNom'):
48         #print ('dans init de UserASSD pour ', nom, type(nom))
49         self.nom = nom
50         self.jdc = CONTEXT.getCurrentJdC()
51         self.parent = None
52         self.initialiseValeur()
53         self.utilisePar = set()
54         if self.nom  != 'sansNom' : self.id = self.jdc.regSD(self)
55         if self.nom  != 'sansNom' : self.initialiseNom(nom)
56         else : self.id = None
57         self.ptr_sdj   = None
58
59
60     def initialiseParent(self, parent):
61     # attention parent.parent peut être un bloc
62         #print ('je passe initialiseParent pour : ', self, parent.nom)
63         self.parent = parent
64         self.etape = self.parent.getEtape()
65         self.etape.userASSDCrees.append(self)
66         if self.parent.parent != self.etape :
67             if self.parent.parent.estIdentifiePar != None :
68                 print ('il y a un souci dans l initialisation de l identifiant pour', self.parent.parent.nom)
69                 print (self.parent.nom)
70                 print (self.nom)
71             self.parent.parent.estIdentifiePar = self
72
73     def initialiseNom(self,nom):
74         #print ('je passe initialiseNom pour : ', self, nom, type(nom))
75         for (i,j)  in list(self.jdc.sdsDict.items()) :
76             if j == self :
77                 del(self.jdc.sdsDict[i])
78         self.jdc.sdsDict[nom]=self
79         self.nom=nom
80         if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self)
81
82     def initialiseValeur(self,valeur=None):
83         self.valeur=valeur
84
85     def ajoutUtilisePar(self,mc):
86         #print ('je passe ajoutUtilisePar pour : ', self.nom)
87         self.utilisePar.add(mc)
88
89     def enleveUtilisePar(self,mc):
90         try : self.utilisePar.remove(mc)
91         except : pass
92
93     def renomme(self,nouveauNom):
94         print ('je passe dans renomme')
95         self.jdc.delConcept(self.nom)
96         self.jdc.sdsDict[nouveauNom] = self
97         self.setName(nouveauNom)
98         #print ('je suis dans renomme',nouveauNom, self.nom)
99         #print (self.utilisePar)
100         for mc in (self.utilisePar):
101             mc.demandeRedessine()
102
103     def transfere (self,obj):
104     # uniquement utise pour les lectures XML
105         self.utilisePar=obj.utilisePar
106         self.id=obj.id
107         for mc in self.utilisePar: mc.valeur=self
108
109     def deleteReference(self, mcCreateur=None):
110         print ('je passe dans supprime de N_UserASSDMultiple')
111     # meme signature que UserASSDMultiple
112         for MC in self.utilisePar :
113             # le delete est appele en cascade par toute la hierachie
114             # du mcsimp (au cas ou on detruise le fact ou le proc)
115             # du coup pas beau
116             try :
117                 if type(MC.valeur) in (list,tuple):
118                     MC.valeur=list(MC.valeur)
119                     while self in MC.valeur: MC.valeur.remove(self)
120                     if MC.valeur == [] : MC.Valeur = None
121                 else : MC.valeur=None
122                 MC.state='changed'
123                 MC.isValid()
124                 CONNECTOR.Emit(MC,"valid")
125             except : pass
126             # on peut avoir des listes qui contiennent plusieurs fois la meme valeur
127         self.jdc.delConcept(self.nom)
128
129     def executeExpression(self, condition, dico) :
130         #if self.nom == 'shape1' : print ('je suis dans executeExpression ', self.nom, ' ', condition)
131         dict = locals()
132         dict.update(dico)
133         #if self.nom == 'shape1' or self.nom == 'G1' : print (dict)
134         #if self.nom == 'shape1' :
135         #    print (self.getParentsWithId().getListeUserASSD("systemGeometryId"))
136         #    print (self.getParentsWithId().getListeUserASSD("SystemGeometryId"))
137         #    test = eval(condition, globals(), dict)
138         #    print ('-------------------------------------------------------------------------')
139         try :
140             test = eval(condition, globals(), dict)
141         except :
142             print ('executeExpression ', self.nom, ' ', condition , 'exception')
143             test = 0
144         return test
145
146     def getEficasAttribut(self, attribut):
147         #print ('je suis dans getEficasAttr', attribut)
148         if self.parent == None : return None
149         #print ('apres if')
150         # parent est le SIMP donc c est bien parent.parent
151         try :
152             valeur = self.parent.parent.getMocle(attribut)
153         except :
154             valeur = None
155         #print (valeur)
156         return valeur
157
158
159     def supprime(self, mcCreateur=None):
160     # mcCreateur utile pour N_UserASSDMultiple
161         print ('je passe dans supprime de N_UserASSDMultiple')
162         self.deleteReference(mcCreateur)
163
164     def __repr__(self):
165         return "concept " + self.getName() + " type " + self.__class__.__name__
166
167     def __str__(self):
168         return self.getName() or "<None>"
169