summaryrefslogtreecommitdiff
path: root/inc/Storage_Schema.hxx
blob: 8229eabce470361abbc2b9c9a8ae7c91b4558fa5 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _Storage_Schema_HeaderFile
#define _Storage_Schema_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_DefineHandle_HeaderFile
#include <Standard_DefineHandle.hxx>
#endif
#ifndef _Handle_Storage_Schema_HeaderFile
#include <Handle_Storage_Schema.hxx>
#endif

#ifndef _Storage_MapOfCallBack_HeaderFile
#include <Storage_MapOfCallBack.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Handle_Storage_CallBack_HeaderFile
#include <Handle_Storage_CallBack.hxx>
#endif
#ifndef _TCollection_AsciiString_HeaderFile
#include <TCollection_AsciiString.hxx>
#endif
#ifndef _Handle_Storage_HArrayOfSchema_HeaderFile
#include <Handle_Storage_HArrayOfSchema.hxx>
#endif
#ifndef _MMgt_TShared_HeaderFile
#include <MMgt_TShared.hxx>
#endif
#ifndef _Handle_Storage_Data_HeaderFile
#include <Handle_Storage_Data.hxx>
#endif
#ifndef _Handle_Storage_HeaderData_HeaderFile
#include <Handle_Storage_HeaderData.hxx>
#endif
#ifndef _Handle_Storage_TypeData_HeaderFile
#include <Handle_Storage_TypeData.hxx>
#endif
#ifndef _Handle_Storage_RootData_HeaderFile
#include <Handle_Storage_RootData.hxx>
#endif
#ifndef _Handle_TColStd_HSequenceOfAsciiString_HeaderFile
#include <Handle_TColStd_HSequenceOfAsciiString.hxx>
#endif
#ifndef _Handle_Standard_Persistent_HeaderFile
#include <Handle_Standard_Persistent.hxx>
#endif
#ifndef _Storage_SolveMode_HeaderFile
#include <Storage_SolveMode.hxx>
#endif
#ifndef _Standard_CString_HeaderFile
#include <Standard_CString.hxx>
#endif
class Storage_CallBack;
class Storage_HArrayOfSchema;
class Storage_StreamFormatError;
class TCollection_AsciiString;
class Storage_BaseDriver;
class Storage_Data;
class Storage_HeaderData;
class Storage_TypeData;
class Storage_RootData;
class TColStd_SequenceOfAsciiString;
class TColStd_HSequenceOfAsciiString;
class Standard_Persistent;



//! Root class for basic storage/retrieval algorithms. <br>
//! A Storage_Schema object processes: <br>
//! -   writing of a set of persistent data into a <br>
//!   container (store mechanism), <br>
//! -   reading of a container to extract all the <br>
//!   contained persistent data (retrieve mechanism). <br>
//! A Storage_Schema object is based on the data <br>
//! schema for the persistent data of the application, i.e.: <br>
//! -   the list of all persistent objects which may be <br>
//!   known by the application, <br>
//! -   the organization of their data; a data schema <br>
//!   knows how to browse each persistent object it contains. <br>
//!   During the store or retrieve operation, only <br>
//! persistent objects known from the data schema <br>
//! can be processed; they are then stored or <br>
//! retrieved according to their description in the schema. <br>
//! A data schema is specific to the object classes to <br>
//! be read or written. Tools dedicated to the <br>
//! environment in use allow a description of the <br>
//! application persistent data structure. <br>
//! Storage_Schema algorithms are called basic <br>
//! because they do not support external references <br>
//! between containers. <br>
class Storage_Schema : public MMgt_TShared {

public:

  //! Builds a storage/retrieval algorithm based on a <br>
//! given data schema. <br>
//! Example <br>
//!   For example, if ShapeSchema is the class <br>
//! inheriting from Storage_Schema and containing <br>
//! the description of your application data schema, <br>
//! you create a storage/retrieval algorithm as follows: <br>
//! Handle(ShapeSchema) s = new <br>
//! ShapeSchema; <br>
//! -------- -- <br>
//! USER API -- -------------------------------------------------------------- <br>
//! -------- -- <br>
  Standard_EXPORT   Storage_Schema();
  //! returns version of the schema <br>
  Standard_EXPORT     void SetVersion(const TCollection_AsciiString& aVersion) ;
  //! returns the version of the schema <br>
  Standard_EXPORT     TCollection_AsciiString Version() const;
  //! set the schema's name <br>
  Standard_EXPORT     void SetName(const TCollection_AsciiString& aSchemaName) ;
  //! returns the schema's name <br>
  Standard_EXPORT     TCollection_AsciiString Name() const;
  //! Writes the data aggregated in aData into the <br>
//! container defined by the driver s. The storage <br>
//! operation is performed according to the data <br>
//! schema with which this algorithm is working. <br>
//! Note: aData may aggregate several root objects <br>
//! to be stored together. <br>
  Standard_EXPORT     void Write(Storage_BaseDriver& s,const Handle(Storage_Data)& aData) const;
  //!  Returns the data read from the container defined <br>
//! by the driver s. The retrieval operation is <br>
//! performed according to the data schema with <br>
//! which this algorithm is working. <br>
//! These data are aggregated in a Storage_Data <br>
//! object which may be browsed in order to extract <br>
//! the root objects from the container. <br>
  Standard_EXPORT     Handle_Storage_Data Read(Storage_BaseDriver& s) const;
  //! read the header part of the stream <br>
//!  Arguments: <br>
//!   s: driver to read <br>
  Standard_EXPORT     Handle_Storage_HeaderData ReadHeaderSection(Storage_BaseDriver& s) const;
  //! fill the TypeData with the  names of the type used <br>
//!          in a stream <br>
//!  Arguments: <br>
//!   s: driver to read <br>
  Standard_EXPORT     Handle_Storage_TypeData ReadTypeSection(Storage_BaseDriver& s) const;
  //! read root part of the file <br>
//!  Arguments: <br>
//!   s: driver to read <br>
  Standard_EXPORT     Handle_Storage_RootData ReadRootSection(Storage_BaseDriver& s) const;
  //! returns the known types of a schema <br>
  Standard_EXPORT   virtual const TColStd_SequenceOfAsciiString& SchemaKnownTypes() const;
  //! indicates whether  the  are  types  in  the driver <br>
//!          which are not known from  the schema and for which <br>
//!          no callbacks have been set. The unknown types can <br>
//!          be read in <theUnknownTypes>. <br>
  Standard_EXPORT     Standard_Boolean HasUnknownType(Storage_BaseDriver& aDriver,TColStd_SequenceOfAsciiString& theUnknownTypes) const;
  //! returns the all known types  of a schema and their <br>
//!          nested schemes. <br>
  Standard_EXPORT     Handle_TColStd_HSequenceOfAsciiString GetAllSchemaKnownTypes() const;
  
  Standard_EXPORT     void SetNestedSchemas(const Handle(Storage_HArrayOfSchema)& theSchemas) ;
  
  Standard_EXPORT     void ClearNestedSchemas() ;
  
  Standard_EXPORT     Handle_Storage_HArrayOfSchema NestedSchemas() const;
  //! return a current date string <br>
  Standard_EXPORT   static  TCollection_AsciiString ICreationDate() ;
  //! returns True if theType migration is identified <br>//! the callback support provides a way to read a file <br>
//!          with a incomplete schema. <br>
//!          ex. : A file contains 3 types a,b and c. <br>
//!                The  application's  schema  contains  only 2 <br>
//!                type a and b. If you try to read the file in <br>
//!                the application, you  will  have an error.To <br>
//!                bypass this  problem  you  can  give to your <br>
//!                application's schema  a  callback  used when <br>
//!                the schema dosent  know  how  to handle this <br>
//!                type. <br>
  Standard_EXPORT   static  Standard_Boolean CheckTypeMigration(const TCollection_AsciiString& theTypeName,TCollection_AsciiString& theNewName) ;
  //! add two functions to the callback list <br>
  Standard_EXPORT     void AddReadUnknownTypeCallBack(const TCollection_AsciiString& aTypeName,const Handle(Storage_CallBack)& aCallBack) ;
  //! remove a callback for a type <br>
  Standard_EXPORT     void RemoveReadUnknownTypeCallBack(const TCollection_AsciiString& aTypeName) ;
  //! returns  a  list  of   type  name  with  installed <br>
//!          callback. <br>
  Standard_EXPORT     Handle_TColStd_HSequenceOfAsciiString InstalledCallBackList() const;
  //! clear all callback from schema instance. <br>
  Standard_EXPORT     void ClearCallBackList() ;
  //! install  a  callback  for  all  unknown  type. the <br>
//!          objects with unknown types  will be skipped. (look <br>
//!          SkipObject method in BaseDriver) <br>
  Standard_EXPORT     void UseDefaultCallBack() ;
  //! tells schema to uninstall the default callback. <br>
  Standard_EXPORT     void DontUseDefaultCallBack() ;
  //! ask if the schema is using the default callback. <br>
  Standard_EXPORT     Standard_Boolean IsUsingDefaultCallBack() const;
  //! overload the  default  function  for build.(use to <br>
//!          set an  error  message  or  skip  an  object while <br>
//!          reading an unknown type). <br>
  Standard_EXPORT     void SetDefaultCallBack(const Handle(Storage_CallBack)& f) ;
  //! reset  the  default  function  defined  by Storage <br>
//!          package. <br>
  Standard_EXPORT     void ResetDefaultCallBack() ;
  //! returns   the   read   function   used   when  the <br>
//!          UseDefaultCallBack() is set. <br>
  Standard_EXPORT     Handle_Storage_CallBack DefaultCallBack() const;
  
  Standard_EXPORT   virtual  Handle_Storage_CallBack CallBackSelection(const TCollection_AsciiString& tName) const;
  
  Standard_EXPORT   virtual  Handle_Storage_CallBack AddTypeSelection(const Handle(Standard_Persistent)& sp) const;
  
        void WritePersistentObjectHeader(const Handle(Standard_Persistent)& sp,Storage_BaseDriver& s) ;
  
        void ReadPersistentObjectHeader(Storage_BaseDriver& s) ;
  
        void WritePersistentReference(const Handle(Standard_Persistent)& sp,Storage_BaseDriver& s) ;
  
  Standard_EXPORT     void ReadPersistentReference(Handle(Standard_Persistent)& sp,Storage_BaseDriver& s) ;
  
  Standard_EXPORT     Standard_Boolean AddPersistent(const Handle(Standard_Persistent)& sp,const Standard_CString tName) const;
  
  Standard_EXPORT     Standard_Boolean PersistentToAdd(const Handle(Standard_Persistent)& sp) const;




  DEFINE_STANDARD_RTTI(Storage_Schema)

protected:

  
  Standard_EXPORT     Standard_Boolean IsNested() const;
  
  Standard_EXPORT     Handle_Storage_CallBack ResolveUnknownType(const TCollection_AsciiString& aTypeName,const Handle(Standard_Persistent)& aPers,const Storage_SolveMode aMode) const;
  
        Standard_Boolean HasTypeBinding(const TCollection_AsciiString& aTypeName) const;
  
  Standard_EXPORT     void BindType(const TCollection_AsciiString& aTypeName,const Handle(Storage_CallBack)& aCallBack) const;
  
  Standard_EXPORT     Handle_Storage_CallBack TypeBinding(const TCollection_AsciiString& aTypeName) const;



private: 

  
  Standard_EXPORT     Standard_Boolean SetNested() ;
  
  Standard_EXPORT     Standard_Boolean UnsetNested() ;
  
  Standard_EXPORT     void Clear() const;
  
  Standard_EXPORT     Standard_Boolean IReadHeaderSection(Storage_BaseDriver& s,const Handle(Storage_HeaderData)& iData) const;
  
  Standard_EXPORT     Standard_Boolean IReadTypeSection(Storage_BaseDriver& s,const Handle(Storage_TypeData)& tData) const;
  
  Standard_EXPORT     Standard_Boolean IReadRootSection(Storage_BaseDriver& s,const Handle(Storage_RootData)& rData) const;
  
  Standard_EXPORT   static  void ISetCurrentData(const Handle(Storage_Data)& dData) ;
  
  Standard_EXPORT   static  Handle_Storage_Data& ICurrentData() ;

Storage_MapOfCallBack myCallBack;
Standard_Boolean myCallBackState;
Handle_Storage_CallBack myDefaultCallBack;
TCollection_AsciiString myName;
TCollection_AsciiString myVersion;
Handle_Storage_HArrayOfSchema myArrayOfSchema;
Standard_Boolean myNestedState;


};


#include <Storage_Schema.lxx>



// other Inline functions and methods (like "C++: function call" methods)


#endif