1 #include "SALOMEDSClient_ClientFactory.hxx"
5 static HMODULE _libHandle = 0;
6 #define SALOMEDS_LIB_NAME "SalomeDS.dll"
9 static void* _libHandle = NULL;
10 #define SALOMEDS_LIB_NAME "libSalomeDS.so"
13 #define SOBJECT_FACTORY "SObjectFactory"
14 #define SCOMPONENT_FACTORY "SComponentFactory"
15 #define STUDY_FACTORY "StudyFactory"
16 #define BUILDER_FACTORY "BuilderFactory"
17 #define STUDYMANAGER_FACTORY "StudyManagerFactory"
18 #define STUDYMANAGER_CREATE "CreateStudyManager"
19 #define GET_PARAMETERS "GetIParameters"
20 #define CONVERT_SOBJECT "ConvertSObject"
21 #define CONVERT_STUDY "ConvertStudy"
22 #define CONVERT_BUILDER "ConvertBuilder"
24 typedef SALOMEDSClient_SObject* (*SOBJECT_FACTORY_FUNCTION) (SALOMEDS::SObject_ptr);
25 typedef SALOMEDSClient_SComponent* (*SCOMPONENT_FACTORY_FUNCTION) (SALOMEDS::SComponent_ptr);
26 typedef SALOMEDSClient_Study* (*STUDY_FACTORY_FUNCTION) (SALOMEDS::Study_ptr);
27 typedef SALOMEDSClient_StudyManager* (*STUDYMANAGER_FACTORY_FUNCTION) ();
28 typedef SALOMEDSClient_StudyBuilder* (*BUILDER_FACTORY_FUNCTION) (SALOMEDS::StudyBuilder_ptr);
29 typedef SALOMEDSClient_StudyManager* (*STUDYMANAGER_CREATE_FUNCTION) (CORBA::ORB_ptr, PortableServer::POA_ptr);
30 typedef SALOMEDSClient_IParameters* (*GET_PARAMETERS_FACTORY) (const _PTR(AttributeParameter)&);
31 typedef SALOMEDS::SObject_ptr (*CONVERT_SOBJECT_FUNCTION) (const _PTR(SObject)&);
32 typedef SALOMEDS::Study_ptr (*CONVERT_STUDY_FUNCTION) (const _PTR(Study)&);
33 typedef SALOMEDS::StudyBuilder_ptr (*CONVERT_BUILDER_FUNCTION) (const _PTR(StudyBuilder)&);
36 static SOBJECT_FACTORY_FUNCTION aSObjectFactory = NULL;
37 static SCOMPONENT_FACTORY_FUNCTION aSComponentFactory = NULL;
38 static STUDY_FACTORY_FUNCTION aStudyFactory = NULL;
39 static BUILDER_FACTORY_FUNCTION aBuilderFactory = NULL;
40 static STUDYMANAGER_FACTORY_FUNCTION aManagerFactory = NULL;
41 static STUDYMANAGER_CREATE_FUNCTION aCreateFactory = NULL;
42 static GET_PARAMETERS_FACTORY aGetIParameters = NULL;
43 static CONVERT_SOBJECT_FUNCTION aConvertSObject = NULL;
44 static CONVERT_STUDY_FUNCTION aConvertStudy = NULL;
45 static CONVERT_BUILDER_FUNCTION aConvertBuilder = NULL;
49 _PTR(SObject) ClientFactory::SObject(SALOMEDS::SObject_ptr theSObject)
51 SALOMEDSClient_SObject* so = NULL;
54 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
55 if(!aSObjectFactory) aSObjectFactory = (SOBJECT_FACTORY_FUNCTION)::GetProcAddress(_libHandle, SOBJECT_FACTORY);
57 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
58 if(!aSObjectFactory) aSObjectFactory = (SOBJECT_FACTORY_FUNCTION) dlsym(_libHandle, SOBJECT_FACTORY);
61 if(aSObjectFactory) so = aSObjectFactory(theSObject);
62 return _PTR(SObject)(so);
65 _PTR(SComponent) ClientFactory::SComponent(SALOMEDS::SComponent_ptr theSComponent)
67 SALOMEDSClient_SComponent* sco = NULL;
70 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
71 if(!aSComponentFactory) aSComponentFactory = (SCOMPONENT_FACTORY_FUNCTION)::GetProcAddress(_libHandle, SCOMPONENT_FACTORY);
73 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
74 if(!aSComponentFactory) aSComponentFactory = (SCOMPONENT_FACTORY_FUNCTION) dlsym(_libHandle, SCOMPONENT_FACTORY);
77 if(aSComponentFactory) sco = aSComponentFactory(theSComponent);
78 return _PTR(SComponent)(sco);
81 _PTR(Study) ClientFactory::Study(SALOMEDS::Study_ptr theStudy)
83 SALOMEDSClient_Study* study = NULL;
86 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
87 if(!aStudyFactory) aStudyFactory = (STUDY_FACTORY_FUNCTION)::GetProcAddress(_libHandle, STUDY_FACTORY);
89 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
90 if(!aStudyFactory) aStudyFactory = (STUDY_FACTORY_FUNCTION) dlsym(_libHandle, STUDY_FACTORY);
93 if(aStudyFactory) study = aStudyFactory(theStudy);
94 return _PTR(Study)(study);
97 _PTR(StudyBuilder) ClientFactory::StudyBuilder(SALOMEDS::StudyBuilder_ptr theStudyBuilder)
99 SALOMEDSClient_StudyBuilder* studyBuilder = NULL;
102 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
103 if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION)::GetProcAddress(_libHandle, BUILDER_FACTORY);
105 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
106 if(!aBuilderFactory) aBuilderFactory = (BUILDER_FACTORY_FUNCTION) dlsym(_libHandle, BUILDER_FACTORY);
109 if(aBuilderFactory) studyBuilder = aBuilderFactory(theStudyBuilder);
110 return _PTR(StudyBuilder)(studyBuilder);
113 _PTR(StudyManager) ClientFactory::StudyManager()
115 SALOMEDSClient_StudyManager* manager = NULL;
118 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
119 if(!aManagerFactory) aManagerFactory = (STUDYMANAGER_FACTORY_FUNCTION)::GetProcAddress(_libHandle, STUDYMANAGER_FACTORY);
121 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
122 if(!aManagerFactory) aManagerFactory = (STUDYMANAGER_FACTORY_FUNCTION) dlsym(_libHandle, STUDYMANAGER_FACTORY);
125 if(aManagerFactory) manager = aManagerFactory();
126 return _PTR(StudyManager)(manager);
129 _PTR(StudyManager) ClientFactory::createStudyManager(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa)
131 SALOMEDSClient_StudyManager* manager = NULL;
134 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
135 if(!aCreateFactory) aCreateFactory = (STUDYMANAGER_CREATE_FUNCTION)::GetProcAddress(_libHandle, STUDYMANAGER_CREATE);
137 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
138 if(!aCreateFactory) aCreateFactory = (STUDYMANAGER_CREATE_FUNCTION) dlsym(_libHandle, STUDYMANAGER_CREATE);
141 if(aCreateFactory) manager = aCreateFactory(orb, poa);
142 return _PTR(StudyManager)(manager);
145 _PTR(IParameters) ClientFactory::getIParameters(const _PTR(AttributeParameter)& ap)
147 SALOMEDSClient_IParameters* interface = NULL;
150 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
151 if(!aGetIParameters) aGetIParameters = (GET_PARAMETERS_FACTORY)::GetProcAddress(_libHandle, GET_PARAMETERS);
153 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
154 if(!aGetIParameters) aGetIParameters = (GET_PARAMETERS_FACTORY) dlsym(_libHandle, GET_PARAMETERS);
157 if(aGetIParameters) interface = aGetIParameters(ap);
158 return _PTR(IParameters)(interface);
161 SALOMEDS::SObject_ptr ClientFactory::crbSObject(const _PTR(SObject)& theSObject)
163 SALOMEDS::SObject_var so;
166 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
167 if(!aConvertSObject) aConvertSObject = (CONVERT_SOBJECT_FUNCTION)::GetProcAddress(_libHandle, CONVERT_SOBJECT);
169 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
170 if(!aConvertSObject) aConvertSObject = (CONVERT_SOBJECT_FUNCTION) dlsym(_libHandle, CONVERT_SOBJECT);
173 if(aConvertSObject) so = aConvertSObject(theSObject);
175 if(CORBA::is_nil(so)) return SALOMEDS::SObject::_nil();
180 SALOMEDS::Study_ptr ClientFactory::crbStudy(const _PTR(Study)& theStudy)
182 SALOMEDS::Study_var study;
185 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
186 if(!aConvertStudy) aConvertStudy = (CONVERT_STUDY_FUNCTION)::GetProcAddress(_libHandle, CONVERT_STUDY);
188 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
189 if(!aConvertStudy) aConvertStudy = (CONVERT_STUDY_FUNCTION) dlsym(_libHandle, CONVERT_STUDY);
192 if(aConvertStudy) study = aConvertStudy(theStudy);
194 if(CORBA::is_nil(study)) return SALOMEDS::Study::_nil();
195 return study._retn();
198 SALOMEDS::StudyBuilder_ptr ClientFactory::crbStudyBuilder(const _PTR(StudyBuilder)& theStudyBuilder)
200 SALOMEDS::StudyBuilder_var studyBuilder;
203 if(!_libHandle) _libHandle = ::LoadLibrary(SALOMEDS_LIB_NAME);
204 if(!aConvertBuilder)aConvertBuilder = (CONVERT_BUILDER_FUNCTION)::GetProcAddress(_libHandle, CONVERT_BUILDER);
206 if(!_libHandle) _libHandle = dlopen(SALOMEDS_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
207 if(!aConvertBuilder) aConvertBuilder = (CONVERT_BUILDER_FUNCTION) dlsym(_libHandle, CONVERT_BUILDER);
210 if(aConvertBuilder) studyBuilder = aConvertBuilder(theStudyBuilder);
212 if(CORBA::is_nil(studyBuilder)) return SALOMEDS::StudyBuilder::_nil();
213 return studyBuilder._retn();