1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 // See http://www.salome-platform.org/
22 #include "SALOMEDS_Driver_i.hxx"
23 #include "utilities.h"
24 #include "SALOMEDS_SObject_i.hxx"
25 #include "SALOMEDS_SComponent_i.hxx"
26 #include "SALOMEDS_Study_i.hxx"
27 #include "SALOMEDS.hxx"
32 SALOMEDS_Driver_i::~SALOMEDS_Driver_i()
36 unsigned char* SALOMEDS_Driver_i::Save(const Handle(SALOMEDSImpl_SComponent)& theComponent,
37 const TCollection_AsciiString& theURL,
38 long& theStreamLength,
41 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
42 SALOMEDS::TMPFile_var aStream;
43 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
45 aStream = _driver->Save(sco.in(), url, isMultiFile);
47 theStreamLength = aStream->length();
48 unsigned char* aRetStream = NULL;
49 if (theStreamLength > 0) {
50 aRetStream = new unsigned char[theStreamLength];
51 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
56 unsigned char* SALOMEDS_Driver_i::SaveASCII(const Handle(SALOMEDSImpl_SComponent)& theComponent,
57 const TCollection_AsciiString& theURL,
58 long& theStreamLength,
61 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
62 SALOMEDS::TMPFile_var aStream;
63 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
65 aStream = _driver->SaveASCII(sco.in(), url, isMultiFile);
67 theStreamLength = aStream->length();
68 unsigned char* aRetStream = NULL;
69 if (theStreamLength > 0) {
70 aRetStream = new unsigned char[theStreamLength];
71 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
76 bool SALOMEDS_Driver_i::Load(const Handle(SALOMEDSImpl_SComponent)& theComponent,
77 const unsigned char* theStream,
78 const long theStreamLength,
79 const TCollection_AsciiString& theURL,
82 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
83 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
84 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
86 SALOMEDS::TMPFile_var aStream;
87 if (theStreamLength > 0)
88 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
90 aStream = new SALOMEDS::TMPFile(0);
93 bool isOk = _driver->Load(sco.in(), aStream.in(), url, isMultiFile);
98 bool SALOMEDS_Driver_i::LoadASCII(const Handle(SALOMEDSImpl_SComponent)& theComponent,
99 const unsigned char* theStream,
100 const long theStreamLength,
101 const TCollection_AsciiString& theURL,
104 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
105 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
106 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
108 SALOMEDS::TMPFile_var aStream;
109 if(theStreamLength > 0)
110 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
112 aStream = new SALOMEDS::TMPFile(0);
115 bool isOk = _driver->LoadASCII(sco.in(), aStream.in(), url, isMultiFile);
120 void SALOMEDS_Driver_i::Close(const Handle(SALOMEDSImpl_SComponent)& theComponent)
122 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
124 _driver->Close(sco.in());
130 TCollection_AsciiString SALOMEDS_Driver_i::IORToLocalPersistentID(const Handle(SALOMEDSImpl_SObject)& theSObject,
131 const TCollection_AsciiString& IORString,
135 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theSObject, _orb);
136 CORBA::String_var ior = CORBA::string_dup(IORString.ToCString());
138 CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), ior.in(), isMultiFile, isASCII);
140 return TCollection_AsciiString(pers_string);
144 TCollection_AsciiString SALOMEDS_Driver_i::LocalPersistentIDToIOR(const Handle(SALOMEDSImpl_SObject)& theObject,
145 const TCollection_AsciiString& aLocalPersistentID,
149 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
150 CORBA::String_var pers_string = CORBA::string_dup(aLocalPersistentID.ToCString());
152 CORBA::String_var IOR = _driver->LocalPersistentIDToIOR(so.in(), pers_string.in(), isMultiFile, isASCII);
154 return TCollection_AsciiString(IOR);
157 bool SALOMEDS_Driver_i::CanCopy(const Handle(SALOMEDSImpl_SObject)& theObject)
159 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
161 bool isOk = _driver->CanCopy(so.in());
167 unsigned char* SALOMEDS_Driver_i::CopyFrom(const Handle(SALOMEDSImpl_SObject)& theObject,
169 long& theStreamLength)
171 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
172 SALOMEDS::TMPFile_var aStream;
173 CORBA::Long anObjectID;
176 aStream = _driver->CopyFrom(so.in(), anObjectID);
179 theObjectID = anObjectID;
180 theStreamLength = aStream->length();
182 unsigned char* aRetStream = NULL;
183 if(theStreamLength > 0) {
184 aRetStream = new unsigned char[theStreamLength];
185 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
191 bool SALOMEDS_Driver_i::CanPaste(const TCollection_AsciiString& theComponentName, int theObjectID)
194 bool canPaste = _driver->CanPaste(theComponentName.ToCString(), theObjectID);
199 TCollection_AsciiString SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream,
200 const long theStreamLength,
202 const Handle(SALOMEDSImpl_SObject)& theObject)
204 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
205 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
207 SALOMEDS::TMPFile_var aStream;
208 if(theStreamLength > 0)
209 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
211 aStream = new SALOMEDS::TMPFile(0);
214 SALOMEDS::SObject_var ret_so = _driver->PasteInto(aStream.in(), theObjectID, so.in());
217 return TCollection_AsciiString((char*)ret_so->GetID());
220 unsigned char* SALOMEDS_Driver_i::DumpPython(const Handle(SALOMEDSImpl_Study)& theStudy,
223 long& theStreamLength)
225 SALOMEDS_Study_i * st_servant = new SALOMEDS_Study_i (theStudy, _orb);
226 SALOMEDS::Study_var st = SALOMEDS::Study::_narrow(st_servant->_this());
227 Engines::TMPFile_var aStream;
228 CORBA::Boolean aValidScript, aPublished;
229 aPublished = isPublished;
230 Engines::Component_ptr aComponent = Engines::Component::_narrow(_driver);
232 aStream = aComponent->DumpPython(st.in(), aPublished, aValidScript);
234 isValidScript = aValidScript;
235 theStreamLength = aStream->length();
236 unsigned char* aRetStream = NULL;
238 if(theStreamLength > 0) {
239 aRetStream = new unsigned char[theStreamLength];
240 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
246 //###############################################################################################################
247 // SALOMEDS_DriverFactory
248 //###############################################################################################################
250 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByType
251 (const TCollection_AsciiString& theComponentType)
253 CORBA::Object_var obj;
255 TCollection_AsciiString aFactoryType;
256 if (theComponentType == "SUPERV") aFactoryType = "SuperVisionContainer";
257 else aFactoryType = "FactoryServer";
260 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component
261 (aFactoryType.ToCString(), theComponentType.ToCString());
264 if (CORBA::is_nil(obj)) {
265 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component
266 ("FactoryServerPy", theComponentType.ToCString());
269 if (!CORBA::is_nil(obj)) {
270 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
271 return new SALOMEDS_Driver_i(aDriver, _orb);
277 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByIOR(const TCollection_AsciiString& theIOR)
279 CORBA::Object_var obj;
280 obj = _orb->string_to_object(theIOR.ToCString());
282 if (!CORBA::is_nil(obj)) {
283 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
284 return new SALOMEDS_Driver_i(aDriver, _orb);