Salome HOME
CCAR: import_hook.py was too strict in ensure_list (ImportError raised)
[modules/kernel.git] / src / KERNEL_PY / iparameters.py
1 #  -*- coding: iso-8859-1 -*-
2 #  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 #  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
7 #  This library is free software; you can redistribute it and/or
8 #  modify it under the terms of the GNU Lesser General Public
9 #  License as published by the Free Software Foundation; either
10 #  version 2.1 of the License.
11 #
12 #  This library is distributed in the hope that it will be useful,
13 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 #  Lesser General Public License for more details.
16 #
17 #  You should have received a copy of the GNU Lesser General Public
18 #  License along with this library; if not, write to the Free Software
19 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20 #
21 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23
24 import salome
25 import string
26 import SALOME
27 import SALOMEDS
28 import SALOME_Session_idl
29
30 PT_INTEGER = 0
31 PT_REAL = 1
32 PT_BOOLEAN = 2
33 PT_STRING = 3
34 PT_REALARRAY = 4
35 PT_INTARRAY = 5
36 PT_STRARRAY = 6
37
38 _AP_LISTS_LIST_ = "AP_LISTS_LIST"
39 _AP_ENTRIES_LIST_ = "AP_ENTRIES_LIST"
40 _AP_PROPERTIES_LIST_ = "AP_PROPERTIES_LIST"
41 _AP_DUMP_PYTHON_ = "AP_DUMP_PYTHON"
42
43 vp_session = None
44
45 def getSession():
46     global vp_session
47     if vp_session is None:
48         vp_session = salome.naming_service.Resolve("/Kernel/Session")
49         vp_session = vp_session._narrow(SALOME.Session)
50         pass
51     return vp_session 
52
53 class IParameters:
54     """
55     Interface IParameters was designed to provide a common way to set up
56     named parameters. The interface is initialized by AttributeParameter that
57     is used as a container of stored data.
58     The interface supports 3 types of named parameters:
59     1. Named list - a named list consists of string values.
60        One can append value to list (method 'append'), get a number of values
61        in the list (method 'nbValues'), get all values of the given list
62        (method 'getValues') and get names of all created named lists.
63     2. Parameters - that is a set of named string values associated with some named
64        entity. Parameter consists of tree elements: entity name, a parameter name
65        and a parameter value. Thus for one named entity there are an arbitrary number
66        of pair 'name parameter : value'.
67        One can add a new parameter to entry (method 'setParameter'), get a value of
68        a given named parameter of the given entry (method 'getParameter'), get a number
69        of parameters of the given entry (method 'getNbParameters'), get all names of
70        parameters for the given entry (method 'getAllParameterNames'), get all
71        values of parameters for the entry (method 'getAllParameterValues') and get all
72        stored entries (method 'getEntries')
73     3. Property - a property has a name and a string value.
74        One can set property (method 'setProperty'), getProperty (method 'getProperty') and
75        get a list of all stored properties (method 'getProperties').
76
77     Note:   
78           Methods not mentioned above are private and is not supposed to be used
79           by module's developers.   
80        
81     """
82     def __init__(self, attributeParameter):
83         """Initializes the instance"""
84         self._ap = attributeParameter
85         pass
86
87     def append(self, listName, value):
88         """Appends a value to the named list"""
89         if self._ap is None: return -1
90         v = []
91         if self._ap.IsSet(listName, PT_STRARRAY) == 0:
92             if self._ap.IsSet(_AP_LISTS_LIST_, PT_STRARRAY) == 0: self._ap.SetStrArray(_AP_LISTS_LIST_, v);
93             if listName != _AP_ENTRIES_LIST_ and listName != _AP_PROPERTIES_LIST_:
94                 self.append(_AP_LISTS_LIST_, listName)
95                 pass
96             self._ap.SetStrArray(listName, v)
97             pass
98         
99         v = self._ap.GetStrArray(listName)
100         v.append(value)
101         self._ap.SetStrArray(listName, v)
102         return (len(v)-1)
103     
104     def nbValues(self, listName):
105         """Returns a number of values in the named list"""
106         if self._ap is None: return -1
107         if self._ap.IsSet(listName, PT_STRARRAY) == 0: return 0
108         v = self._ap.GetStrArray(listName)
109         return len(v)
110
111     def getValues(self, listName):
112         """Returns a list of values in the named list"""
113         v = []
114         if self._ap is None: return v
115         if self._ap.IsSet(listName, PT_STRARRAY) == 0: return v
116         return self._ap.GetStrArray(listName)
117
118     def getLists(self):
119         """Returns a list of named lists' names"""
120         v = []
121         if self._ap is None: return v
122         if self._ap.IsSet(_AP_LISTS_LIST_, PT_STRARRAY) == 0: return v
123         return self._ap.GetStrArray(_AP_LISTS_LIST_)
124
125     def setParameter(self, entry, parameterName, value):
126         """Sets a value of the named parameter for the entry"""
127         if self._ap is None: return
128         v = []
129         if self._ap.IsSet(entry, PT_STRARRAY) ==0: 
130             self.append(_AP_ENTRIES_LIST_, entry) #Add the entry to the internal list of entries
131             self._ap.SetStrArray(entry, v)
132             pass
133         
134         v = self._ap.GetStrArray(entry)
135         v.append(parameterName)
136         v.append(value)
137         self._ap.SetStrArray(entry, v)
138         pass
139
140     def getParameter(self, entry, parameterName):
141         """Returns a value of the named parameter for the entry"""
142         if self._ap is None: return ""
143         if self._ap.IsSet(entry, PT_STRARRAY) == 0: return ""
144         v = self._ap.GetStrArray(entry)
145         length = len(v);
146         i = 0
147         while i<length:
148             if v[i] == parameterName: return v[i+1]
149             i+=1
150             pass
151         
152         return ""
153
154     def getAllParameterNames(self, entry):
155         """Returns all parameter names of the given entry"""
156         v = []
157         names = []
158         if self._ap is None: return v
159         if self._ap.IsSet(entry, PT_STRARRAY) == 0: return v
160         v = self._ap.GetStrArray(entry)
161         length = len(v)
162         i = 0
163         while i<length:
164             names.append(v[i])
165             i+=2
166             pass
167         
168         return names
169
170     def getAllParameterValues(self, entry):
171         """Returns all parameter values of the given entry"""
172         v = []
173         values = []
174         if self._ap is None: return v
175         if self._ap.IsSet(entry, PT_STRARRAY) == 0: return v
176         v = self._ap.GetStrArray(entry)
177         length = len(v)
178         i = 1
179         while i<length:
180             values.append(v[i]+1)
181             i+=2
182             pass
183         
184         return values
185
186     def getNbParameters(self, entry):
187         """Returns a number of parameters of the entry"""
188         if self._ap is None: return -1
189         if self._ap.IsSet(entry, PT_STRARRAY) == 0: return -1
190         return len(self._ap.GetStrArray(entry))/2
191
192     def getEntries(self):
193         """Returns all entries"""
194         v = []
195         if self._ap is None: return v
196         if self._ap.IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY) == 0: return v
197         return self._ap.GetStrArray(_AP_ENTRIES_LIST_)
198
199     def setProperty(self, name, value):
200         """Sets a property value"""
201         if self._ap is None: return
202         if self._ap.IsSet(name, PT_STRING) == 0: 
203             self.append(_AP_PROPERTIES_LIST_, name) #Add the property to the internal list of properties
204             pass
205         self._ap.SetString(name, value)
206         pass
207
208     def getProperty(self, name):
209         """Returns a value of the named property"""
210         if self._ap is None: return ""
211         if self._ap.IsSet(name, PT_STRING) == 0: return ""
212         return self._ap.GetString(name)
213
214     def getProperties(self):
215         """Returns all propetries"""
216         v = []
217         if self._ap is None: return v
218         if self._ap.IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY) == 0: return v
219         return self._ap.GetStrArray(_AP_PROPERTIES_LIST_)
220
221     def parseValue(self, value, separator, fromEnd):
222         """Breaks a value string in two parts which is divided by separator."""
223         v = []
224         pos = - 1
225         if fromEnd == 1: pos = value.rfind(separator)
226         else: pos = value.find(separator)
227
228         if pos < 0: 
229             v.append(value)
230             return v
231         
232         part1 = value[0:pos]
233         part2 = value[pos+1:len(value)]
234         v.append(part1)
235         v.append(part2)
236         return v
237
238     def setDumpPython(self, isDumping):
239         """Enables/Disables the dumping to Python"""
240         if self._ap is None: return
241         _ap.SetBool(_AP_DUMP_PYTHON_, isDumping)
242         pass
243
244     def isDumpPython(self):
245         """Returns whether there is the dumping to Python"""
246         if self._ap is None: return 0
247         if self._ap.IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN) == 0: return 0
248         return self._ap.GetBool(_AP_DUMP_PYTHON_)
249
250     pass