Salome HOME
f471570e9a6442d0b4e3db0f6367be544eb51b8e
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_UseCaseBuilder.cxx
1 // Copyright (C) 2007-2023  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, or (at your option) any later version.
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
23 //  File   : SALOMEDS_UseCaseBuilder.cxx
24 //  Author : Sergey RUIN
25 //  Module : SALOME
26
27 #include "SALOMEDS_UseCaseBuilder.hxx"
28
29 #include "SALOMEDS.hxx"
30 #include "SALOMEDS_SObject.hxx"
31 #include "SALOMEDS_UseCaseIterator.hxx"
32
33 #include "SALOMEDSImpl_SObject.hxx"
34 #include "SALOMEDSImpl_UseCaseIterator.hxx"
35
36 #include <string>
37
38 SALOMEDS_UseCaseBuilder::SALOMEDS_UseCaseBuilder(SALOMEDSImpl_UseCaseBuilder* theBuilder)
39 {
40   _isLocal = true;
41   _local_impl = theBuilder;
42   _corba_impl = SALOMEDS::UseCaseBuilder::_nil();
43 }
44
45 SALOMEDS_UseCaseBuilder::SALOMEDS_UseCaseBuilder(SALOMEDS::UseCaseBuilder_ptr theBuilder)
46 {
47   _isLocal = false;
48   _local_impl = NULL;
49   _corba_impl = SALOMEDS::UseCaseBuilder::_duplicate(theBuilder);
50 }
51
52 SALOMEDS_UseCaseBuilder::~SALOMEDS_UseCaseBuilder()
53 {
54   if(!_isLocal) _corba_impl->UnRegister(); 
55 }  
56
57 bool SALOMEDS_UseCaseBuilder::Append(const _PTR(SObject)& theObject)
58 {
59   bool ret;
60   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
61   if (_isLocal) {
62     SALOMEDS::Locker lock;
63     ret = _local_impl->Append(*(obj->GetLocalImpl()));
64   }
65   else ret = _corba_impl->Append(obj->GetCORBAImpl());
66   return ret;
67 }
68
69 bool SALOMEDS_UseCaseBuilder::Remove(const _PTR(SObject)& theObject)
70 {
71   bool ret;
72   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
73   if (_isLocal) {
74     SALOMEDS::Locker lock;
75     ret = _local_impl->Remove(*(obj->GetLocalImpl()));
76   }
77   else ret = _corba_impl->Remove(obj->GetCORBAImpl());
78   return ret;
79 }
80
81 bool SALOMEDS_UseCaseBuilder::AppendTo(const _PTR(SObject)& theFather, _PTR(SObject) theObject)
82 {
83   bool ret;
84   SALOMEDS_SObject* father = dynamic_cast<SALOMEDS_SObject*>(theFather.get());
85   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
86   if (_isLocal) {
87     SALOMEDS::Locker lock;
88     ret = _local_impl->AppendTo(*(father->GetLocalImpl()), *(obj->GetLocalImpl()));
89   }
90   else ret = _corba_impl->AppendTo(father->GetCORBAImpl(), obj->GetCORBAImpl());
91   return ret;
92 }
93
94 bool SALOMEDS_UseCaseBuilder::InsertBefore(const _PTR(SObject)& theFirst, _PTR(SObject) theNext)
95 {
96   bool ret;
97   SALOMEDS_SObject* first = dynamic_cast<SALOMEDS_SObject*>(theFirst.get());
98   SALOMEDS_SObject* next = dynamic_cast<SALOMEDS_SObject*>(theNext.get());
99   if (_isLocal) {
100     SALOMEDS::Locker lock;
101     ret = _local_impl->InsertBefore(*(first->GetLocalImpl()), *(next->GetLocalImpl()));
102   }
103   else ret = _corba_impl->InsertBefore(first->GetCORBAImpl(), next->GetCORBAImpl());
104   return ret;
105 }
106
107 int SALOMEDS_UseCaseBuilder::GetIndexInFather(const _PTR(SObject)& theFather, const _PTR(SObject)& theChild)
108 {
109   int ret;
110   SALOMEDS_SObject* father = dynamic_cast<SALOMEDS_SObject*>(theFather.get());
111   SALOMEDS_SObject* child = dynamic_cast<SALOMEDS_SObject*>(theChild.get());
112   if (_isLocal) {
113     SALOMEDS::Locker lock;
114     ret = _local_impl->GetIndexInFather(*(father->GetLocalImpl()), *(child->GetLocalImpl()));
115   }
116   else ret = _corba_impl->GetIndexInFather(father->GetCORBAImpl(), child->GetCORBAImpl());
117   return ret;
118 }
119
120 bool SALOMEDS_UseCaseBuilder::SetCurrentObject(const _PTR(SObject)& theObject)
121 {
122   bool ret;
123   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
124   if (_isLocal) {
125     SALOMEDS::Locker lock;
126     ret = _local_impl->SetCurrentObject(*(obj->GetLocalImpl()));
127   }
128   else ret = _corba_impl->SetCurrentObject(obj->GetCORBAImpl());
129   return ret;
130 }
131
132 bool SALOMEDS_UseCaseBuilder::SetRootCurrent()
133 {
134   bool ret;
135   if (_isLocal) {
136     SALOMEDS::Locker lock;
137     ret = _local_impl->SetRootCurrent();
138   }
139   else ret = _corba_impl->SetRootCurrent();
140   return ret;
141 }
142
143 bool SALOMEDS_UseCaseBuilder::HasChildren(const _PTR(SObject)& theObject)
144 {
145   bool ret;
146   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
147   if (_isLocal) {
148     SALOMEDS::Locker lock;
149     ret = _local_impl->HasChildren(*(obj->GetLocalImpl()));
150   }
151   else ret = _corba_impl->HasChildren(obj->GetCORBAImpl());
152   return ret;
153 }
154
155 bool SALOMEDS_UseCaseBuilder::SortChildren(const _PTR(SObject)& theObject, bool theAscendingOrder)
156 {
157   bool ret;
158   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
159   if (_isLocal) {
160     SALOMEDS::Locker lock;
161     ret = _local_impl->SortChildren(*(obj->GetLocalImpl()), theAscendingOrder);
162   }
163   else ret = _corba_impl->SortChildren(obj->GetCORBAImpl(), theAscendingOrder);
164   return ret;
165 }
166
167 _PTR(SObject) SALOMEDS_UseCaseBuilder::GetFather(const _PTR(SObject)& theObject)
168 {
169   SALOMEDS_SObject* father = NULL;
170   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
171   if (_isLocal) {
172     SALOMEDS::Locker lock;
173     father = new SALOMEDS_SObject(_local_impl->GetFather(*(obj->GetLocalImpl())));
174   }
175   else father = new SALOMEDS_SObject(_corba_impl->GetFather(obj->GetCORBAImpl()));
176   return _PTR(SObject)(father);
177 }
178
179 bool SALOMEDS_UseCaseBuilder::IsUseCase(const _PTR(SObject)& theObject)
180 {
181   bool ret;
182   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
183   if (_isLocal) {
184     SALOMEDS::Locker lock;
185     ret = _local_impl->IsUseCase(*(obj->GetLocalImpl()));
186   }
187   else ret = _corba_impl->IsUseCase(obj->GetCORBAImpl());
188   return ret;
189 }
190
191 bool SALOMEDS_UseCaseBuilder::IsUseCaseNode(const _PTR(SObject)& theObject)
192 {
193   bool ret;
194   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
195   if (_isLocal) {
196     SALOMEDS::Locker lock;
197     ret = _local_impl->IsUseCaseNode(*(obj->GetLocalImpl()));
198   }
199   else ret = _corba_impl->IsUseCaseNode(obj->GetCORBAImpl());
200   return ret;
201 }
202
203 bool SALOMEDS_UseCaseBuilder::SetName(const std::string& theName)
204 {
205   bool ret;
206   if (_isLocal) {
207     SALOMEDS::Locker lock;
208     ret = _local_impl->SetName(theName);
209   }
210   else ret = _corba_impl->SetName((char*)theName.c_str());
211   return ret;
212 }
213
214 _PTR(SObject) SALOMEDS_UseCaseBuilder::GetCurrentObject()
215 {
216   SALOMEDS_SObject* obj = NULL;
217   if (_isLocal) {
218     SALOMEDS::Locker lock;
219     obj = new SALOMEDS_SObject(_local_impl->GetCurrentObject());
220   }
221   else obj = new SALOMEDS_SObject(_corba_impl->GetCurrentObject());
222   return _PTR(SObject)(obj);
223 }
224
225 std::string SALOMEDS_UseCaseBuilder::GetName()
226 {
227   std::string aName;
228   if (_isLocal) {
229     SALOMEDS::Locker lock;
230     aName = _local_impl->GetName();
231   }
232   else aName = _corba_impl->GetName();
233   return aName;
234 }
235
236 _PTR(SObject) SALOMEDS_UseCaseBuilder::AddUseCase(const std::string& theName)
237 {
238   SALOMEDS_SObject* obj = NULL;
239   if (_isLocal) {
240     SALOMEDS::Locker lock;
241     obj = new SALOMEDS_SObject(_local_impl->AddUseCase(theName));
242   }
243   else obj = new SALOMEDS_SObject(_corba_impl->AddUseCase((char*)theName.c_str()));
244   return _PTR(SObject)(obj);
245 }
246
247 _PTR(UseCaseIterator) SALOMEDS_UseCaseBuilder::GetUseCaseIterator(const _PTR(SObject)& theObject) 
248 {
249   SALOMEDS_UseCaseIterator* it = NULL;
250   SALOMEDS_SObject* obj = (theObject)?dynamic_cast<SALOMEDS_SObject*>(theObject.get()):NULL;
251   if (_isLocal) {
252     SALOMEDS::Locker lock;
253     if(obj)
254       it = new SALOMEDS_UseCaseIterator(_local_impl->GetUseCaseIterator(*(obj->GetLocalImpl())));
255     else 
256       it = new SALOMEDS_UseCaseIterator(_local_impl->GetUseCaseIterator(SALOMEDSImpl_SObject()));
257   }
258   else {
259     if(obj)
260       it = new SALOMEDS_UseCaseIterator(_corba_impl->GetUseCaseIterator(obj->GetCORBAImpl()));
261     else
262       it = new SALOMEDS_UseCaseIterator(_corba_impl->GetUseCaseIterator(SALOMEDS::SObject::_nil()));
263   }
264   return _PTR(UseCaseIterator)(it);
265 }