-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// 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.
+// 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
#include "SALOMEDS_SComponent_i.hxx"
#include "SALOMEDS_Study_i.hxx"
#include "SALOMEDS.hxx"
+#include <SALOMEDSImpl_IParameters.hxx>
#include <stdlib.h>
-SALOMEDS_Driver_i::SALOMEDS_Driver_i(Engines::EngineComponent_ptr theEngine, CORBA::ORB_ptr theORB)
+#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
_engine = Engines::EngineComponent::_duplicate(theEngine);
// driver can be null - if component interface does not inherit SALOMEDS::Driver
_driver = SALOMEDS::Driver::_narrow(theEngine);
- _orb = CORBA::ORB::_duplicate(theORB);
+ _orb = CORBA::ORB::_duplicate(theORB);
}
SALOMEDS_Driver_i::SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, CORBA::ORB_ptr theORB)
_driver = SALOMEDS::Driver::_duplicate(theDriver);
// engine can be null - since it is narrowed from SALOMEDS::Driver ptr which can be null
_engine = Engines::EngineComponent::_narrow(theDriver);
- _orb = CORBA::ORB::_duplicate(theORB);
+ _orb = CORBA::ORB::_duplicate(theORB);
}
SALOMEDS_Driver_i::~SALOMEDS_Driver_i()
{
}
-std::string SALOMEDS_Driver_i::GetIOR()
+std::string SALOMEDS_Driver_i::GetIOR()
{
std::string ior = "";
if ( !CORBA::is_nil(_engine) ) {
const std::string& theURL,
long& theStreamLength,
bool isMultiFile)
-{
+{
SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
CORBA::String_var url = CORBA::string_dup(theURL.c_str());
return aTMPFile;
}
-
+
bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent,
const unsigned char* theStream,
const long theStreamLength,
CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
SALOMEDS::TMPFile_var aStream;
- if (theStreamLength > 0)
- aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
- else
+ if (theStreamLength > 0)
+ aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
+ else
aStream = new SALOMEDS::TMPFile(0);
SALOMEDS::unlock();
CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
SALOMEDS::TMPFile_var aStream;
- if(theStreamLength > 0)
- aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
- else
+ if(theStreamLength > 0)
+ aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
+ else
aStream = new SALOMEDS::TMPFile(0);
SALOMEDS::unlock();
SALOMEDS::lock();
}
-std::string SALOMEDS_Driver_i::ComponentDataType()
+std::string SALOMEDS_Driver_i::ComponentDataType()
{
std::string dtype = "";
if ( !CORBA::is_nil(_driver) ) {
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_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject,
+SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject,
int& theObjectID,
long& theStreamLength)
{
CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
SALOMEDS::TMPFile_var aStream;
- if(theStreamLength > 0)
- aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
- else
+ if(theStreamLength > 0)
+ aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
+ else
aStream = new SALOMEDS::TMPFile(0);
SALOMEDS::unlock();
return entry;
}
-SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy,
- bool isPublished,
+SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy,
+ bool isPublished,
bool isMultiFile,
bool& isValidScript,
long& theStreamLength)
// SALOMEDS_DriverFactory
//###############################################################################################################
-SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB)
+SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB)
{
_orb = CORBA::ORB::_duplicate(theORB);
_name_service = new SALOME_NamingService(_orb);
}
-SALOMEDS_DriverFactory_i::~SALOMEDS_DriverFactory_i()
+SALOMEDS_DriverFactory_i::~SALOMEDS_DriverFactory_i()
{
delete _name_service;
}
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("FactoryServerPy", 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)
{
CORBA::Object_var obj;
obj = _orb->string_to_object(theIOR.c_str());
-
+
if (!CORBA::is_nil(obj)) {
Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj);
return new SALOMEDS_Driver_i(anEngine, _orb);