//
#include "SALOMEDS.hxx"
#include "SALOMEDS_Study.hxx"
+#include "SALOMEDS_Study_i.hxx"
#include "SALOMEDS_StudyBuilder.hxx"
#include "SALOMEDS_SObject.hxx"
#include "SALOMEDS_SComponent.hxx"
return new SALOMEDS_StudyBuilder(theBuilder);
}
+ SALOMEDS_EXPORT
+ SALOMEDSClient_Study* CreateStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr root_poa)
+ {
+ SALOME_NamingService namingService(orb);
+ CORBA::Object_var obj = namingService.Resolve( "/Study" );
+ SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( obj );
+ SALOMEDS_Study_i* aStudy_i;
+ if( CORBA::is_nil(aStudy) ) {
+ aStudy_i = new SALOMEDS_Study_i(orb);
+
+ // 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();
+
+ //give ownership to the poa : the object will be deleted by the poa
+ aStudy_i->_remove_ref();
+ namingService.Register(aStudy.in(), "/Study");
+
+ // Assign the value of the IOR in the study->root
+ CORBA::String_var IORStudy = orb->object_to_string(aStudy);
+ aStudy_i->GetImpl()->SetTransientReference((char*)IORStudy.in());
+ }
+ return new SALOMEDS_Study(aStudy_i->GetImpl());
+ }
+
SALOMEDS_EXPORT
SALOMEDSClient_IParameters* GetIParameters(const _PTR(AttributeParameter)& ap)
{
#define SOBJECT_FACTORY "SObjectFactory"
#define SCOMPONENT_FACTORY "SComponentFactory"
#define STUDY_FACTORY "StudyFactory"
+#define STUDY_CREATE "CreateStudy"
#define BUILDER_FACTORY "BuilderFactory"
#define GET_PARAMETERS "GetIParameters"
#define CONVERT_SOBJECT "ConvertSObject"
typedef SALOMEDSClient_SObject* (*SOBJECT_FACTORY_FUNCTION) (SALOMEDS::SObject_ptr);
typedef SALOMEDSClient_SComponent* (*SCOMPONENT_FACTORY_FUNCTION) (SALOMEDS::SComponent_ptr);
typedef SALOMEDSClient_Study* (*STUDY_FACTORY_FUNCTION) (SALOMEDS::Study_ptr);
+typedef SALOMEDSClient_Study* (*STUDY_CREATE_FUNCTION) (CORBA::ORB_ptr, PortableServer::POA_ptr);
typedef SALOMEDSClient_StudyBuilder* (*BUILDER_FACTORY_FUNCTION) (SALOMEDS::StudyBuilder_ptr);
typedef SALOMEDSClient_IParameters* (*GET_PARAMETERS_FACTORY) (const _PTR(AttributeParameter)&);
typedef SALOMEDS::SObject_ptr (*CONVERT_SOBJECT_FUNCTION) (const _PTR(SObject)&);
static SOBJECT_FACTORY_FUNCTION aSObjectFactory = NULL;
static SCOMPONENT_FACTORY_FUNCTION aSComponentFactory = NULL;
static STUDY_FACTORY_FUNCTION aStudyFactory = NULL;
+static STUDY_CREATE_FUNCTION aCreateFactory = NULL;
static BUILDER_FACTORY_FUNCTION aBuilderFactory = NULL;
static GET_PARAMETERS_FACTORY aGetIParameters = NULL;
static CONVERT_SOBJECT_FUNCTION aConvertSObject = NULL;
return _PTR(Study)(study);
}
+_PTR(Study) ClientFactory::createStudy(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
+{
+ SALOMEDSClient_Study* study = NULL;
+#ifdef WIN32
+ if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
+ if(!aCreateFactory) aCreateFactory = (STUDY_CREATE_FUNCTION)::GetProcAddress(_libHandle, STUDY_CREATE);
+#else
+ if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
+ if(!aCreateFactory) aCreateFactory = (STUDY_CREATE_FUNCTION) dlsym(_libHandle, STUDY_CREATE);
+#endif
+
+ if(aCreateFactory) study = aCreateFactory(orb, poa);
+ return _PTR(Study)(study);
+}
+
_PTR(StudyBuilder) ClientFactory::StudyBuilder(SALOMEDS::StudyBuilder_ptr theStudyBuilder)
{
SALOMEDSClient_StudyBuilder* studyBuilder = NULL;