#include "SALOMEDS_SComponent_i.hxx"
#include "SALOMEDS_Study_i.hxx"
#include "SALOMEDS.hxx"
+#include <SALOMEDSImpl_IParameters.hxx>
#include <stdlib.h>
+#include CORBA_CLIENT_HEADER(SALOME_Session)
+
SALOMEDS_Driver_i::SALOMEDS_Driver_i(Engines::EngineComponent_ptr theEngine, CORBA::ORB_ptr theORB)
{
// engine should not be null - component is supposed to be inherited from Engines::EngineComponent
if ( !CORBA::is_nil(_driver) ) {
CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), IORString.c_str(),
isMultiFile, isASCII);
- pstr = pers_string;
+ if ( pers_string.in() )
+ pstr = pers_string;
}
so->UnRegister();
SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByType(const std::string& theComponentType)
{
- CORBA::Object_var obj;
- std::string aFactoryType;
- if (theComponentType == "SUPERV") aFactoryType = "SuperVisionContainer";
- else aFactoryType = "FactoryServer";
+ if ( theComponentType == SALOMEDSImpl_IParameters::getDefaultVisualComponent() )
+ return NULL; // skip the "Interface Applicative" component
- SALOMEDS::unlock();
- obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component(aFactoryType.c_str(), theComponentType.c_str());
- SALOMEDS::lock();
+ SALOMEDSImpl_Driver* driver = 0;
- if (CORBA::is_nil(obj)) {
- obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServer", theComponentType.c_str());
- }
+ CORBA::Object_var obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServer", theComponentType.c_str());
if (!CORBA::is_nil(obj)) {
Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj);
- return new SALOMEDS_Driver_i(anEngine, _orb);
+ driver = new SALOMEDS_Driver_i(anEngine, _orb);
+ }
+ else {
+ // It can be "light" module
+ obj = _name_service->Resolve("/Kernel/Session");
+ if (!CORBA::is_nil(obj)) {
+ SALOME::Session_var session = SALOME::Session::_narrow(obj);
+ if (!CORBA::is_nil(session)) {
+ Engines::EngineComponent_var anEngine = session->GetComponent(theComponentType.c_str());
+ if (!CORBA::is_nil(anEngine))
+ driver = new SALOMEDS_Driver_i(anEngine, _orb);
+ }
+ }
}
- return NULL;
+ return driver;
}
SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByIOR(const std::string& theIOR)