X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOMEDS%2FSALOMEDS.cxx;h=bd1c112b66994138de24829834008ef9ef675000;hb=b741d9021836f43ec742959b06b0941e1a1da7c9;hp=2432e74d93908576e8c2c33cb05321ad19df1220;hpb=288dc1c84630e521220d796b7c88c518f34856d5;p=modules%2Fkernel.git diff --git a/src/SALOMEDS/SALOMEDS.cxx b/src/SALOMEDS/SALOMEDS.cxx index 2432e74d9..bd1c112b6 100644 --- a/src/SALOMEDS/SALOMEDS.cxx +++ b/src/SALOMEDS/SALOMEDS.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 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 @@ -6,7 +6,7 @@ // 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. +// 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 @@ -27,18 +27,20 @@ // $Header$ // #include "SALOMEDS.hxx" -#include "SALOMEDS_StudyManager.hxx" #include "SALOMEDS_Study.hxx" +#include "SALOMEDS_Study_i.hxx" #include "SALOMEDS_StudyBuilder.hxx" #include "SALOMEDS_SObject.hxx" #include "SALOMEDS_SComponent.hxx" #include "SALOMEDSClient.hxx" #include "SALOMEDSClient_IParameters.hxx" #include "SALOMEDS_IParameters.hxx" -#include "SALOMEDS_StudyManager_i.hxx" +#include "SALOME_Fake_NamingService.hxx" #include "SALOMEDS_Defines.hxx" +#include + // IDL headers #include #include CORBA_SERVER_HEADER(SALOMEDS) @@ -62,12 +64,10 @@ void SALOMEDS::lock() void SALOMEDS::unlock() { - SALOMEDS::Locker::MutexDS.unlock(); + SALOMEDS::Locker::MutexDS.unlock(); } - - -// srn: Added new library methods that create basic SALOMEDS objects (StudyManager, Study, SComponent, SObject) +// srn: Added new library methods that create basic SALOMEDS objects (Study, SComponent, SObject) //============================================================================= /*! @@ -78,86 +78,99 @@ void SALOMEDS::unlock() extern "C" { -SALOMEDS_EXPORT - SALOMEDSClient_StudyManager* StudyManagerFactory() -{ - return new SALOMEDS_StudyManager(); -} -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDSClient_Study* StudyFactory(SALOMEDS::Study_ptr theStudy) -{ - if(CORBA::is_nil(theStudy)) return NULL; - return new SALOMEDS_Study(theStudy); -} + { + if(CORBA::is_nil(theStudy)) return NULL; + return new SALOMEDS_Study(theStudy); + } -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDSClient_SObject* SObjectFactory(SALOMEDS::SObject_ptr theSObject) -{ - if(CORBA::is_nil(theSObject)) return NULL; - return new SALOMEDS_SObject(theSObject); -} + { + if(CORBA::is_nil(theSObject)) return NULL; + return new SALOMEDS_SObject(theSObject); + } -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDSClient_SComponent* SComponentFactory(SALOMEDS::SComponent_ptr theSComponent) -{ - if(CORBA::is_nil(theSComponent)) return NULL; - return new SALOMEDS_SComponent(theSComponent); -} + { + if(CORBA::is_nil(theSComponent)) return NULL; + return new SALOMEDS_SComponent(theSComponent); + } -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDSClient_StudyBuilder* BuilderFactory(SALOMEDS::StudyBuilder_ptr theBuilder) -{ - if(CORBA::is_nil(theBuilder)) return NULL; - return new SALOMEDS_StudyBuilder(theBuilder); -} + { + if(CORBA::is_nil(theBuilder)) return NULL; + return new SALOMEDS_StudyBuilder(theBuilder); + } -SALOMEDS_EXPORT - SALOMEDSClient_StudyManager* CreateStudyManager(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa) -{ - SALOME_NamingService namingService(orb); - CORBA::Object_var obj = namingService.Resolve( "/myStudyManager" ); - SALOMEDS::StudyManager_var theManager = SALOMEDS::StudyManager::_narrow( obj ); - if( CORBA::is_nil(theManager) ) { - SALOMEDS_StudyManager_i * aStudyManager_i = new SALOMEDS_StudyManager_i(orb, root_poa); - // Activate the objects. This tells the POA that the objects are ready to accept requests. - PortableServer::ObjectId_var aStudyManager_iid = root_poa->activate_object(aStudyManager_i); - //give ownership to the poa : the object will be deleted by the poa - aStudyManager_i->_remove_ref(); - aStudyManager_i->register_name((char*)"/myStudyManager"); + void CreateStudyNSAbstract(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa, SALOME_NamingService_Abstract& namingService) + { + CORBA::Object_var obj = namingService.Resolve( "/Study" ); + SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( obj ); + if( CORBA::is_nil(aStudy) ) { + PortableServer::POAManager_var pman = root_poa->the_POAManager(); + CORBA::PolicyList policies; + policies.length(2); + //PortableServer::ThreadPolicy_var threadPol(root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL)); + PortableServer::ThreadPolicy_var threadPol(root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL)); + PortableServer::ImplicitActivationPolicy_var implicitPol(root_poa->create_implicit_activation_policy(PortableServer::IMPLICIT_ACTIVATION)); + policies[0] = PortableServer::ThreadPolicy::_duplicate(threadPol); + policies[1] = PortableServer::ImplicitActivationPolicy::_duplicate(implicitPol); + PortableServer::POA_var poa = root_poa->create_POA("KERNELStudySingleThreadPOA",pman,policies); + MESSAGE("CreateStudy: KERNELStudySingleThreadPOA: "<< poa); + threadPol->destroy(); + + SALOMEDS_Study_i::SetThePOA(poa); + SALOMEDS_Study_i* aStudy_i = new SALOMEDS_Study_i(orb,&namingService); + + // Activate the objects. This tells the POA that the objects are ready to accept requests. + PortableServer::ObjectId_var aStudy_iid = root_poa->activate_object(aStudy_i); + aStudy = aStudy_i->_this(); + KERNEL::setStudyServantSA(aStudy,poa); + namingService.Register(aStudy, "/Study"); + aStudy_i->GetImpl()->GetDocument()->SetModified(false); + aStudy_i->_remove_ref(); + } } - return new SALOMEDS_StudyManager(); -} -SALOMEDS_EXPORT + SALOMEDS_EXPORT + void CreateStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa) + { + SALOME_NamingService namingService(orb); + CreateStudyNSAbstract(orb,root_poa,namingService); + } + + SALOMEDS_EXPORT + void CreateStudyWithoutNS(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa) + { + SALOME_Fake_NamingService namingService(orb); + CreateStudyNSAbstract(orb,root_poa,namingService); + } + + SALOMEDS_EXPORT SALOMEDSClient_IParameters* GetIParameters(const _PTR(AttributeParameter)& ap) -{ - return new SALOMEDS_IParameters(ap); -} + { + return new SALOMEDS_IParameters(ap); + } -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDS::SObject_ptr ConvertSObject(const _PTR(SObject)& theSObject) -{ - - SALOMEDS_SObject* so = _CAST(SObject, theSObject); - if(!theSObject || !so) return SALOMEDS::SObject::_nil(); - return so->GetSObject(); -} - -SALOMEDS_EXPORT - SALOMEDS::Study_ptr ConvertStudy(const _PTR(Study)& theStudy) -{ - SALOMEDS_Study* study = _CAST(Study, theStudy); - if(!theStudy || !study) return SALOMEDS::Study::_nil(); - return study->GetStudy(); -} + { + SALOMEDS_SObject* so = _CAST(SObject, theSObject); + if ( !theSObject || !so ) + return SALOMEDS::SObject::_nil(); + return so->GetSObject(); + } -SALOMEDS_EXPORT + SALOMEDS_EXPORT SALOMEDS::StudyBuilder_ptr ConvertBuilder(const _PTR(StudyBuilder)& theBuilder) -{ - SALOMEDS_StudyBuilder* builder = _CAST(StudyBuilder, theBuilder); - if(!theBuilder || !builder) return SALOMEDS::StudyBuilder::_nil(); - return builder->GetBuilder(); -} - - + { + SALOMEDS_StudyBuilder* builder = _CAST(StudyBuilder, theBuilder); + if ( !theBuilder || !builder ) + return SALOMEDS::StudyBuilder::_nil(); + return builder->GetBuilder(); + } }