0031353: TDocStd_Application does not have api to set progress indicator
[occt.git] / src / BinLDrivers / BinLDrivers_DocumentStorageDriver.hxx
1 // Created on: 2002-10-29
2 // Created by: Michael SAZONOV
3 // Copyright (c) 2002-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #ifndef _BinLDrivers_DocumentStorageDriver_HeaderFile
17 #define _BinLDrivers_DocumentStorageDriver_HeaderFile
18
19 #include <Standard.hxx>
20 #include <Standard_Type.hxx>
21
22 #include <BinObjMgt_Persistent.hxx>
23 #include <BinObjMgt_SRelocationTable.hxx>
24 #include <TDF_LabelList.hxx>
25 #include <TColStd_MapOfTransient.hxx>
26 #include <TColStd_IndexedMapOfTransient.hxx>
27 #include <BinLDrivers_VectorOfDocumentSection.hxx>
28 #include <PCDM_StorageDriver.hxx>
29 #include <Standard_OStream.hxx>
30 #include <Standard_Boolean.hxx>
31 #include <Standard_Type.hxx>
32 class BinMDF_ADriverTable;
33 class Message_Messenger;
34 class TCollection_ExtendedString;
35 class CDM_Document;
36 class TDF_Label;
37 class TCollection_AsciiString;
38 class BinLDrivers_DocumentSection;
39
40
41 class BinLDrivers_DocumentStorageDriver;
42 DEFINE_STANDARD_HANDLE(BinLDrivers_DocumentStorageDriver, PCDM_StorageDriver)
43
44 //! persistent implemention of storage a document in a binary file
45 class BinLDrivers_DocumentStorageDriver : public PCDM_StorageDriver
46 {
47
48 public:
49
50   
51   //! Constructor
52   Standard_EXPORT BinLDrivers_DocumentStorageDriver();
53     
54   //! Write <theDocument> to the binary file <theFileName>
55   Standard_EXPORT virtual void Write (const Handle(CDM_Document)& theDocument, 
56                                       const TCollection_ExtendedString& theFileName, 
57                                       const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
58
59   //! Write <theDocument> to theOStream
60   Standard_EXPORT virtual void Write (const Handle(CDM_Document)& theDocument, 
61                                       Standard_OStream& theOStream, 
62                                       const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
63   
64   Standard_EXPORT virtual Handle(BinMDF_ADriverTable) AttributeDrivers (const Handle(Message_Messenger)& theMsgDriver);
65   
66   //! Create a section that should be written after the OCAF data
67   Standard_EXPORT void AddSection (const TCollection_AsciiString& theName, const Standard_Boolean isPostRead = Standard_True);
68
69
70
71
72   DEFINE_STANDARD_RTTIEXT(BinLDrivers_DocumentStorageDriver,PCDM_StorageDriver)
73
74 protected:
75
76   
77   //! Write the tree under <theLabel> to the stream <theOS>
78   Standard_EXPORT void WriteSubTree (const TDF_Label& theData,
79                                      Standard_OStream& theOS, 
80                                      const Handle(Message_ProgressIndicator)& theProgress = NULL);
81   
82   //! define the procedure of writing a section to file.
83   Standard_EXPORT virtual void WriteSection (const TCollection_AsciiString& theName,
84                                              const Handle(CDM_Document)& theDoc, 
85                                              Standard_OStream& theOS);
86   
87   //! defines the procedure of writing a shape  section to file
88   Standard_EXPORT virtual void WriteShapeSection (BinLDrivers_DocumentSection& theDocSection,
89                                                   Standard_OStream& theOS,
90                                                   const Handle(Message_ProgressIndicator)& theProgress = NULL);
91
92   Handle(BinMDF_ADriverTable) myDrivers;
93   BinObjMgt_SRelocationTable myRelocTable;
94   Handle(Message_Messenger) myMsgDriver;
95
96 private:
97
98   Standard_EXPORT void FirstPass (const TDF_Label& theRoot);
99   
100   //! Returns true if <L> and its sub-labels do not contain
101   //! attributes to store
102   Standard_EXPORT Standard_Boolean FirstPassSubTree (const TDF_Label& L, TDF_LabelList& ListOfEmptyL);
103   
104   //! Write info secton using FSD_BinaryFile driver
105   Standard_EXPORT void WriteInfoSection (const Handle(CDM_Document)& theDocument, Standard_OStream& theOStream);
106   
107   Standard_EXPORT void UnsupportedAttrMsg (const Handle(Standard_Type)& theType);
108
109   BinObjMgt_Persistent myPAtt;
110   TDF_LabelList myEmptyLabels;
111   TColStd_MapOfTransient myMapUnsupported;
112   TColStd_IndexedMapOfTransient myTypesMap;
113   BinLDrivers_VectorOfDocumentSection mySections;
114   TCollection_ExtendedString myFileName;
115
116 };
117
118 #endif // _BinLDrivers_DocumentStorageDriver_HeaderFile