Salome HOME
Merge branch 'V9_2_BR'
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_UseCaseBuilder.cxx
1 // Copyright (C) 2007-2016  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 bool SALOMEDS_UseCaseBuilder::SetCurrentObject(const _PTR(SObject)& theObject)
108 {
109   bool ret;
110   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
111   if (_isLocal) {
112     SALOMEDS::Locker lock;
113     ret = _local_impl->SetCurrentObject(*(obj->GetLocalImpl()));
114   }
115   else ret = _corba_impl->SetCurrentObject(obj->GetCORBAImpl());
116   return ret;
117 }
118
119 bool SALOMEDS_UseCaseBuilder::SetRootCurrent()
120 {
121   bool ret;
122   if (_isLocal) {
123     SALOMEDS::Locker lock;
124     ret = _local_impl->SetRootCurrent();
125   }
126   else ret = _corba_impl->SetRootCurrent();
127   return ret;
128 }
129
130 bool SALOMEDS_UseCaseBuilder::HasChildren(const _PTR(SObject)& theObject)
131 {
132   bool ret;
133   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
134   if (_isLocal) {
135     SALOMEDS::Locker lock;
136     ret = _local_impl->HasChildren(*(obj->GetLocalImpl()));
137   }
138   else ret = _corba_impl->HasChildren(obj->GetCORBAImpl());
139   return ret;
140 }
141
142 bool SALOMEDS_UseCaseBuilder::SortChildren(const _PTR(SObject)& theObject, bool theAscendingOrder)
143 {
144   bool ret;
145   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
146   if (_isLocal) {
147     SALOMEDS::Locker lock;
148     ret = _local_impl->SortChildren(*(obj->GetLocalImpl()), theAscendingOrder);
149   }
150   else ret = _corba_impl->SortChildren(obj->GetCORBAImpl(), theAscendingOrder);
151   return ret;
152 }
153
154 _PTR(SObject) SALOMEDS_UseCaseBuilder::GetFather(const _PTR(SObject)& theObject)
155 {
156   SALOMEDS_SObject* father = NULL;
157   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
158   if (_isLocal) {
159     SALOMEDS::Locker lock;
160     father = new SALOMEDS_SObject(_local_impl->GetFather(*(obj->GetLocalImpl())));
161   }
162   else father = new SALOMEDS_SObject(_corba_impl->GetFather(obj->GetCORBAImpl()));
163   return _PTR(SObject)(father);
164 }
165
166 bool SALOMEDS_UseCaseBuilder::IsUseCase(const _PTR(SObject)& theObject)
167 {
168   bool ret;
169   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
170   if (_isLocal) {
171     SALOMEDS::Locker lock;
172     ret = _local_impl->IsUseCase(*(obj->GetLocalImpl()));
173   }
174   else ret = _corba_impl->IsUseCase(obj->GetCORBAImpl());
175   return ret;
176 }
177
178 bool SALOMEDS_UseCaseBuilder::IsUseCaseNode(const _PTR(SObject)& theObject)
179 {
180   bool ret;
181   SALOMEDS_SObject* obj = dynamic_cast<SALOMEDS_SObject*>(theObject.get());
182   if (_isLocal) {
183     SALOMEDS::Locker lock;
184     ret = _local_impl->IsUseCaseNode(*(obj->GetLocalImpl()));
185   }
186   else ret = _corba_impl->IsUseCaseNode(obj->GetCORBAImpl());
187   return ret;
188 }
189
190 bool SALOMEDS_UseCaseBuilder::SetName(const std::string& theName)
191 {
192   bool ret;
193   if (_isLocal) {
194     SALOMEDS::Locker lock;
195     ret = _local_impl->SetName(theName);
196   }
197   else ret = _corba_impl->SetName((char*)theName.c_str());
198   return ret;
199 }
200
201 _PTR(SObject) SALOMEDS_UseCaseBuilder::GetCurrentObject()
202 {
203   SALOMEDS_SObject* obj = NULL;
204   if (_isLocal) {
205     SALOMEDS::Locker lock;
206     obj = new SALOMEDS_SObject(_local_impl->GetCurrentObject());
207   }
208   else obj = new SALOMEDS_SObject(_corba_impl->GetCurrentObject());
209   return _PTR(SObject)(obj);
210 }
211
212 std::string SALOMEDS_UseCaseBuilder::GetName()
213 {
214   std::string aName;
215   if (_isLocal) {
216     SALOMEDS::Locker lock;
217     aName = _local_impl->GetName();
218   }
219   else aName = _corba_impl->GetName();
220   return aName;
221 }
222
223 _PTR(SObject) SALOMEDS_UseCaseBuilder::AddUseCase(const std::string& theName)
224 {
225   SALOMEDS_SObject* obj = NULL;
226   if (_isLocal) {
227     SALOMEDS::Locker lock;
228     obj = new SALOMEDS_SObject(_local_impl->AddUseCase(theName));
229   }
230   else obj = new SALOMEDS_SObject(_corba_impl->AddUseCase((char*)theName.c_str()));
231   return _PTR(SObject)(obj);
232 }
233
234 _PTR(UseCaseIterator) SALOMEDS_UseCaseBuilder::GetUseCaseIterator(const _PTR(SObject)& theObject) 
235 {
236   SALOMEDS_UseCaseIterator* it = NULL;
237   SALOMEDS_SObject* obj = (theObject)?dynamic_cast<SALOMEDS_SObject*>(theObject.get()):NULL;
238   if (_isLocal) {
239     SALOMEDS::Locker lock;
240     if(obj)
241       it = new SALOMEDS_UseCaseIterator(_local_impl->GetUseCaseIterator(*(obj->GetLocalImpl())));
242     else 
243       it = new SALOMEDS_UseCaseIterator(_local_impl->GetUseCaseIterator(SALOMEDSImpl_SObject()));
244   }
245   else {
246     if(obj)
247       it = new SALOMEDS_UseCaseIterator(_corba_impl->GetUseCaseIterator(obj->GetCORBAImpl()));
248     else
249       it = new SALOMEDS_UseCaseIterator(_corba_impl->GetUseCaseIterator(SALOMEDS::SObject::_nil()));
250   }
251   return _PTR(UseCaseIterator)(it);
252 }