3 #include "SALOMEDS_Driver_i.hxx"
5 #include "SALOMEDS_SObject_i.hxx"
6 #include "SALOMEDS_SComponent_i.hxx"
7 #include "SALOMEDS_Study_i.hxx"
8 #include "SALOMEDS.hxx"
13 SALOMEDS_Driver_i::~SALOMEDS_Driver_i()
17 unsigned char* SALOMEDS_Driver_i::Save(const Handle(SALOMEDSImpl_SComponent)& theComponent,
18 const TCollection_AsciiString& theURL,
19 long& theStreamLength,
22 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
23 SALOMEDS::TMPFile_var aStream;
24 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
26 aStream = _driver->Save(sco.in(), url, isMultiFile);
28 theStreamLength = aStream->length();
29 unsigned char* aRetStream = NULL;
30 if(theStreamLength > 0) {
31 aRetStream = new unsigned char[theStreamLength];
32 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
37 unsigned char* SALOMEDS_Driver_i::SaveASCII(const Handle(SALOMEDSImpl_SComponent)& theComponent,
38 const TCollection_AsciiString& theURL,
39 long& theStreamLength,
42 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
43 SALOMEDS::TMPFile_var aStream;
44 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
46 aStream = _driver->SaveASCII(sco.in(), url, isMultiFile);
48 theStreamLength = aStream->length();
49 unsigned char* aRetStream = NULL;
50 if(theStreamLength > 0) {
51 aRetStream = new unsigned char[theStreamLength];
52 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
57 bool SALOMEDS_Driver_i::Load(const Handle(SALOMEDSImpl_SComponent)& theComponent,
58 const unsigned char* theStream,
59 const long theStreamLength,
60 const TCollection_AsciiString& theURL,
63 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
64 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
65 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
67 SALOMEDS::TMPFile_var aStream;
68 if(theStreamLength > 0)
69 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
71 aStream = new SALOMEDS::TMPFile(0);
74 return _driver->Load(sco.in(), aStream.in(), url, isMultiFile);
77 bool SALOMEDS_Driver_i::LoadASCII(const Handle(SALOMEDSImpl_SComponent)& theComponent,
78 const unsigned char* theStream,
79 const long theStreamLength,
80 const TCollection_AsciiString& theURL,
83 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
84 CORBA::String_var url = CORBA::string_dup(theURL.ToCString());
85 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
87 SALOMEDS::TMPFile_var aStream;
88 if(theStreamLength > 0)
89 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
91 aStream = new SALOMEDS::TMPFile(0);
94 return _driver->LoadASCII(sco.in(), aStream.in(), url, isMultiFile);
97 void SALOMEDS_Driver_i::Close(const Handle(SALOMEDSImpl_SComponent)& theComponent)
99 SALOMEDS::SComponent_var sco = SALOMEDS_SComponent_i::New (theComponent, _orb);
101 _driver->Close(sco.in());
107 TCollection_AsciiString SALOMEDS_Driver_i::IORToLocalPersistentID(const Handle(SALOMEDSImpl_SObject)& theSObject,
108 const TCollection_AsciiString& IORString,
112 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theSObject, _orb);
113 CORBA::String_var ior = CORBA::string_dup(IORString.ToCString());
115 CORBA::String_var pers_string =_driver->IORToLocalPersistentID(so.in(), ior.in(), isMultiFile, isASCII);
117 return TCollection_AsciiString(pers_string);
121 TCollection_AsciiString SALOMEDS_Driver_i::LocalPersistentIDToIOR(const Handle(SALOMEDSImpl_SObject)& theObject,
122 const TCollection_AsciiString& aLocalPersistentID,
126 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
127 CORBA::String_var pers_string = CORBA::string_dup(aLocalPersistentID.ToCString());
129 CORBA::String_var IOR =_driver->LocalPersistentIDToIOR(so.in(), pers_string.in(), isMultiFile, isASCII);
131 return TCollection_AsciiString(IOR);
134 bool SALOMEDS_Driver_i::CanCopy(const Handle(SALOMEDSImpl_SObject)& theObject)
136 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
138 return _driver->CanCopy(so.in());
142 #include <sys/types.h>
143 #include <sys/stat.h>
147 unsigned char* SALOMEDS_Driver_i::CopyFrom(const Handle(SALOMEDSImpl_SObject)& theObject,
149 long& theStreamLength)
151 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
152 SALOMEDS::TMPFile_var aStream;
153 CORBA::Long anObjectID;
156 aStream = _driver->CopyFrom(so.in(), anObjectID);
159 theObjectID = anObjectID;
160 theStreamLength = aStream->length();
162 unsigned char* aRetStream = NULL;
163 if(theStreamLength > 0) {
164 aRetStream = new unsigned char[theStreamLength];
165 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
169 int fd = open("/dn05/salome/srn/sh_copy.brep", O_CREAT | O_WRONLY);
170 cout << "Written " << write(fd, (char*)aRetStream, theStreamLength) << endl;
176 bool SALOMEDS_Driver_i::CanPaste(const TCollection_AsciiString& theComponentName, int theObjectID)
179 return _driver->CanPaste(theComponentName.ToCString(), theObjectID);
182 TCollection_AsciiString SALOMEDS_Driver_i::PasteInto(const unsigned char* theStream,
183 const long theStreamLength,
185 const Handle(SALOMEDSImpl_SObject)& theObject)
187 SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (theObject, _orb);
188 CORBA::Octet* anOctetBuf = (CORBA::Octet*)theStream;
190 SALOMEDS::TMPFile_var aStream;
191 if(theStreamLength > 0)
192 aStream = new SALOMEDS::TMPFile(theStreamLength, theStreamLength, anOctetBuf, 0);
194 aStream = new SALOMEDS::TMPFile(0);
197 SALOMEDS::SObject_var ret_so = _driver->PasteInto(aStream.in(), theObjectID, so.in());
200 return TCollection_AsciiString((char*)ret_so->GetID());
203 unsigned char* SALOMEDS_Driver_i::DumpPython(const Handle(SALOMEDSImpl_Study)& theStudy,
206 long& theStreamLength)
208 SALOMEDS_Study_i * st_servant = new SALOMEDS_Study_i (theStudy, _orb);
209 SALOMEDS::Study_var st = SALOMEDS::Study::_narrow(st_servant->_this());
210 Engines::TMPFile_var aStream;
211 CORBA::Boolean aValidScript, aPublished;
212 aPublished = isPublished;
213 Engines::Component_ptr aComponent = Engines::Component::_narrow(_driver);
215 aStream = aComponent->DumpPython(st.in(), aPublished, aValidScript);
217 isValidScript = aValidScript;
218 theStreamLength = aStream->length();
219 unsigned char* aRetStream = NULL;
221 if(theStreamLength > 0) {
222 aRetStream = new unsigned char[theStreamLength];
223 memcpy(aRetStream, aStream->NP_data(), theStreamLength);
229 //###############################################################################################################
230 // SALOMEDS_DriverFactory
231 //###############################################################################################################
233 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByType(const TCollection_AsciiString& theComponentType)
235 CORBA::Object_var obj;
237 TCollection_AsciiString aFactoryType;
238 if (theComponentType == "SUPERV") aFactoryType = "SuperVisionContainer";
239 else aFactoryType = "FactoryServer";
241 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component(aFactoryType.ToCString(),
242 theComponentType.ToCString());
244 if (CORBA::is_nil(obj)) {
245 obj = SALOME_LifeCycleCORBA(_name_service).FindOrLoad_Component("FactoryServerPy", theComponentType.ToCString());
248 if (!CORBA::is_nil(obj)) {
249 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
250 return new SALOMEDS_Driver_i(aDriver, _orb);
256 SALOMEDSImpl_Driver* SALOMEDS_DriverFactory_i::GetDriverByIOR(const TCollection_AsciiString& theIOR)
258 CORBA::Object_var obj;
259 obj = _orb->string_to_object(theIOR.ToCString());
261 if (!CORBA::is_nil(obj)) {
262 SALOMEDS::Driver_var aDriver = SALOMEDS::Driver::_narrow(obj);
263 return new SALOMEDS_Driver_i(aDriver, _orb);