1 // Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "SALOMEDS_Driver_i.hxx"
23 #include "SALOMEDS_TMPFile_i.hxx"
24 #include "utilities.h"
25 #include "SALOMEDS_SObject_i.hxx"
26 #include "SALOMEDS_SComponent_i.hxx"
27 #include "SALOMEDS_Study_i.hxx"
28 #include "SALOMEDS.hxx"
31 SALOMEDS_Driver_i::~SALOMEDS_Driver_i()
35 SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::Save(const SALOMEDSImpl_SComponent& theComponent,
36 const std::string& theURL,
37 long& theStreamLength,
40 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
41 CORBA::String_var url = CORBA::string_dup(theURL.c_str());
44 SALOMEDS::TMPFile_var aStream = _driver->Save(sco.in(), url, isMultiFile);
45 SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn());
46 theStreamLength = aTMPFile->Size();
52 SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::SaveASCII(const SALOMEDSImpl_SComponent& theComponent,
53 const std::string& theURL,
54 long& theStreamLength,
57 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
58 CORBA::String_var url = CORBA::string_dup(theURL.c_str());
61 SALOMEDS::TMPFile_var aStream = _driver->SaveASCII(sco.in(), url, isMultiFile);
62 SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn());
63 theStreamLength = aTMPFile->Size();
69 bool SALOMEDS_Driver_i::Load(const SALOMEDSImpl_SComponent& theComponent,
70 const unsigned char* theStream,
71 const long theStreamLength,
72 const std::string& theURL,
75 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
76 CORBA::String_var url = CORBA::string_dup(theURL.c_str());
77 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
79 SALOMEDS::TMPFile_var aStream;
80 if (theStreamLength > 0)
81 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
83 aStream = new SALOMEDS::TMPFile(0);
86 bool isOk = _driver->Load(sco.in(), aStream.in(), url, isMultiFile);
92 bool SALOMEDS_Driver_i::LoadASCII(const SALOMEDSImpl_SComponent& theComponent,
93 const unsigned char* theStream,
94 const long theStreamLength,
95 const std::string& theURL,
98 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
99 CORBA::String_var url = CORBA::string_dup(theURL.c_str());
100 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
102 SALOMEDS::TMPFile_var aStream;
103 if(theStreamLength > 0)
104 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
106 aStream = new SALOMEDS::TMPFile(0);
109 bool isOk = _driver->LoadASCII(sco.in(), aStream.in(), url, isMultiFile);
115 void SALOMEDS_Driver_i::Close(const SALOMEDSImpl_SComponent& theComponent)
117 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
120 _driver->Close(sco.in());
126 std::string SALOMEDS_Driver_i::IORToLocalPersistentID(const SALOMEDSImpl_SObject& theSObject,
127 const std::string& IORString,
131 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theSObject, _orb);
132 CORBA::String_var ior = CORBA::string_dup(IORString.c_str());
135 CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), ior.in(), isMultiFile, isASCII);
138 return std::string(pers_string);
142 std::string SALOMEDS_Driver_i::LocalPersistentIDToIOR(const SALOMEDSImpl_SObject& theObject,
143 const std::string& aLocalPersistentID,
147 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
148 CORBA::String_var pers_string = CORBA::string_dup(aLocalPersistentID.c_str());
150 CORBA::String_var IOR = _driver->LocalPersistentIDToIOR(so.in(), pers_string.in(), isMultiFile, isASCII);
152 return std::string(IOR);
155 bool SALOMEDS_Driver_i::CanCopy(const SALOMEDSImpl_SObject& theObject)
157 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
160 bool isOk = _driver->CanCopy(so.in());
168 SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::CopyFrom(const SALOMEDSImpl_SObject& theObject,
170 long& theStreamLength)
172 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
175 CORBA::Long anObjectID;
176 SALOMEDS::TMPFile_var aStream = _driver->CopyFrom(so.in(), anObjectID);
177 SALOMEDSImpl_TMPFile* aTMPFile = new SALOMEDS_TMPFile_i(aStream._retn());
178 theStreamLength = aTMPFile->Size();
179 theObjectID = anObjectID;
185 bool SALOMEDS_Driver_i::CanPaste(const std::string& theComponentName, int theObjectID)
188 bool canPaste = _driver->CanPaste(theComponentName.c_str(), theObjectID);
193 std::string SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream,
194 const long theStreamLength,
196 const SALOMEDSImpl_SObject& theObject)
198 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
199 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
201 SALOMEDS::TMPFile_var aStream;
202 if(theStreamLength > 0)
203 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
205 aStream = new SALOMEDS::TMPFile(0);
208 SALOMEDS::SObject_var ret_so = _driver->PasteInto(aStream.in(), theObjectID, so.in());
211 return std::string(ret_so->GetID());
214 SALOMEDSImpl_TMPFile* SALOMEDS_Driver_i::DumpPython(SALOMEDSImpl_Study* theStudy,
218 long& theStreamLength)
220 SALOMEDS_Study_i * st_servant = SALOMEDS_Study_i::GetStudyServant(theStudy, _orb);//new SALOMEDS_Study_i (theStudy, _orb);
221 SALOMEDS::Study_var st = SALOMEDS::Study::_narrow(st_servant->_this());
222 Engines::EngineComponent_ptr aComponent = Engines::EngineComponent::_narrow(_driver);
225 CORBA::Boolean aValidScript, aPublished = isPublished;
226 Engines::TMPFile_var aStream = aComponent->DumpPython(st.in(), aPublished, isMultiFile, aValidScript);
227 SALOMEDSImpl_TMPFile* aTMPFile = new Engines_TMPFile_i(aStream._retn());
228 theStreamLength = aTMPFile->Size();
229 isValidScript = aValidScript;
235 //###############################################################################################################
236 // SALOMEDS_DriverFactory
237 //###############################################################################################################
239 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByType(const std::string& theComponentType)
241 CORBA::Object_var obj;
243 std::string aFactoryType;
244 if (theComponentType == "SUPERV") aFactoryType = "SuperVisionContainer";
245 else aFactoryType = "FactoryServer";
248 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component(aFactoryType.c_str(), theComponentType.c_str());
251 if (CORBA::is_nil(obj)) {
252 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServerPy", theComponentType.c_str());
255 if (!CORBA::is_nil(obj)) {
256 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
257 return new SALOMEDS_Driver_i(aDriver, _orb);
263 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByIOR(const std::string& theIOR)
265 CORBA::Object_var obj;
266 obj = _orb->string_to_object(theIOR.c_str());
268 if (!CORBA::is_nil(obj)) {
269 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
270 return new SALOMEDS_Driver_i(aDriver, _orb);