1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SALOMEDS_Study.cxx
24 // Author : Sergey RUIN
27 #include "utilities.h"
29 #include "SALOMEDS_Study.hxx"
31 #include "SALOMEDS.hxx"
32 #include "SALOMEDS_SComponent.hxx"
33 #include "SALOMEDS_SObject.hxx"
34 #include "SALOMEDS_StudyBuilder.hxx"
35 #include "SALOMEDS_ChildIterator.hxx"
36 #include "SALOMEDS_SComponentIterator.hxx"
37 #include "SALOMEDS_AttributeStudyProperties.hxx"
38 #include "SALOMEDS_AttributeParameter.hxx"
39 #include "SALOMEDS_UseCaseBuilder.hxx"
41 #include "SALOMEDSImpl_SComponent.hxx"
42 #include "SALOMEDSImpl_SObject.hxx"
43 #include "SALOMEDSImpl_StudyBuilder.hxx"
44 #include "SALOMEDSImpl_ChildIterator.hxx"
45 #include "SALOMEDSImpl_SComponentIterator.hxx"
46 #include "SALOMEDSImpl_AttributeStudyProperties.hxx"
47 #include "SALOMEDSImpl_AttributeParameter.hxx"
48 #include "SALOMEDSImpl_GenericVariable.hxx"
49 #include "SALOMEDSImpl_UseCaseBuilder.hxx"
51 #include "SALOMEDS_Driver_i.hxx"
52 #include "SALOMEDS_Study_i.hxx"
54 #include "Utils_ORB_INIT.hxx"
55 #include "Utils_SINGLETON.hxx"
57 #include "Basics_Utils.hxx"
62 #include <sys/types.h>
66 SALOMEDS_Study::SALOMEDS_Study(SALOMEDSImpl_Study* theStudy)
69 _local_impl = theStudy;
70 _corba_impl = SALOMEDS::Study::_nil();
74 SALOMEDS_Study::SALOMEDS_Study(SALOMEDS::Study_ptr theStudy)
77 long pid = (long)_getpid();
79 long pid = (long)getpid();
82 long addr = theStudy->GetLocalImpl(Kernel_Utils::GetHostname().c_str(), pid, _isLocal);
84 _local_impl = reinterpret_cast<SALOMEDSImpl_Study*>(addr);
85 _corba_impl = SALOMEDS::Study::_duplicate(theStudy);
89 _corba_impl = SALOMEDS::Study::_duplicate(theStudy);
95 SALOMEDS_Study::~SALOMEDS_Study()
99 std::string SALOMEDS_Study::GetPersistentReference()
103 SALOMEDS::Locker lock;
104 aRef = _local_impl->GetPersistentReference();
106 else aRef = (CORBA::String_var)_corba_impl->GetPersistentReference();
110 std::string SALOMEDS_Study::GetTransientReference()
114 SALOMEDS::Locker lock;
115 aRef = _local_impl->GetTransientReference();
117 else aRef = _corba_impl->GetTransientReference();
121 bool SALOMEDS_Study::IsEmpty()
125 SALOMEDS::Locker lock;
126 ret = _local_impl->IsEmpty();
128 else ret = _corba_impl->IsEmpty();
132 _PTR(SComponent) SALOMEDS_Study::FindComponent (const std::string& aComponentName)
134 SALOMEDSClient_SComponent* aSCO = NULL;
136 SALOMEDS::Locker lock;
138 SALOMEDSImpl_SComponent aSCO_impl = _local_impl->FindComponent(aComponentName);
139 if (!aSCO_impl) return _PTR(SComponent)(aSCO);
140 aSCO = new SALOMEDS_SComponent(aSCO_impl);
143 SALOMEDS::SComponent_var aSCO_impl = _corba_impl->FindComponent((char*)aComponentName.c_str());
144 if (CORBA::is_nil(aSCO_impl)) return _PTR(SComponent)(aSCO);
145 aSCO = new SALOMEDS_SComponent(aSCO_impl);
147 return _PTR(SComponent)(aSCO);
150 _PTR(SComponent) SALOMEDS_Study::FindComponentID(const std::string& aComponentID)
152 SALOMEDSClient_SComponent* aSCO = NULL;
154 SALOMEDS::Locker lock;
156 SALOMEDSImpl_SComponent aSCO_impl = _local_impl->FindComponentID(aComponentID);
157 if (!aSCO_impl) return _PTR(SComponent)(aSCO);
158 aSCO = new SALOMEDS_SComponent(aSCO_impl);
161 SALOMEDS::SComponent_var aSCO_impl = _corba_impl->FindComponentID((char*)aComponentID.c_str());
162 if(CORBA::is_nil(aSCO_impl)) return _PTR(SComponent)(aSCO);
163 aSCO = new SALOMEDS_SComponent(aSCO_impl);
165 return _PTR(SComponent)(aSCO);
168 _PTR(SObject) SALOMEDS_Study::FindObject(const std::string& anObjectName)
170 SALOMEDSClient_SObject* aSO = NULL;
173 SALOMEDS::Locker lock;
175 SALOMEDSImpl_SObject aSO_impl = _local_impl->FindObject(anObjectName);
176 if (!aSO_impl) return _PTR(SObject)(aSO);
177 if(aSO_impl.IsComponent()) {
178 SALOMEDSImpl_SComponent aSCO_impl = aSO_impl;
179 return _PTR(SObject)(new SALOMEDS_SComponent(aSCO_impl));
181 aSO = new SALOMEDS_SObject(aSO_impl);
184 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObject((char*)anObjectName.c_str());
185 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
186 SALOMEDS::SComponent_var aSCO_impl = SALOMEDS::SComponent::_narrow(aSO_impl);
187 if (!CORBA::is_nil(aSCO_impl)) return _PTR(SObject)(new SALOMEDS_SComponent(aSCO_impl));
188 aSO = new SALOMEDS_SObject(aSO_impl);
191 return _PTR(SObject)(aSO);
194 std::vector<_PTR(SObject)> SALOMEDS_Study::FindObjectByName(const std::string& anObjectName,
195 const std::string& aComponentName)
197 std::vector<_PTR(SObject)> aVector;
201 SALOMEDS::Locker lock;
203 std::vector<SALOMEDSImpl_SObject> aSeq = _local_impl->FindObjectByName(anObjectName, aComponentName);
204 aLength = aSeq.size();
205 for (i = 0; i< aLength; i++)
206 aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
209 SALOMEDS::Study::ListOfSObject_var aSeq = _corba_impl->FindObjectByName((char*)anObjectName.c_str(),
210 (char*)aComponentName.c_str());
211 aLength = aSeq->length();
212 for (i = 0; i< aLength; i++) aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
218 _PTR(SObject) SALOMEDS_Study::FindObjectID(const std::string& anObjectID)
220 SALOMEDSClient_SObject* aSO = NULL;
222 SALOMEDS::Locker lock;
224 SALOMEDSImpl_SObject aSO_impl = _local_impl->FindObjectID(anObjectID);
225 if(!aSO_impl) return _PTR(SObject)(aSO);
226 return _PTR(SObject)(new SALOMEDS_SObject(aSO_impl));
229 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectID((char*)anObjectID.c_str());
230 if(CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
231 return _PTR(SObject)(new SALOMEDS_SObject(aSO_impl));
233 return _PTR(SObject)(aSO);
236 _PTR(SObject) SALOMEDS_Study::CreateObjectID(const std::string& anObjectID)
238 SALOMEDSClient_SObject* aSO = NULL;
240 SALOMEDS::Locker lock;
241 SALOMEDSImpl_SObject aSO_impl = _local_impl->CreateObjectID(anObjectID);
242 if(!aSO_impl) return _PTR(SObject)(aSO);
243 aSO = new SALOMEDS_SObject(aSO_impl);
246 SALOMEDS::SObject_var aSO_impl = _corba_impl->CreateObjectID((char*)anObjectID.c_str());
247 if(CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
248 aSO = new SALOMEDS_SObject(aSO_impl);
250 return _PTR(SObject)(aSO);
253 _PTR(SObject) SALOMEDS_Study::FindObjectIOR(const std::string& anObjectIOR)
255 SALOMEDSClient_SObject* aSO = NULL;
257 SALOMEDS::Locker lock;
259 SALOMEDSImpl_SObject aSO_impl = _local_impl->FindObjectIOR(anObjectIOR);
260 if (!aSO_impl) return _PTR(SObject)(aSO);
261 aSO = new SALOMEDS_SObject(aSO_impl);
264 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectIOR((char*)anObjectIOR.c_str());
265 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
266 aSO = new SALOMEDS_SObject(aSO_impl);
268 return _PTR(SObject)(aSO);
271 _PTR(SObject) SALOMEDS_Study::FindObjectByPath(const std::string& thePath)
273 SALOMEDSClient_SObject* aSO = NULL;
275 SALOMEDS::Locker lock;
277 SALOMEDSImpl_SObject aSO_impl = _local_impl->FindObjectByPath(thePath);
278 if (!aSO_impl) return _PTR(SObject)(aSO);
279 aSO = new SALOMEDS_SObject(aSO_impl);
282 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectByPath((char*)thePath.c_str());
283 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
284 aSO = new SALOMEDS_SObject(aSO_impl);
286 return _PTR(SObject)(aSO);
289 std::string SALOMEDS_Study::GetObjectPath(const _PTR(SObject)& theSO)
291 if(!theSO) return "";
292 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
295 SALOMEDS::Locker lock;
296 aPath = _local_impl->GetObjectPath(*(aSO->GetLocalImpl()));
298 else aPath = _corba_impl->GetObjectPath(aSO->GetCORBAImpl());
302 void SALOMEDS_Study::SetContext(const std::string& thePath)
305 SALOMEDS::Locker lock;
306 _local_impl->SetContext(thePath);
308 else _corba_impl->SetContext((char*)thePath.c_str());
311 std::string SALOMEDS_Study::GetContext()
315 SALOMEDS::Locker lock;
316 aPath = _local_impl->GetContext();
318 else aPath = _corba_impl->GetContext();
322 std::vector<std::string> SALOMEDS_Study::GetObjectNames(const std::string& theContext)
324 std::vector<std::string> aVector;
327 SALOMEDS::Locker lock;
328 aVector = _local_impl->GetObjectNames(theContext);
331 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetObjectNames((char*)theContext.c_str());
332 aLength = aSeq->length();
333 for (i = 0; i < aLength; i++) aVector.push_back(std::string((std::string)aSeq[i].in()));
338 std::vector<std::string> SALOMEDS_Study::GetDirectoryNames(const std::string& theContext)
340 std::vector<std::string> aVector;
343 SALOMEDS::Locker lock;
344 aVector = _local_impl->GetDirectoryNames(theContext);
347 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetDirectoryNames((char*)theContext.c_str());
348 aLength = aSeq->length();
349 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
354 std::vector<std::string> SALOMEDS_Study::GetFileNames(const std::string& theContext)
356 std::vector<std::string> aVector;
359 SALOMEDS::Locker lock;
360 aVector = _local_impl->GetFileNames(theContext);
363 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetFileNames((char*)theContext.c_str());
364 aLength = aSeq->length();
366 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
371 std::vector<std::string> SALOMEDS_Study::GetComponentNames(const std::string& theContext)
373 std::vector<std::string> aVector;
376 SALOMEDS::Locker lock;
377 aVector = _local_impl->GetComponentNames(theContext);
380 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetComponentNames((char*)theContext.c_str());
381 aLength = aSeq->length();
382 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
387 _PTR(ChildIterator) SALOMEDS_Study::NewChildIterator(const _PTR(SObject)& theSO)
389 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
390 SALOMEDSClient_ChildIterator* aCI = NULL;
392 SALOMEDS::Locker lock;
393 SALOMEDSImpl_ChildIterator aCIimpl = _local_impl->NewChildIterator(*(aSO->GetLocalImpl()));
394 aCI = new SALOMEDS_ChildIterator(aCIimpl);
397 SALOMEDS::ChildIterator_var aCIimpl = _corba_impl->NewChildIterator(aSO->GetCORBAImpl());
398 aCI = new SALOMEDS_ChildIterator(aCIimpl);
401 return _PTR(ChildIterator)(aCI);
404 _PTR(SComponentIterator) SALOMEDS_Study::NewComponentIterator()
406 SALOMEDSClient_SComponentIterator* aCI = NULL;
408 SALOMEDS::Locker lock;
410 SALOMEDSImpl_SComponentIterator aCIimpl = _local_impl->NewComponentIterator();
411 aCI = new SALOMEDS_SComponentIterator(aCIimpl);
414 SALOMEDS::SComponentIterator_var aCIimpl = _corba_impl->NewComponentIterator();
415 aCI = new SALOMEDS_SComponentIterator(aCIimpl);
418 return _PTR(SComponentIterator)(aCI);
421 _PTR(StudyBuilder) SALOMEDS_Study::NewBuilder()
423 SALOMEDSClient_StudyBuilder* aSB = NULL;
425 SALOMEDS::Locker lock;
427 SALOMEDSImpl_StudyBuilder* aSBimpl = _local_impl->NewBuilder();
428 aSB = new SALOMEDS_StudyBuilder(aSBimpl);
431 SALOMEDS::StudyBuilder_var aSBimpl = _corba_impl->NewBuilder();
432 aSB = new SALOMEDS_StudyBuilder(aSBimpl);
435 return _PTR(StudyBuilder)(aSB);
438 std::string SALOMEDS_Study::Name()
442 SALOMEDS::Locker lock;
443 aName = _local_impl->Name();
445 else aName = Kernel_Utils::encode_s(_corba_impl->Name());
449 void SALOMEDS_Study::Name(const std::string& theName)
452 SALOMEDS::Locker lock;
453 _local_impl->Name(theName);
455 else _corba_impl->Name(Kernel_Utils::decode_s(theName));
458 bool SALOMEDS_Study::IsSaved()
462 SALOMEDS::Locker lock;
463 isSaved = _local_impl->IsSaved();
465 else isSaved = _corba_impl->IsSaved();
469 void SALOMEDS_Study::IsSaved(bool save)
472 SALOMEDS::Locker lock;
473 _local_impl->IsSaved(save);
475 else _corba_impl->IsSaved(save);
478 bool SALOMEDS_Study::IsModified()
482 SALOMEDS::Locker lock;
483 isModified = _local_impl->IsModified();
485 else isModified = _corba_impl->IsModified();
489 void SALOMEDS_Study::Modified()
492 SALOMEDS::Locker lock;
493 _local_impl->Modify();
495 else _corba_impl->Modified();
499 std::string SALOMEDS_Study::URL()
503 SALOMEDS::Locker lock;
504 aURL = _local_impl->URL();
507 wchar_t* wurl = _corba_impl->URL();
509 // Converts unicode url to encoded version
510 setlocale(LC_ALL, "");
511 size_t urlLen = std::wcslen(wurl);
513 memset( url, 0, urlLen+1);
514 wcstombs(url, wurl, sizeof(url));
516 aURL = std::string(url);
521 void SALOMEDS_Study::URL(const std::string& url)
524 SALOMEDS::Locker lock;
525 _local_impl->URL(url);
528 setlocale(LC_ALL, "");
529 size_t urlLen = url.size();
530 wchar_t wurl[urlLen+1];
531 memset( wurl, 0, urlLen+1);
532 mbstowcs(wurl, url.c_str(), sizeof(wurl));
534 _corba_impl->URL(wurl);
538 int SALOMEDS_Study::StudyId()
542 SALOMEDS::Locker lock;
543 anID = _local_impl->StudyId();
545 else anID = _corba_impl->StudyId();
549 void SALOMEDS_Study::StudyId(int id)
552 SALOMEDS::Locker lock;
553 _local_impl->StudyId(id);
555 else _corba_impl->StudyId(id);
558 std::vector<_PTR(SObject)> SALOMEDS_Study::FindDependances(const _PTR(SObject)& theSO)
560 std::vector<_PTR(SObject)> aVector;
561 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
564 SALOMEDS::Locker lock;
566 std::vector<SALOMEDSImpl_SObject> aSeq = _local_impl->FindDependances(*(aSO->GetLocalImpl()));
568 aLength = aSeq.size();
569 for (i = 0; i < aLength; i++)
570 aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
574 SALOMEDS::Study::ListOfSObject_var aSeq = _corba_impl->FindDependances(aSO->GetCORBAImpl());
575 aLength = aSeq->length();
576 for (i = 0; i < aLength; i++) aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
581 _PTR(AttributeStudyProperties) SALOMEDS_Study::GetProperties()
583 SALOMEDSClient_AttributeStudyProperties* aProp;
585 SALOMEDS::Locker lock;
586 aProp = new SALOMEDS_AttributeStudyProperties(_local_impl->GetProperties());
588 else aProp = new SALOMEDS_AttributeStudyProperties((SALOMEDS::AttributeStudyProperties_var)_corba_impl->GetProperties());
589 return _PTR(AttributeStudyProperties)(aProp);
592 std::string SALOMEDS_Study::GetLastModificationDate()
596 SALOMEDS::Locker lock;
597 aDate = _local_impl->GetLastModificationDate();
599 else aDate = _corba_impl->GetLastModificationDate();
603 std::vector<std::string> SALOMEDS_Study::GetModificationsDate()
605 std::vector<std::string> aVector;
608 SALOMEDS::Locker lock;
609 aVector = _local_impl->GetModificationsDate();
612 SALOMEDS::ListOfDates_var aSeq = _corba_impl->GetModificationsDate();
613 aLength = aSeq->length();
614 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
619 _PTR(UseCaseBuilder) SALOMEDS_Study::GetUseCaseBuilder()
621 SALOMEDSClient_UseCaseBuilder* aUB = NULL;
623 SALOMEDS::Locker lock;
625 SALOMEDSImpl_UseCaseBuilder* aUBimpl = _local_impl->GetUseCaseBuilder();
626 aUB = new SALOMEDS_UseCaseBuilder(aUBimpl);
629 SALOMEDS::UseCaseBuilder_var aUBimpl = _corba_impl->GetUseCaseBuilder();
630 aUB = new SALOMEDS_UseCaseBuilder(aUBimpl);
633 return _PTR(UseCaseBuilder)(aUB);
636 void SALOMEDS_Study::Close()
639 SALOMEDS::Locker lock;
640 _local_impl->Close();
642 else _corba_impl->Close();
645 void SALOMEDS_Study::EnableUseCaseAutoFilling(bool isEnabled)
647 if(_isLocal) _local_impl->EnableUseCaseAutoFilling(isEnabled);
648 else _corba_impl->EnableUseCaseAutoFilling(isEnabled);
651 bool SALOMEDS_Study::DumpStudy(const std::string& thePath,
652 const std::string& theBaseName,
656 //SRN: Pure CORBA DumpStudy as it does more cleaning than the local one
657 if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
658 bool ret = _corba_impl->DumpStudy(thePath.c_str(), theBaseName.c_str(), isPublished, isMultiFile);
662 void SALOMEDS_Study::SetStudyLock(const std::string& theLockerID)
665 SALOMEDS::Locker lock;
666 _local_impl->SetStudyLock(theLockerID.c_str());
668 else _corba_impl->SetStudyLock((char*)theLockerID.c_str());
671 bool SALOMEDS_Study::IsStudyLocked()
675 SALOMEDS::Locker lock;
676 isLocked = _local_impl->IsStudyLocked();
678 else isLocked = _corba_impl->IsStudyLocked();
682 void SALOMEDS_Study::UnLockStudy(const std::string& theLockerID)
684 if(_isLocal) _local_impl->UnLockStudy(theLockerID.c_str());
685 else _corba_impl->UnLockStudy((char*)theLockerID.c_str());
688 std::vector<std::string> SALOMEDS_Study::GetLockerID()
690 std::vector<std::string> aVector;
693 SALOMEDS::Locker lock;
694 aVector = _local_impl->GetLockerID();
697 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetLockerID();
698 aLength = aSeq->length();
699 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
705 void SALOMEDS_Study::SetReal(const std::string& theVarName, const double theValue)
708 SALOMEDS::Locker lock;
709 _local_impl->SetVariable(theVarName,
711 SALOMEDSImpl_GenericVariable::REAL_VAR);
714 _corba_impl->SetReal((char*)theVarName.c_str(),theValue);
717 void SALOMEDS_Study::SetInteger(const std::string& theVarName, const int theValue)
720 SALOMEDS::Locker lock;
721 _local_impl->SetVariable(theVarName,
723 SALOMEDSImpl_GenericVariable::INTEGER_VAR);
726 _corba_impl->SetInteger((char*)theVarName.c_str(),theValue);
729 void SALOMEDS_Study::SetBoolean(const std::string& theVarName, const bool theValue)
732 SALOMEDS::Locker lock;
733 _local_impl->SetVariable(theVarName,
735 SALOMEDSImpl_GenericVariable::BOOLEAN_VAR);
738 _corba_impl->SetBoolean((char*)theVarName.c_str(),theValue);
741 void SALOMEDS_Study::SetString(const std::string& theVarName, const std::string& theValue)
744 SALOMEDS::Locker lock;
745 _local_impl->SetStringVariable(theVarName,
747 SALOMEDSImpl_GenericVariable::STRING_VAR);
750 _corba_impl->SetString((char*)theVarName.c_str(),(char*)theValue.c_str());
753 void SALOMEDS_Study::SetStringAsDouble(const std::string& theVarName, const double theValue)
756 SALOMEDS::Locker lock;
757 _local_impl->SetStringVariableAsDouble(theVarName,
759 SALOMEDSImpl_GenericVariable::STRING_VAR);
762 _corba_impl->SetStringAsDouble((char*)theVarName.c_str(),theValue);
765 double SALOMEDS_Study::GetReal(const std::string& theVarName)
769 SALOMEDS::Locker lock;
770 aResult = _local_impl->GetVariableValue(theVarName);
773 aResult = _corba_impl->GetReal((char*)theVarName.c_str());
777 int SALOMEDS_Study::GetInteger(const std::string& theVarName)
781 SALOMEDS::Locker lock;
782 aResult = (int) _local_impl->GetVariableValue(theVarName);
785 aResult = _corba_impl->GetInteger((char*)theVarName.c_str());
789 bool SALOMEDS_Study::GetBoolean(const std::string& theVarName)
793 SALOMEDS::Locker lock;
794 aResult = (bool) _local_impl->GetVariableValue(theVarName);
797 aResult = _corba_impl->GetBoolean((char*)theVarName.c_str());
801 std::string SALOMEDS_Study::GetString(const std::string& theVarName)
805 SALOMEDS::Locker lock;
806 aResult = _local_impl->GetStringVariableValue(theVarName);
809 aResult = _corba_impl->GetString((char*)theVarName.c_str());
813 bool SALOMEDS_Study::IsReal(const std::string& theVarName)
817 SALOMEDS::Locker lock;
818 aResult = _local_impl->IsTypeOf(theVarName,
819 SALOMEDSImpl_GenericVariable::REAL_VAR);
822 aResult = _corba_impl->IsReal((char*)theVarName.c_str());
826 bool SALOMEDS_Study::IsInteger(const std::string& theVarName)
830 SALOMEDS::Locker lock;
831 aResult = _local_impl->IsTypeOf(theVarName,
832 SALOMEDSImpl_GenericVariable::INTEGER_VAR);
835 aResult = _corba_impl->IsInteger((char*)theVarName.c_str());
839 bool SALOMEDS_Study::IsBoolean(const std::string& theVarName)
843 SALOMEDS::Locker lock;
844 aResult = _local_impl->IsTypeOf(theVarName,
845 SALOMEDSImpl_GenericVariable::BOOLEAN_VAR);
848 aResult = _corba_impl->IsBoolean((char*)theVarName.c_str());
852 bool SALOMEDS_Study::IsString(const std::string& theVarName)
856 SALOMEDS::Locker lock;
857 aResult = _local_impl->IsTypeOf(theVarName,
858 SALOMEDSImpl_GenericVariable::STRING_VAR);
861 aResult = _corba_impl->IsString((char*)theVarName.c_str());
865 bool SALOMEDS_Study::IsVariable(const std::string& theVarName)
869 SALOMEDS::Locker lock;
870 aResult = _local_impl->IsVariable(theVarName);
873 aResult = _corba_impl->IsVariable((char*)theVarName.c_str());
877 std::vector<std::string> SALOMEDS_Study::GetVariableNames()
879 std::vector<std::string> aVector;
881 SALOMEDS::Locker lock;
882 aVector = _local_impl->GetVariableNames();
885 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetVariableNames();
886 int aLength = aSeq->length();
887 for (int i = 0; i < aLength; i++)
888 aVector.push_back( std::string(aSeq[i].in()) );
893 bool SALOMEDS_Study::RemoveVariable(const std::string& theVarName)
897 SALOMEDS::Locker lock;
898 aResult = _local_impl->RemoveVariable(theVarName);
901 aResult = _corba_impl->RemoveVariable((char*)theVarName.c_str());
905 bool SALOMEDS_Study::RenameVariable(const std::string& theVarName, const std::string& theNewVarName)
909 SALOMEDS::Locker lock;
910 aResult = _local_impl->RenameVariable(theVarName, theNewVarName);
913 aResult = _corba_impl->RenameVariable((char*)theVarName.c_str(), (char*)theNewVarName.c_str());
917 bool SALOMEDS_Study::IsVariableUsed(const std::string& theVarName)
921 SALOMEDS::Locker lock;
922 aResult = _local_impl->IsVariableUsed(theVarName);
925 aResult = _corba_impl->IsVariableUsed((char*)theVarName.c_str());
929 std::vector< std::vector<std::string> > SALOMEDS_Study::ParseVariables(const std::string& theVars)
931 std::vector< std::vector<std::string> > aResult;
933 SALOMEDS::Locker lock;
934 aResult = _local_impl->ParseVariables(theVars);
937 SALOMEDS::ListOfListOfStrings_var aSeq = _corba_impl->ParseVariables(theVars.c_str());
938 for (int i = 0, n = aSeq->length(); i < n; i++) {
939 std::vector<std::string> aVector;
940 SALOMEDS::ListOfStrings aSection = aSeq[i];
941 for (int j = 0, m = aSection.length(); j < m; j++) {
942 aVector.push_back( std::string(aSection[j].in()) );
944 aResult.push_back( aVector );
950 std::string SALOMEDS_Study::ConvertObjectToIOR(CORBA::Object_ptr theObject)
952 return _orb->object_to_string(theObject);
955 CORBA::Object_ptr SALOMEDS_Study::ConvertIORToObject(const std::string& theIOR)
957 return _orb->string_to_object(theIOR.c_str());
960 void SALOMEDS_Study::init_orb()
962 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
963 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
964 _orb = init(0 , 0 ) ;
967 SALOMEDS::Study_ptr SALOMEDS_Study::GetStudy()
970 SALOMEDS::Locker lock;
972 if (!CORBA::is_nil(_corba_impl)) return SALOMEDS::Study::_duplicate(_corba_impl);
973 std::string anIOR = _local_impl->GetTransientReference();
974 SALOMEDS::Study_var aStudy;
975 if (!_local_impl->IsError() && anIOR != "") {
976 aStudy = SALOMEDS::Study::_narrow(_orb->string_to_object(anIOR.c_str()));
979 SALOMEDS_Study_i *aStudy_servant = new SALOMEDS_Study_i(_local_impl, _orb);
980 aStudy = aStudy_servant->_this();
981 _local_impl->SetTransientReference(_orb->object_to_string(aStudy));
983 _corba_impl = SALOMEDS::Study::_duplicate(aStudy);
984 return aStudy._retn();
987 return SALOMEDS::Study::_duplicate(_corba_impl);
990 return SALOMEDS::Study::_nil();
994 _PTR(AttributeParameter) SALOMEDS_Study::GetCommonParameters(const std::string& theID, int theSavePoint)
996 SALOMEDSClient_AttributeParameter* AP = NULL;
997 if(theSavePoint >= 0) {
999 SALOMEDS::Locker lock;
1000 AP = new SALOMEDS_AttributeParameter(_local_impl->GetCommonParameters(theID.c_str(), theSavePoint));
1003 AP = new SALOMEDS_AttributeParameter(_corba_impl->GetCommonParameters(theID.c_str(), theSavePoint));
1006 return _PTR(AttributeParameter)(AP);
1009 _PTR(AttributeParameter) SALOMEDS_Study::GetModuleParameters(const std::string& theID,
1010 const std::string& theModuleName, int theSavePoint)
1012 SALOMEDSClient_AttributeParameter* AP = NULL;
1013 if(theSavePoint > 0) {
1015 SALOMEDS::Locker lock;
1016 AP = new SALOMEDS_AttributeParameter(_local_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint));
1019 AP = new SALOMEDS_AttributeParameter(_corba_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint));
1022 return _PTR(AttributeParameter)(AP);
1025 void SALOMEDS_Study::attach(SALOMEDS::Observer_ptr theObserver,bool modify)
1027 if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
1028 _corba_impl->attach(theObserver,modify);
1031 void SALOMEDS_Study::detach(SALOMEDS::Observer_ptr theObserver)
1033 if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
1034 _corba_impl->detach(theObserver);