blob: dd82d71b68f3773873732272188d7c308b7a4d7b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
// File: PCDM.cxx
// Created: Wed Nov 5 11:53:15 1997
// Author: Jean-Louis Frenkel
// <rmi@frilox.paris1.matra-dtv.fr>
#include <PCDM.ixx>
#include <Plugin.hxx>
#include <Standard_SStream.hxx>
#include <Standard_NoSuchObject.hxx>
#include <Resource_Manager.hxx>
#include <Standard_GUID.hxx>
#include <UTL.hxx>
#include <FSD_CmpFile.hxx>
#include <FSD_File.hxx>
#include <FSD_BinaryFile.hxx>
//=======================================================================
//function : StorageDriver
//purpose : gets in the EuclidDesktop resource the plugin
// identifier of the driver plugs the driver.
//=======================================================================
Handle(PCDM_StorageDriver) PCDM::StorageDriver(const Handle(CDM_Document)& aDocument) {
if(!PCDM::FindStorageDriver(aDocument)) {
Standard_SStream aMsg; aMsg << "could not find the storage driver plugin resource for the format: " << aDocument->StorageFormat()<<(char) 0;
Standard_NoSuchObject::Raise(aMsg);
}
//return Handle(PCDM_StorageDriver)::DownCast(Plugin::Load(aDocument->StoragePlugin()));
Handle(PCDM_StorageDriver) DRIVER =
Handle(PCDM_StorageDriver)::DownCast(Plugin::Load(aDocument->StoragePlugin()));
if (!DRIVER.IsNull()) DRIVER->SetFormat(aDocument->StorageFormat());
return DRIVER;
}
//=======================================================================
//function : FindStorageDriver
//purpose :
//=======================================================================
Standard_Boolean PCDM::FindStorageDriver(const Handle(CDM_Document)& aDocument) {
return aDocument->FindStoragePlugin();
}
//=======================================================================
//function : Schema
//purpose : returns a schema to be used during a Store or Retrieve
// operation.
// Schema will plug the schema defined by
// the SchemaName method.
//=======================================================================
Handle(Storage_Schema) PCDM::Schema(const TCollection_ExtendedString& aSchemaName, const Handle(CDM_Application)& anApplication) {
Handle(Resource_Manager) r = anApplication->Resources();
if(!UTL::Find(r,aSchemaName)) {
Standard_SStream aMsg; aMsg << "could not find the plugin resource for the schema: " << TCollection_ExtendedString(aSchemaName) << (char)0;
Standard_NoSuchObject::Raise(aMsg);
}
Handle(Standard_Transient) t = Plugin::Load(UTL::GUID(UTL::Value(r,aSchemaName)));
return *((Handle(Storage_Schema)*)&t);
}
//=======================================================================
//function : FileDriverType
//purpose :
//=======================================================================
PCDM_TypeOfFileDriver PCDM::FileDriverType(const TCollection_AsciiString& aFileName, PCDM_BaseDriverPointer& aBaseDriver) {
if(FSD_CmpFile::IsGoodFileType(aFileName) == Storage_VSOk) {
aBaseDriver=new FSD_CmpFile;
return PCDM_TOFD_CmpFile;
}
else if(FSD_File::IsGoodFileType(aFileName) == Storage_VSOk) {
aBaseDriver=new FSD_File;
return PCDM_TOFD_File;
}
else if(FSD_BinaryFile::IsGoodFileType(aFileName) == Storage_VSOk) {
aBaseDriver=new FSD_BinaryFile;
return PCDM_TOFD_File;
}
else {
aBaseDriver=NULL;
return PCDM_TOFD_Unknown;
}
}
|