X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOMEDS%2FSALOMEDS_SObject.cxx;h=ff21b6c8e210cec01c5b80ccd4ac0b1d3a44e3ac;hb=a63265d524e8436588a7bb82147a69812c153b1b;hp=9affb5f385eca58b8b8868d6ae58ac497947788e;hpb=e6bfea36374791cd31c274a2f97df90dc60ddaf3;p=modules%2Fyacs.git diff --git a/src/SALOMEDS/SALOMEDS_SObject.cxx b/src/SALOMEDS/SALOMEDS_SObject.cxx index 9affb5f38..ff21b6c8e 100644 --- a/src/SALOMEDS/SALOMEDS_SObject.cxx +++ b/src/SALOMEDS/SALOMEDS_SObject.cxx @@ -1,31 +1,30 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // File : SALOMEDS_SObject.hxx // Author : Sergey RUIN // Module : SALOME - - - +// #include -#include -#include #include "SALOMEDS_SObject.hxx" @@ -42,17 +41,18 @@ #include "Utils_ORB_INIT.hxx" #include "Utils_SINGLETON.hxx" +#include "Basics_Utils.hxx" + +#include "utilities.h" + #ifdef WIN32 +#include #include #else #include #include #endif -#include "OpUtil.hxx" -#include "utilities.h" - -using namespace std; SALOMEDS_SObject::SALOMEDS_SObject(SALOMEDS::SObject_ptr theSObject) { @@ -62,9 +62,11 @@ SALOMEDS_SObject::SALOMEDS_SObject(SALOMEDS::SObject_ptr theSObject) long pid = (long)getpid(); #endif - long addr = theSObject->GetLocalImpl(GetHostname().c_str(), pid, _isLocal); + CORBA::LongLong addr = // mpv: fix for IPAL13534: for 64-bit platforms use 8-bytes long for pointer storage + theSObject->GetLocalImpl(Kernel_Utils::GetHostname().c_str(), pid, _isLocal); + if(_isLocal) { - _local_impl = ((SALOMEDSImpl_SObject*)(addr)); + _local_impl = reinterpret_cast(addr); _corba_impl = SALOMEDS::SObject::_duplicate(theSObject); } else { @@ -75,11 +77,18 @@ SALOMEDS_SObject::SALOMEDS_SObject(SALOMEDS::SObject_ptr theSObject) init_orb(); } -SALOMEDS_SObject::SALOMEDS_SObject(const Handle(SALOMEDSImpl_SObject)& theSObject) +SALOMEDS_SObject::SALOMEDS_SObject(const SALOMEDSImpl_SObject& theSObject) :_isLocal(true) { _corba_impl = SALOMEDS::SObject::_nil(); - _local_impl = theSObject; + + if(theSObject.IsComponent()) { + SALOMEDSImpl_SComponent sco = theSObject; + _local_impl = sco.GetPersistentCopy(); + } + else { + _local_impl = theSObject.GetPersistentCopy(); + } init_orb(); } @@ -87,18 +96,26 @@ SALOMEDS_SObject::SALOMEDS_SObject(const Handle(SALOMEDSImpl_SObject)& theSObjec SALOMEDS_SObject::~SALOMEDS_SObject() { if (!_isLocal) { - _corba_impl->Destroy(); + _corba_impl->UnRegister(); + } + else { + if(_local_impl) delete _local_impl; } } +bool SALOMEDS_SObject::IsNull() const +{ + return _isLocal ? ( !_local_impl || _local_impl->IsNull() ) : _corba_impl->IsNull(); +} + std::string SALOMEDS_SObject::GetID() { std::string aValue; if (_isLocal) { SALOMEDS::Locker lock; - aValue = _local_impl->GetID().ToCString(); + aValue = _local_impl->GetID(); } - else aValue = _corba_impl->GetID(); + else aValue = (CORBA::String_var)_corba_impl->GetID(); return aValue; } @@ -106,11 +123,9 @@ _PTR(SComponent) SALOMEDS_SObject::GetFatherComponent() { if (_isLocal) { SALOMEDS::Locker lock; - Handle(SALOMEDSImpl_SComponent) aSCO = - Handle(SALOMEDSImpl_SComponent)::DownCast(_local_impl->GetFatherComponent()); - return _PTR(SComponent)(new SALOMEDS_SComponent(aSCO)); + return _PTR(SComponent)(new SALOMEDS_SComponent(_local_impl->GetFatherComponent())); } - return _PTR(SComponent)(new SALOMEDS_SComponent(_corba_impl->GetFatherComponent())); + return _PTR(SComponent)(new SALOMEDS_SComponent((SALOMEDS::SComponent_var)_corba_impl->GetFatherComponent())); } _PTR(SObject) SALOMEDS_SObject::GetFather() @@ -119,7 +134,7 @@ _PTR(SObject) SALOMEDS_SObject::GetFather() SALOMEDS::Locker lock; return _PTR(SObject)(new SALOMEDS_SObject(_local_impl->GetFather())); } - return _PTR(SObject)(new SALOMEDS_SObject(_corba_impl->GetFather())); + return _PTR(SObject)(new SALOMEDS_SObject((SALOMEDS::SObject_var)_corba_impl->GetFather())); } bool SALOMEDS_SObject::FindAttribute(_PTR(GenericAttribute)& anAttribute, @@ -128,9 +143,12 @@ bool SALOMEDS_SObject::FindAttribute(_PTR(GenericAttribute)& anAttribute, bool ret = false; if (_isLocal) { SALOMEDS::Locker lock; - Handle(SALOMEDSImpl_GenericAttribute) anAttr; - ret = _local_impl->FindAttribute(anAttr, (char*)aTypeOfAttribute.c_str()); - if(ret) anAttribute = _PTR(GenericAttribute)(SALOMEDS_GenericAttribute::CreateAttribute(anAttr)); + DF_Attribute* anAttr = NULL; + ret = _local_impl->FindAttribute(anAttr, aTypeOfAttribute); + if(ret) { + SALOMEDSImpl_GenericAttribute* ga = dynamic_cast(anAttr); + anAttribute = _PTR(GenericAttribute)(SALOMEDS_GenericAttribute::CreateAttribute(ga)); + } } else { SALOMEDS::GenericAttribute_var anAttr; @@ -146,7 +164,7 @@ bool SALOMEDS_SObject::ReferencedObject(_PTR(SObject)& theObject) bool ret = false; if (_isLocal) { SALOMEDS::Locker lock; - Handle(SALOMEDSImpl_SObject) aSO; + SALOMEDSImpl_SObject aSO; ret = _local_impl->ReferencedObject(aSO); if(ret) theObject = _PTR(SObject)(new SALOMEDS_SObject(aSO)); } @@ -165,7 +183,7 @@ bool SALOMEDS_SObject::FindSubObject(int theTag, _PTR(SObject)& theObject) bool ret = false; if (_isLocal) { SALOMEDS::Locker lock; - Handle(SALOMEDSImpl_SObject) aSO; + SALOMEDSImpl_SObject aSO; ret = _local_impl->FindSubObject(theTag, aSO); if(ret) theObject = _PTR(SObject)(new SALOMEDS_SObject(aSO)); } @@ -184,7 +202,8 @@ _PTR(Study) SALOMEDS_SObject::GetStudy() SALOMEDS::Locker lock; return _PTR(Study)(new SALOMEDS_Study(_local_impl->GetStudy())); } - return _PTR(Study)(new SALOMEDS_Study(_corba_impl->GetStudy())); + SALOMEDS::Study_var study=_corba_impl->GetStudy(); + return _PTR(Study)(new SALOMEDS_Study(study)); } std::string SALOMEDS_SObject::Name() @@ -192,9 +211,9 @@ std::string SALOMEDS_SObject::Name() std::string aName; if (_isLocal) { SALOMEDS::Locker lock; - aName = _local_impl->Name().ToCString(); + aName = _local_impl->Name(); } - else aName = _corba_impl->Name(); + else aName = (CORBA::String_var)_corba_impl->Name(); return aName; } @@ -203,24 +222,23 @@ void SALOMEDS_SObject::Name(const std::string& theName) { if (_isLocal) { SALOMEDS::Locker lock; - _local_impl->Name((char*)theName.c_str()); + _local_impl->Name(theName); } else _corba_impl->Name(theName.c_str()); } -vector<_PTR(GenericAttribute)> SALOMEDS_SObject::GetAllAttributes() +std::vector<_PTR(GenericAttribute)> SALOMEDS_SObject::GetAllAttributes() { - vector<_PTR(GenericAttribute)> aVector; + std::vector<_PTR(GenericAttribute)> aVector; int aLength = 0; SALOMEDSClient_GenericAttribute* anAttr; if (_isLocal) { SALOMEDS::Locker lock; - Handle(TColStd_HSequenceOfTransient) aSeq = _local_impl->GetAllAttributes(); - aLength = aSeq->Length(); - for (int i = 1; i <= aLength; i++) { - anAttr = SALOMEDS_GenericAttribute::CreateAttribute - (Handle(SALOMEDSImpl_GenericAttribute)::DownCast(aSeq->Value(i))); + std::vector aSeq = _local_impl->GetAllAttributes(); + aLength = aSeq.size(); + for (int i = 0; i < aLength; i++) { + anAttr = SALOMEDS_GenericAttribute::CreateAttribute(dynamic_cast(aSeq[i])); aVector.push_back(_PTR(GenericAttribute)(anAttr)); } } @@ -241,9 +259,9 @@ std::string SALOMEDS_SObject::GetName() std::string aName; if (_isLocal) { SALOMEDS::Locker lock; - aName = _local_impl->GetName().ToCString(); + aName = _local_impl->GetName(); } - else aName = _corba_impl->GetName(); + else aName = (CORBA::String_var) _corba_impl->GetName(); return aName; } @@ -253,9 +271,9 @@ std::string SALOMEDS_SObject::GetComment() std::string aComment; if (_isLocal) { SALOMEDS::Locker lock; - aComment = _local_impl->GetComment().ToCString(); + aComment = _local_impl->GetComment(); } - else aComment = _corba_impl->GetComment(); + else aComment = (CORBA::String_var) _corba_impl->GetComment(); return aComment; } @@ -265,9 +283,9 @@ std::string SALOMEDS_SObject::GetIOR() std::string anIOR; if (_isLocal) { SALOMEDS::Locker lock; - anIOR = _local_impl->GetIOR().ToCString(); + anIOR = _local_impl->GetIOR(); } - else anIOR = _corba_impl->GetIOR(); + else anIOR = (CORBA::String_var) _corba_impl->GetIOR(); return anIOR; } @@ -312,7 +330,7 @@ SALOMEDS::SObject_ptr SALOMEDS_SObject::GetSObject() { if(_isLocal) { if(!CORBA::is_nil(_corba_impl)) return SALOMEDS::SObject::_duplicate(_corba_impl); - SALOMEDS::SObject_var aSO = SALOMEDS_SObject_i::New(_local_impl, _orb); + SALOMEDS::SObject_var aSO = SALOMEDS_SObject_i::New(*_local_impl, _orb); _corba_impl = SALOMEDS::SObject::_duplicate(aSO); return aSO._retn(); } @@ -329,3 +347,16 @@ void SALOMEDS_SObject::init_orb() ASSERT(SINGLETON_::IsAlreadyExisting()); _orb = init(0 , 0 ) ; } + +void SALOMEDS_SObject::SetAttrString(const std::string& name, const std::string& value) +{ + if(_isLocal) + { + SALOMEDS::Locker lock; + _local_impl->SetAttrString(name,value); + } + else + { + _corba_impl->SetAttrString(name.c_str(),value.c_str()); + } +}