Salome HOME
Issue 0020194: EDF 977 ALL: Get rid of warnings PACKAGE_VERSION already defined
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_IParameters.cxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 #include "SALOMEDS_IParameters.hxx"
23 #include <utilities.h>
24
25 using namespace std;
26
27 #define PT_INTEGER   0
28 #define PT_REAL      1
29 #define PT_BOOLEAN   2
30 #define PT_STRING    3
31 #define PT_REALARRAY 4
32 #define PT_INTARRAY  5
33 #define PT_STRARRAY  6
34
35 #define _AP_LISTS_LIST_ "AP_LISTS_LIST"
36 #define _AP_ENTRIES_LIST_ "AP_ENTRIES_LIST"
37 #define _AP_PROPERTIES_LIST_ "AP_PROPERTIES_LIST"
38 #define _AP_DUMP_PYTHON_ "AP_DUMP_PYTHON"
39
40 /*!
41   Constructor
42 */
43 SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
44 {
45   if(!ap) return;
46   _ap = ap;
47   _PTR(SObject) so = _ap->GetSObject();
48   _study = so->GetStudy();
49 }
50
51 SALOMEDS_IParameters::~SALOMEDS_IParameters()
52 {
53   _compNames.clear();
54 }
55
56 int SALOMEDS_IParameters::append(const string& listName, const string& value)
57 {
58   if(!_ap) return -1;
59   vector<string> v;
60   if(!_ap->IsSet(listName, PT_STRARRAY)) {
61     if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) _ap->SetStrArray(_AP_LISTS_LIST_, v);
62     if(listName != _AP_ENTRIES_LIST_ && 
63        listName != _AP_PROPERTIES_LIST_) {
64       append(_AP_LISTS_LIST_, listName);
65     }
66     _ap->SetStrArray(listName, v);
67   }
68   v = _ap->GetStrArray(listName);
69   v.push_back(value);
70   _ap->SetStrArray(listName, v);
71   return (v.size()-1);
72 }
73
74 int SALOMEDS_IParameters::nbValues(const string& listName)
75 {
76   if(!_ap) return -1;
77   if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
78   vector<string> v = _ap->GetStrArray(listName);
79   return v.size();
80 }
81
82 vector<string> SALOMEDS_IParameters::getValues(const string& listName)
83 {
84   vector<string> v;
85   if(!_ap) return v;
86   if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
87   return _ap->GetStrArray(listName);
88 }
89
90
91 string SALOMEDS_IParameters::getValue(const string& listName, int index)
92 {
93   if(!_ap) return "";
94   if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
95   vector<string> v = _ap->GetStrArray(listName);
96   if(index >= v.size()) return ""; 
97   return v[index];
98 }
99
100 vector<string> SALOMEDS_IParameters::getLists()
101 {
102   vector<string> v;
103   if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
104   return _ap->GetStrArray(_AP_LISTS_LIST_);
105 }
106
107 void SALOMEDS_IParameters::setParameter(const string& entry, const string& parameterName, const string& value)
108 {
109   if(!_ap) return;
110   vector<string> v;
111   if(!_ap->IsSet(entry, PT_STRARRAY)) {
112     append(_AP_ENTRIES_LIST_, entry); //Add the entry to the internal list of entries
113     _ap->SetStrArray(entry, v);
114   }
115   v = _ap->GetStrArray(entry);
116   v.push_back(parameterName);
117   v.push_back(value);
118   _ap->SetStrArray(entry, v);
119 }
120
121
122 string SALOMEDS_IParameters::getParameter(const string& entry, const string& parameterName)
123 {
124   if(!_ap) return "";
125   if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
126   vector<string> v = _ap->GetStrArray(entry);
127   int length = v.size();
128   for(int i = 0; i<length; i+=1) {
129     if(v[i] == parameterName) return v[i+1];
130   }
131   return "";
132 }
133
134
135 vector<string> SALOMEDS_IParameters::getAllParameterNames(const string& entry)
136 {
137   vector<string> v, names;
138   if(!_ap) return v; 
139   if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
140   v = _ap->GetStrArray(entry);
141   int length = v.size();
142   for(int i = 0; i<length; i+=2) {
143     names.push_back(v[i]);
144   }
145   return names;
146 }
147
148 vector<string> SALOMEDS_IParameters::getAllParameterValues(const string& entry)
149 {
150   vector<string> v, values;
151   if(!_ap) return v; 
152   if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
153   v = _ap->GetStrArray(entry);
154   int length = v.size();
155   for(int i = 1; i<length; i+=2) {
156     values.push_back(v[i]);
157   }
158   return values; 
159 }
160
161 int SALOMEDS_IParameters::getNbParameters(const string& entry)
162 {
163   if(!_ap) return -1;
164   if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
165   return  _ap->GetStrArray(entry).size()/2;
166 }
167
168 vector<string> SALOMEDS_IParameters::getEntries()
169 {
170   vector<string> v;
171   if(!_ap) return v;
172   if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
173   return _ap->GetStrArray(_AP_ENTRIES_LIST_);
174 }
175
176 void SALOMEDS_IParameters::setProperty(const string& name, const std::string& value)
177 {
178   if(!_ap) return;
179   if(!_ap->IsSet(name, PT_STRING)) {
180     append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
181   }
182   _ap->SetString(name, value);
183 }
184
185 string SALOMEDS_IParameters::getProperty(const string& name)
186 {
187   if(!_ap) return "";
188   if(!_ap->IsSet(name, PT_STRING)) return "";
189   return _ap->GetString(name);
190 }
191
192 vector<string> SALOMEDS_IParameters::getProperties()
193 {
194   vector<string> v;
195   if(!_ap) return v;
196   if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
197   return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
198 }
199
200
201 vector<string> SALOMEDS_IParameters::parseValue(const string& value, const char separator, bool fromEnd)
202 {
203   string val(value);
204   vector<string> v;
205   int pos;
206   if(fromEnd) pos = val.rfind(separator);
207   else pos = val.find(separator);
208
209   if(pos < 0) {
210     v.push_back(value);
211     return v;
212   }
213
214   string part1, part2;
215   part1 = val.substr(0, pos);
216   part2 = val.substr(pos+1, val.size());
217   v.push_back(part1);
218   v.push_back(part2);
219   return v;
220 }
221
222 string SALOMEDS_IParameters::encodeEntry(const string& entry, const string& compName)
223 {
224   string tail(entry, 6, entry.length()-1);
225   string newEntry(compName);
226   newEntry+=("_"+tail);
227   return newEntry;
228 }
229
230 string SALOMEDS_IParameters::decodeEntry(const string& entry)
231 {
232   if(!_study) return entry;
233   int pos = entry.rfind("_");
234   if(pos < 0 || pos >= entry.length()) return entry;
235
236   string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
237   
238   if(_compNames.find(compName) == _compNames.end()) {
239     _PTR(SObject) so = _study->FindComponent(compName);
240     if(!so) return entry;
241     compID = so->GetID();
242     _compNames[compName] = compID;
243   }
244   else compID = _compNames[compName];
245  
246   string newEntry(compID);
247   newEntry += (":"+tail);
248   
249   return newEntry;
250 }
251
252 void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const string& theID)
253 {
254   string anID;
255   if(theID == "") anID = getDefaultVisualComponent();
256   else anID = theID;
257
258   _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
259   ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(study, theID));
260 }
261
262 bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const string& theID)
263 {
264   string anID;
265   if(theID == "") anID = getDefaultVisualComponent();
266   else anID = theID;
267
268   _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
269   if(!ap) return false;
270   if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
271   return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
272 }
273
274 string SALOMEDS_IParameters::getDefaultVisualComponent()
275 {
276   return "Interface Applicative";
277 }
278
279
280