1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // File : SALOMEDS_Study.cxx
21 // Author : Sergey RUIN
26 #include "utilities.h"
28 #include "SALOMEDS_Study.hxx"
30 #include "SALOMEDS.hxx"
31 #include "SALOMEDS_SComponent.hxx"
32 #include "SALOMEDS_SObject.hxx"
33 #include "SALOMEDS_StudyBuilder.hxx"
34 #include "SALOMEDS_ChildIterator.hxx"
35 #include "SALOMEDS_SComponentIterator.hxx"
36 #include "SALOMEDS_AttributeStudyProperties.hxx"
37 #include "SALOMEDS_AttributeParameter.hxx"
38 #include "SALOMEDS_UseCaseBuilder.hxx"
40 #include "SALOMEDSImpl_SComponent.hxx"
41 #include "SALOMEDSImpl_SObject.hxx"
42 #include "SALOMEDSImpl_StudyBuilder.hxx"
43 #include "SALOMEDSImpl_ChildIterator.hxx"
44 #include "SALOMEDSImpl_SComponentIterator.hxx"
45 #include "SALOMEDSImpl_AttributeStudyProperties.hxx"
46 #include "SALOMEDSImpl_AttributeParameter.hxx"
47 #include "SALOMEDSImpl_UseCaseBuilder.hxx"
49 #include "SALOMEDS_Driver_i.hxx"
50 #include "SALOMEDS_Study_i.hxx"
52 #include <TCollection_AsciiString.hxx>
53 #include <TColStd_HSequenceOfAsciiString.hxx>
54 #include <TColStd_HSequenceOfTransient.hxx>
56 #include "Utils_ORB_INIT.hxx"
57 #include "Utils_SINGLETON.hxx"
62 #include <sys/types.h>
70 SALOMEDS_Study::SALOMEDS_Study(const Handle(SALOMEDSImpl_Study)& theStudy)
73 _local_impl = theStudy;
74 _corba_impl = SALOMEDS::Study::_nil();
78 SALOMEDS_Study::SALOMEDS_Study(SALOMEDS::Study_ptr theStudy)
81 long pid = (long)_getpid();
83 long pid = (long)getpid();
86 CORBA::LongLong addr = // mpv: fix for IPAL13534: for 64 bit platform use 8-bytes long for pointer storage
87 theStudy->GetLocalImpl(GetHostname().c_str(), pid, _isLocal);
90 _local_impl = ((SALOMEDSImpl_Study*)(addr));
91 _corba_impl = SALOMEDS::Study::_duplicate(theStudy);
95 _corba_impl = SALOMEDS::Study::_duplicate(theStudy);
101 SALOMEDS_Study::~SALOMEDS_Study()
105 std::string SALOMEDS_Study::GetPersistentReference()
109 SALOMEDS::Locker lock;
110 aRef = _local_impl->GetPersistentReference().ToCString();
112 else aRef = _corba_impl->GetPersistentReference();
116 std::string SALOMEDS_Study::GetTransientReference()
120 SALOMEDS::Locker lock;
121 aRef = _local_impl->GetTransientReference().ToCString();
123 else aRef = _corba_impl->GetTransientReference();
127 bool SALOMEDS_Study::IsEmpty()
131 SALOMEDS::Locker lock;
132 ret = _local_impl->IsEmpty();
134 else ret = _corba_impl->IsEmpty();
138 _PTR(SComponent) SALOMEDS_Study::FindComponent (const std::string& aComponentName)
140 SALOMEDSClient_SComponent* aSCO = NULL;
142 SALOMEDS::Locker lock;
144 Handle(SALOMEDSImpl_SComponent) aSCO_impl =
145 _local_impl->FindComponent((char*)aComponentName.c_str());
146 if (aSCO_impl.IsNull()) return _PTR(SComponent)(aSCO);
147 aSCO = new SALOMEDS_SComponent(aSCO_impl);
150 SALOMEDS::SComponent_var aSCO_impl = _corba_impl->FindComponent((char*)aComponentName.c_str());
151 if (CORBA::is_nil(aSCO_impl)) return _PTR(SComponent)(aSCO);
152 aSCO = new SALOMEDS_SComponent(aSCO_impl);
154 return _PTR(SComponent)(aSCO);
157 _PTR(SComponent) SALOMEDS_Study::FindComponentID(const std::string& aComponentID)
159 SALOMEDSClient_SComponent* aSCO = NULL;
161 SALOMEDS::Locker lock;
163 Handle(SALOMEDSImpl_SComponent) aSCO_impl =
164 _local_impl->FindComponentID((char*)aComponentID.c_str());
165 if (aSCO_impl.IsNull()) return _PTR(SComponent)(aSCO);
166 aSCO = new SALOMEDS_SComponent(aSCO_impl);
169 SALOMEDS::SComponent_var aSCO_impl = _corba_impl->FindComponentID((char*)aComponentID.c_str());
170 if(CORBA::is_nil(aSCO_impl)) return _PTR(SComponent)(aSCO);
171 aSCO = new SALOMEDS_SComponent(aSCO_impl);
173 return _PTR(SComponent)(aSCO);
176 _PTR(SObject) SALOMEDS_Study::FindObject(const std::string& anObjectName)
178 SALOMEDSClient_SObject* aSO = NULL;
181 SALOMEDS::Locker lock;
183 Handle(SALOMEDSImpl_SObject) aSO_impl = _local_impl->FindObject((char*)anObjectName.c_str());
184 if (aSO_impl.IsNull()) return _PTR(SObject)(aSO);
185 Handle(SALOMEDSImpl_SComponent) aSCO_impl = Handle(SALOMEDSImpl_SComponent)::DownCast(aSO_impl);
186 if (!aSCO_impl.IsNull()) return _PTR(SObject)(new SALOMEDS_SComponent(aSCO_impl));
187 aSO = new SALOMEDS_SObject(aSO_impl);
190 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObject((char*)anObjectName.c_str());
191 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
192 SALOMEDS::SComponent_var aSCO_impl = SALOMEDS::SComponent::_narrow(aSO_impl);
193 if (!CORBA::is_nil(aSCO_impl)) return _PTR(SObject)(new SALOMEDS_SComponent(aSCO_impl));
194 aSO = new SALOMEDS_SObject(aSO_impl);
197 return _PTR(SObject)(aSO);
200 std::vector<_PTR(SObject)> SALOMEDS_Study::FindObjectByName(const std::string& anObjectName,
201 const std::string& aComponentName)
203 std::vector<_PTR(SObject)> aVector;
207 SALOMEDS::Locker lock;
209 Handle(TColStd_HSequenceOfTransient) aSeq =
210 _local_impl->FindObjectByName((char*)anObjectName.c_str(), (char*)aComponentName.c_str());
211 aLength = aSeq->Length();
212 for (i = 1; i<= aLength; i++)
213 aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject
214 (Handle(SALOMEDSImpl_SObject)::DownCast(aSeq->Value(i)))));
217 SALOMEDS::Study::ListOfSObject_var aSeq = _corba_impl->FindObjectByName((char*)anObjectName.c_str(),
218 (char*)aComponentName.c_str());
219 aLength = aSeq->length();
220 for (i = 0; i< aLength; i++) aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
226 _PTR(SObject) SALOMEDS_Study::FindObjectID(const std::string& anObjectID)
228 SALOMEDSClient_SObject* aSO = NULL;
230 SALOMEDS::Locker lock;
232 Handle(SALOMEDSImpl_SObject) aSO_impl = _local_impl->FindObjectID((char*)anObjectID.c_str());
233 if(aSO_impl.IsNull()) return _PTR(SObject)(aSO);
234 return _PTR(SObject)(new SALOMEDS_SObject(aSO_impl));
237 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectID((char*)anObjectID.c_str());
238 if(CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
239 return _PTR(SObject)(new SALOMEDS_SObject(aSO_impl));
241 return _PTR(SObject)(aSO);
244 _PTR(SObject) SALOMEDS_Study::CreateObjectID(const std::string& anObjectID)
246 SALOMEDSClient_SObject* aSO = NULL;
248 SALOMEDS::Locker lock;
249 aSO = new SALOMEDS_SObject(_local_impl->CreateObjectID((char*)anObjectID.c_str()));
251 else aSO = new SALOMEDS_SObject(_corba_impl->CreateObjectID((char*)anObjectID.c_str()));
252 return _PTR(SObject)(aSO);
255 _PTR(SObject) SALOMEDS_Study::FindObjectIOR(const std::string& anObjectIOR)
257 SALOMEDSClient_SObject* aSO = NULL;
259 SALOMEDS::Locker lock;
261 Handle(SALOMEDSImpl_SObject) aSO_impl = _local_impl->FindObjectIOR((char*)anObjectIOR.c_str());
262 if (aSO_impl.IsNull()) return _PTR(SObject)(aSO);
263 aSO = new SALOMEDS_SObject(aSO_impl);
266 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectIOR((char*)anObjectIOR.c_str());
267 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
268 aSO = new SALOMEDS_SObject(aSO_impl);
270 return _PTR(SObject)(aSO);
273 _PTR(SObject) SALOMEDS_Study::FindObjectByPath(const std::string& thePath)
275 SALOMEDSClient_SObject* aSO = NULL;
277 SALOMEDS::Locker lock;
279 Handle(SALOMEDSImpl_SObject) aSO_impl = _local_impl->FindObjectByPath((char*)thePath.c_str());
280 if (aSO_impl.IsNull()) return _PTR(SObject)(aSO);
281 aSO = new SALOMEDS_SObject(aSO_impl);
284 SALOMEDS::SObject_var aSO_impl = _corba_impl->FindObjectByPath((char*)thePath.c_str());
285 if (CORBA::is_nil(aSO_impl)) return _PTR(SObject)(aSO);
286 aSO = new SALOMEDS_SObject(aSO_impl);
288 return _PTR(SObject)(aSO);
291 std::string SALOMEDS_Study::GetObjectPath(const _PTR(SObject)& theSO)
293 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
296 SALOMEDS::Locker lock;
297 aPath = _local_impl->GetObjectPath(aSO->GetLocalImpl()).ToCString();
299 else aPath = _corba_impl->GetObjectPath(aSO->GetCORBAImpl());
303 void SALOMEDS_Study::SetContext(const std::string& thePath)
306 SALOMEDS::Locker lock;
307 _local_impl->SetContext((char*)thePath.c_str());
309 else _corba_impl->SetContext((char*)thePath.c_str());
312 std::string SALOMEDS_Study::GetContext()
316 SALOMEDS::Locker lock;
317 aPath = _local_impl->GetContext().ToCString();
319 else aPath = _corba_impl->GetContext();
323 std::vector<std::string> SALOMEDS_Study::GetObjectNames(const std::string& theContext)
325 std::vector<std::string> aVector;
328 SALOMEDS::Locker lock;
330 Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetObjectNames((char*)theContext.c_str());
331 aLength = aSeq->Length();
332 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
335 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetObjectNames((char*)theContext.c_str());
336 aLength = aSeq->length();
337 for (i = 0; i < aLength; i++) aVector.push_back(std::string((std::string)aSeq[i].in()));
342 std::vector<std::string> SALOMEDS_Study::GetDirectoryNames(const std::string& theContext)
344 std::vector<std::string> aVector;
347 SALOMEDS::Locker lock;
349 Handle(TColStd_HSequenceOfAsciiString) aSeq =
350 _local_impl->GetDirectoryNames((char*)theContext.c_str());
351 aLength = aSeq->Length();
352 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
355 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetDirectoryNames((char*)theContext.c_str());
356 aLength = aSeq->length();
357 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
362 std::vector<std::string> SALOMEDS_Study::GetFileNames(const std::string& theContext)
364 std::vector<std::string> aVector;
367 SALOMEDS::Locker lock;
369 Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetFileNames((char*)theContext.c_str());
370 aLength = aSeq->Length();
371 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
374 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetFileNames((char*)theContext.c_str());
375 aLength = aSeq->length();
377 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
382 std::vector<std::string> SALOMEDS_Study::GetComponentNames(const std::string& theContext)
384 std::vector<std::string> aVector;
387 SALOMEDS::Locker lock;
389 Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetComponentNames((char*)theContext.c_str());
390 aLength = aSeq->Length();
391 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
394 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetComponentNames((char*)theContext.c_str());
395 aLength = aSeq->length();
396 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
401 _PTR(ChildIterator) SALOMEDS_Study::NewChildIterator(const _PTR(SObject)& theSO)
403 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
404 SALOMEDSClient_ChildIterator* aCI = NULL;
406 SALOMEDS::Locker lock;
408 Handle(SALOMEDSImpl_ChildIterator) aCIimpl = _local_impl->NewChildIterator(aSO->GetLocalImpl());
409 aCI = new SALOMEDS_ChildIterator(aCIimpl);
412 SALOMEDS::ChildIterator_var aCIimpl = _corba_impl->NewChildIterator(aSO->GetCORBAImpl());
413 aCI = new SALOMEDS_ChildIterator(aCIimpl);
416 return _PTR(ChildIterator)(aCI);
419 _PTR(SComponentIterator) SALOMEDS_Study::NewComponentIterator()
421 SALOMEDSClient_SComponentIterator* aCI = NULL;
423 SALOMEDS::Locker lock;
425 SALOMEDSImpl_SComponentIterator aCIimpl = _local_impl->NewComponentIterator();
426 aCI = new SALOMEDS_SComponentIterator(aCIimpl);
429 SALOMEDS::SComponentIterator_var aCIimpl = _corba_impl->NewComponentIterator();
430 aCI = new SALOMEDS_SComponentIterator(aCIimpl);
433 return _PTR(SComponentIterator)(aCI);
436 _PTR(StudyBuilder) SALOMEDS_Study::NewBuilder()
438 SALOMEDSClient_StudyBuilder* aSB = NULL;
440 SALOMEDS::Locker lock;
442 Handle(SALOMEDSImpl_StudyBuilder) aSBimpl = _local_impl->NewBuilder();
443 aSB = new SALOMEDS_StudyBuilder(aSBimpl);
446 SALOMEDS::StudyBuilder_var aSBimpl = _corba_impl->NewBuilder();
447 aSB = new SALOMEDS_StudyBuilder(aSBimpl);
450 return _PTR(StudyBuilder)(aSB);
453 std::string SALOMEDS_Study::Name()
457 SALOMEDS::Locker lock;
458 aName = _local_impl->Name().ToCString();
460 else aName = _corba_impl->Name();
464 void SALOMEDS_Study::Name(const std::string& theName)
467 SALOMEDS::Locker lock;
468 _local_impl->Name((char*)theName.c_str());
470 else _corba_impl->Name((char*)theName.c_str());
473 bool SALOMEDS_Study::IsSaved()
477 SALOMEDS::Locker lock;
478 isSaved = _local_impl->IsSaved();
480 else isSaved = _corba_impl->IsSaved();
484 void SALOMEDS_Study::IsSaved(bool save)
487 SALOMEDS::Locker lock;
488 _local_impl->IsSaved(save);
490 else _corba_impl->IsSaved(save);
493 bool SALOMEDS_Study::IsModified()
497 SALOMEDS::Locker lock;
498 isModified = _local_impl->IsModified();
500 else isModified = _corba_impl->IsModified();
504 std::string SALOMEDS_Study::URL()
508 SALOMEDS::Locker lock;
509 aURL = _local_impl->URL().ToCString();
511 else aURL = _corba_impl->URL();
515 void SALOMEDS_Study::URL(const std::string& url)
518 SALOMEDS::Locker lock;
519 _local_impl->URL((char*)url.c_str());
521 else _corba_impl->URL((char*)url.c_str());
524 int SALOMEDS_Study::StudyId()
528 SALOMEDS::Locker lock;
529 anID = _local_impl->StudyId();
531 else anID = _corba_impl->StudyId();
535 void SALOMEDS_Study::StudyId(int id)
538 SALOMEDS::Locker lock;
539 _local_impl->StudyId(id);
541 else _corba_impl->StudyId(id);
544 std::vector<_PTR(SObject)> SALOMEDS_Study::FindDependances(const _PTR(SObject)& theSO)
546 std::vector<_PTR(SObject)> aVector;
547 SALOMEDS_SObject* aSO = dynamic_cast<SALOMEDS_SObject*>(theSO.get());
550 SALOMEDS::Locker lock;
552 Handle(TColStd_HSequenceOfTransient) aSeq = _local_impl->FindDependances(aSO->GetLocalImpl());
553 if (!aSeq.IsNull()) {
554 aLength = aSeq->Length();
555 for (i = 1; i <= aLength; i++)
556 aVector.push_back(_PTR(SObject)(
557 new SALOMEDS_SObject(Handle(SALOMEDSImpl_SObject)::DownCast(aSeq->Value(i)))));
561 SALOMEDS::Study::ListOfSObject_var aSeq = _corba_impl->FindDependances(aSO->GetCORBAImpl());
562 aLength = aSeq->length();
563 for (i = 0; i < aLength; i++) aVector.push_back(_PTR(SObject)(new SALOMEDS_SObject(aSeq[i])));
568 _PTR(AttributeStudyProperties) SALOMEDS_Study::GetProperties()
570 SALOMEDSClient_AttributeStudyProperties* aProp;
572 SALOMEDS::Locker lock;
573 aProp = new SALOMEDS_AttributeStudyProperties(_local_impl->GetProperties());
575 else aProp = new SALOMEDS_AttributeStudyProperties(_corba_impl->GetProperties());
576 return _PTR(AttributeStudyProperties)(aProp);
579 std::string SALOMEDS_Study::GetLastModificationDate()
583 SALOMEDS::Locker lock;
584 aDate = _local_impl->GetLastModificationDate().ToCString();
586 else aDate = _corba_impl->GetLastModificationDate();
590 std::vector<std::string> SALOMEDS_Study::GetModificationsDate()
592 std::vector<std::string> aVector;
595 SALOMEDS::Locker lock;
597 Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetModificationsDate();
598 aLength = aSeq->Length();
599 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
602 SALOMEDS::ListOfDates_var aSeq = _corba_impl->GetModificationsDate();
603 aLength = aSeq->length();
604 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
609 _PTR(UseCaseBuilder) SALOMEDS_Study::GetUseCaseBuilder()
611 SALOMEDSClient_UseCaseBuilder* aUB = NULL;
613 SALOMEDS::Locker lock;
615 Handle(SALOMEDSImpl_UseCaseBuilder) aUBimpl = _local_impl->GetUseCaseBuilder();
616 aUB = new SALOMEDS_UseCaseBuilder(aUBimpl);
619 SALOMEDS::UseCaseBuilder_var aUBimpl = _corba_impl->GetUseCaseBuilder();
620 aUB = new SALOMEDS_UseCaseBuilder(aUBimpl);
623 return _PTR(UseCaseBuilder)(aUB);
626 void SALOMEDS_Study::Close()
629 SALOMEDS::Locker lock;
630 _local_impl->Close();
632 else _corba_impl->Close();
635 void SALOMEDS_Study::EnableUseCaseAutoFilling(bool isEnabled)
637 if(_isLocal) _local_impl->EnableUseCaseAutoFilling(isEnabled);
638 else _corba_impl->EnableUseCaseAutoFilling(isEnabled);
641 bool SALOMEDS_Study::DumpStudy(const string& thePath, const string& theBaseName, bool isPublished)
643 //SRN: Pure CORBA DumpStudy as it does more cleaning than the local one
644 if(CORBA::is_nil(_corba_impl)) GetStudy(); //If CORBA implementation is null then retrieve it
645 bool ret = _corba_impl->DumpStudy(thePath.c_str(), theBaseName.c_str(), isPublished);
649 void SALOMEDS_Study::SetStudyLock(const string& theLockerID)
652 SALOMEDS::Locker lock;
653 _local_impl->SetStudyLock((char*)theLockerID.c_str());
655 else _corba_impl->SetStudyLock((char*)theLockerID.c_str());
658 bool SALOMEDS_Study::IsStudyLocked()
662 SALOMEDS::Locker lock;
663 isLocked = _local_impl->IsStudyLocked();
665 else isLocked = _corba_impl->IsStudyLocked();
669 void SALOMEDS_Study::UnLockStudy(const string& theLockerID)
671 if(_isLocal) _local_impl->UnLockStudy((char*)theLockerID.c_str());
672 else _corba_impl->UnLockStudy((char*)theLockerID.c_str());
675 vector<string> SALOMEDS_Study::GetLockerID()
677 std::vector<std::string> aVector;
680 SALOMEDS::Locker lock;
682 Handle(TColStd_HSequenceOfAsciiString) aSeq = _local_impl->GetLockerID();
683 aLength = aSeq->Length();
684 for (i = 1; i <= aLength; i++) aVector.push_back(aSeq->Value(i).ToCString());
687 SALOMEDS::ListOfStrings_var aSeq = _corba_impl->GetLockerID();
688 aLength = aSeq->length();
689 for (i = 0; i < aLength; i++) aVector.push_back((char*)aSeq[i].in());
694 std::string SALOMEDS_Study::ConvertObjectToIOR(CORBA::Object_ptr theObject)
696 CORBA::String_var objStr = _orb->object_to_string(theObject);
697 return string( objStr.in() );
700 CORBA::Object_ptr SALOMEDS_Study::ConvertIORToObject(const std::string& theIOR)
702 return _orb->string_to_object(theIOR.c_str());
705 void SALOMEDS_Study::init_orb()
707 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
708 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
709 _orb = init(0 , 0 ) ;
712 SALOMEDS::Study_ptr SALOMEDS_Study::GetStudy()
715 SALOMEDS::Locker lock;
717 if (!CORBA::is_nil(_corba_impl)) return SALOMEDS::Study::_duplicate(_corba_impl);
718 std::string anIOR = _local_impl->GetTransientReference().ToCString();
719 SALOMEDS::Study_var aStudy;
720 if (!_local_impl->IsError() && anIOR != "") {
721 aStudy = SALOMEDS::Study::_narrow(_orb->string_to_object(anIOR.c_str()));
724 SALOMEDS_Study_i *aStudy_servant = new SALOMEDS_Study_i(_local_impl, _orb);
725 aStudy = aStudy_servant->_this();
726 _local_impl->SetTransientReference(_orb->object_to_string(aStudy));
728 _corba_impl = SALOMEDS::Study::_duplicate(aStudy);
729 return aStudy._retn();
732 return SALOMEDS::Study::_duplicate(_corba_impl);
735 return SALOMEDS::Study::_nil();
739 _PTR(AttributeParameter) SALOMEDS_Study::GetCommonParameters(const string& theID, int theSavePoint)
741 SALOMEDSClient_AttributeParameter* AP = NULL;
742 if(theSavePoint >= 0) {
744 SALOMEDS::Locker lock;
745 AP = new SALOMEDS_AttributeParameter(_local_impl->GetCommonParameters(theID.c_str(), theSavePoint));
748 AP = new SALOMEDS_AttributeParameter(_corba_impl->GetCommonParameters(theID.c_str(), theSavePoint));
751 return _PTR(AttributeParameter)(AP);
754 _PTR(AttributeParameter) SALOMEDS_Study::GetModuleParameters(const string& theID,
755 const string& theModuleName, int theSavePoint)
757 SALOMEDSClient_AttributeParameter* AP = NULL;
758 if(theSavePoint > 0) {
760 SALOMEDS::Locker lock;
761 AP = new SALOMEDS_AttributeParameter(_local_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint));
764 AP = new SALOMEDS_AttributeParameter(_corba_impl->GetModuleParameters(theID.c_str(), theModuleName.c_str(), theSavePoint));
767 return _PTR(AttributeParameter)(AP);