X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSALOMEDS%2FSALOMEDS_Driver_i.cxx;h=a5597708d55360c57223c485f13dfa8c23156dbf;hb=b741d9021836f43ec742959b06b0941e1a1da7c9;hp=87bdec277349f2cf3fca8e2fa92301ddf64da393;hpb=288dc1c84630e521220d796b7c88c518f34856d5;p=modules%2Fkernel.git diff --git a/src/SALOMEDS/SALOMEDS_Driver_i.cxx b/src/SALOMEDS/SALOMEDS_Driver_i.cxx index 87bdec277..a5597708d 100644 --- a/src/SALOMEDS/SALOMEDS_Driver_i.cxx +++ b/src/SALOMEDS/SALOMEDS_Driver_i.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,33 +27,49 @@ #include "SALOMEDS_SComponent_i.hxx" #include "SALOMEDS_Study_i.hxx" #include "SALOMEDS.hxx" +#include +#include #include -SALOMEDS_Driver_i::SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, 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); +} + +SALOMEDS_Driver_i::SALOMEDS_Driver_i(SALOMEDS::Driver_ptr theDriver, CORBA::ORB_ptr theORB) { + // driver can be null - if component interface does not inherit SALOMEDS::Driver _driver = SALOMEDS::Driver::_duplicate(theDriver); - _orb = CORBA::ORB::_duplicate(theORB); + // 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); } 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(_driver) ) { - CORBA::String_var cior = _orb->object_to_string(_driver); + if ( !CORBA::is_nil(_engine) ) { + CORBA::String_var cior = _orb->object_to_string(_engine); ior = cior; } return ior; } SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::Save(const SALOMEDSImpl_SComponent& theComponent, - const std::string& theURL, - long& theStreamLength, - bool isMultiFile) -{ + 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()); @@ -64,7 +80,9 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::Save(const SALOMEDSImpl_SComponent& the aStream = _driver->Save(sco.in(), url, isMultiFile); SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn()); - theStreamLength = aTMPFile->Size(); + theStreamLength = (long)aTMPFile->Size(); //!< TODO: conversion from size_t to long + + sco->UnRegister(); SALOMEDS::lock(); return aTMPFile; @@ -85,12 +103,14 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::SaveASCII(const SALOMEDSImpl_SComponent aStream = _driver->SaveASCII(sco.in(), url, isMultiFile); SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn()); - theStreamLength = aTMPFile->Size(); + theStreamLength = (long)aTMPFile->Size(); //!< TODO: conversion from size_t to long + + sco->UnRegister(); SALOMEDS::lock(); return aTMPFile; } - + bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent, const unsigned char* theStream, const long theStreamLength, @@ -102,9 +122,9 @@ bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent, 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(); @@ -113,6 +133,7 @@ bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent, if ( !CORBA::is_nil(_driver) ) isOk = _driver->Load(sco.in(), aStream.in(), url, isMultiFile); + sco->UnRegister(); SALOMEDS::lock(); return isOk; } @@ -128,9 +149,9 @@ bool SALOMEDS_Driver_i::LoadASCII(const SALOMEDSImpl_SComponent& theComponent, 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(); @@ -139,6 +160,7 @@ bool SALOMEDS_Driver_i::LoadASCII(const SALOMEDSImpl_SComponent& theComponent, if ( !CORBA::is_nil(_driver) ) isOk = _driver->LoadASCII(sco.in(), aStream.in(), url, isMultiFile); + sco->UnRegister(); SALOMEDS::lock(); return isOk; } @@ -150,10 +172,11 @@ void SALOMEDS_Driver_i::Close(const SALOMEDSImpl_SComponent& theComponent) SALOMEDS::unlock(); if ( !CORBA::is_nil(_driver) ) _driver->Close(sco.in()); + sco->UnRegister(); SALOMEDS::lock(); } -std::string SALOMEDS_Driver_i::ComponentDataType() +std::string SALOMEDS_Driver_i::ComponentDataType() { std::string dtype = ""; if ( !CORBA::is_nil(_driver) ) { @@ -163,23 +186,34 @@ std::string SALOMEDS_Driver_i::ComponentDataType() return dtype; } +std::string SALOMEDS_Driver_i::Version() +{ + std::string ver; + if ( !CORBA::is_nil( _engine )) { + CORBA::String_var v = _engine->getVersion(); + ver = v; + } + return ver; +} + std::string SALOMEDS_Driver_i::IORToLocalPersistentID(const SALOMEDSImpl_SObject& theSObject, - const std::string& IORString, - bool isMultiFile, - bool isASCII) + const std::string& IORString, + bool isMultiFile, + bool isASCII) { SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theSObject, _orb); - CORBA::String_var ior = CORBA::string_dup(IORString.c_str()); - SALOMEDS::unlock(); std::string pstr = ""; if ( !CORBA::is_nil(_driver) ) { - CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), ior.in(), isMultiFile, isASCII); - pstr = pers_string; + CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), IORString.c_str(), + isMultiFile, isASCII); + if ( pers_string.in() ) + pstr = pers_string; } + so->UnRegister(); SALOMEDS::lock(); return pstr; @@ -187,9 +221,9 @@ std::string SALOMEDS_Driver_i::IORToLocalPersistentID(const SALOMEDSImpl_SObject std::string SALOMEDS_Driver_i::LocalPersistentIDToIOR(const SALOMEDSImpl_SObject& theObject, - const std::string& aLocalPersistentID, - bool isMultiFile, - bool isASCII) + const std::string& aLocalPersistentID, + bool isMultiFile, + bool isASCII) { SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb); CORBA::String_var pers_string = CORBA::string_dup(aLocalPersistentID.c_str()); @@ -199,9 +233,10 @@ std::string SALOMEDS_Driver_i::LocalPersistentIDToIOR(const SALOMEDSImpl_SObject if ( !CORBA::is_nil(_driver) ) { CORBA::String_var IOR = _driver->LocalPersistentIDToIOR(so.in(), pers_string.in(), isMultiFile, isASCII); - ior = IOR; + if ( IOR.in() ) + ior = IOR; } - + so->UnRegister(); SALOMEDS::lock(); return ior; } @@ -223,7 +258,7 @@ bool SALOMEDS_Driver_i::CanCopy(const SALOMEDSImpl_SObject& theObject) } -SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject, +SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject, int& theObjectID, long& theStreamLength) { @@ -237,8 +272,10 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& th aStream = _driver->CopyFrom(so.in(), anObjectID); SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn()); - theStreamLength = aTMPFile->Size(); + theStreamLength = (long)aTMPFile->Size(); //!< TODO: conversion from size_t to long theObjectID = anObjectID; + + so->UnRegister(); SALOMEDS::lock(); return aTMPFile; @@ -257,17 +294,17 @@ bool SALOMEDS_Driver_i::CanPaste(const std::string& theComponentName, int theObj } std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream, - const long theStreamLength, - int theObjectID, - const SALOMEDSImpl_SObject& theObject) + const long theStreamLength, + int theObjectID, + const SALOMEDSImpl_SObject& theObject) { SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb); 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(); @@ -279,31 +316,27 @@ std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream, entry = ret_so->GetID(); } + so->UnRegister(); SALOMEDS::lock(); return entry; } -SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy, - bool isPublished, +SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(bool isPublished, bool isMultiFile, bool& isValidScript, long& theStreamLength) { - SALOMEDS_Study_i * st_servant = SALOMEDS_Study_i::GetStudyServant(theStudy, _orb);//new SALOMEDS_Study_i (theStudy, _orb); - SALOMEDS::Study_var st = SALOMEDS::Study::_narrow(st_servant->_this()); - SALOMEDS::unlock(); Engines::TMPFile_var aStream; CORBA::Boolean aValidScript = true; // VSR: maybe should be false by default ??? - Engines::EngineComponent_ptr aComponent = Engines::EngineComponent::_narrow(_driver); - if ( !CORBA::is_nil( aComponent ) ) - aStream = aComponent->DumpPython(st.in(), isPublished, isMultiFile, aValidScript); + if ( !CORBA::is_nil( _engine ) ) + aStream = _engine->DumpPython(isPublished, isMultiFile, aValidScript); SALOMEDSImpl_TMPFile* aTMPFile = new Engines_TMPFile_i(aStream._retn()); - theStreamLength = aTMPFile->Size(); + theStreamLength = (long)aTMPFile->Size(); //!< TODO: conversion from size_t to long isValidScript = aValidScript; SALOMEDS::lock(); @@ -315,50 +348,60 @@ SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy // SALOMEDS_DriverFactory //############################################################################################################### -SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB) +SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB, bool isNSAvail):_orb( CORBA::ORB::_duplicate(theORB) ) { - _orb = CORBA::ORB::_duplicate(theORB); - _name_service = new SALOME_NamingService(_orb); + if(isNSAvail) + _name_service = new SALOME_NamingService(_orb); } +SALOMEDS_DriverFactory_i::SALOMEDS_DriverFactory_i(CORBA::ORB_ptr theORB, SALOME_NamingService_Abstract *ns):_orb( CORBA::ORB::_duplicate(theORB) ) +{ + _name_service = ns->clone(); +} -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)) { - SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj); - return new SALOMEDS_Driver_i(aDriver, _orb); + Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj); + 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)) { - SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj); - return new SALOMEDS_Driver_i(aDriver, _orb); + Engines::EngineComponent_var anEngine = Engines::EngineComponent::_narrow(obj); + return new SALOMEDS_Driver_i(anEngine, _orb); } return NULL;