1 // Copyright (c) 2017 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
14 #include <Standard_ErrorHandler.hxx>
15 #include <StdStorage_HeaderData.hxx>
16 #include <Storage_BaseDriver.hxx>
17 #include <Storage_StreamTypeMismatchError.hxx>
18 #include <Storage_StreamExtCharParityError.hxx>
19 #include <TCollection_AsciiString.hxx>
20 #include <TCollection_ExtendedString.hxx>
22 IMPLEMENT_STANDARD_RTTIEXT(StdStorage_HeaderData, Standard_Transient)
24 StdStorage_HeaderData::StdStorage_HeaderData()
25 : myNBObj(0), myErrorStatus(Storage_VSOk)
29 Standard_Boolean StdStorage_HeaderData::Read(const Handle(Storage_BaseDriver)& theDriver)
31 // Check driver open mode
32 if (theDriver->OpenMode() != Storage_VSRead
33 && theDriver->OpenMode() != Storage_VSReadWrite)
35 myErrorStatus = Storage_VSModeError;
36 myErrorStatusExt = "OpenMode";
37 return Standard_False;
41 myErrorStatus = theDriver->BeginReadInfoSection();
42 if (myErrorStatus != Storage_VSOk)
44 myErrorStatusExt = "BeginReadInfoSection";
45 return Standard_False;
51 theDriver->ReadInfo(myNBObj, myStorageVersion, myDate, mySchemaName, mySchemaVersion,
52 myApplicationName, myApplicationVersion, myDataType, myUserInfo);
54 catch (Storage_StreamTypeMismatchError const&)
56 myErrorStatus = Storage_VSTypeMismatch;
57 myErrorStatusExt = "ReadInfo";
58 return Standard_False;
60 catch (Storage_StreamExtCharParityError const&)
62 myErrorStatus = Storage_VSExtCharParityError;
63 myErrorStatusExt = "ReadInfo";
64 return Standard_False;
67 myErrorStatus = theDriver->EndReadInfoSection();
68 if (myErrorStatus != Storage_VSOk)
70 myErrorStatusExt = "EndReadInfoSection";
71 return Standard_False;
74 // Read comment section
75 myErrorStatus = theDriver->BeginReadCommentSection();
76 if (myErrorStatus != Storage_VSOk)
78 myErrorStatusExt = "BeginReadCommentSection";
79 return Standard_False;
85 theDriver->ReadComment(myComments);
87 catch (Storage_StreamTypeMismatchError const&)
89 myErrorStatus = Storage_VSTypeMismatch;
90 myErrorStatusExt = "ReadComment";
91 return Standard_False;
93 catch (Storage_StreamExtCharParityError const&)
95 myErrorStatus = Storage_VSExtCharParityError;
96 myErrorStatusExt = "ReadComment";
97 return Standard_False;
100 myErrorStatus = theDriver->EndReadCommentSection();
101 if (myErrorStatus != Storage_VSOk)
103 myErrorStatusExt = "EndReadCommentSection";
104 return Standard_False;
107 return Standard_True;
110 Standard_Boolean StdStorage_HeaderData::Write(const Handle(Storage_BaseDriver)& theDriver)
112 // Check driver open mode
113 if (theDriver->OpenMode() != Storage_VSWrite
114 && theDriver->OpenMode() != Storage_VSReadWrite)
116 myErrorStatus = Storage_VSModeError;
117 myErrorStatusExt = "OpenMode";
118 return Standard_False;
121 // Write info section
122 myErrorStatus = theDriver->BeginWriteInfoSection();
123 if (myErrorStatus != Storage_VSOk)
125 myErrorStatusExt = "BeginWriteInfoSection";
126 return Standard_False;
132 theDriver->WriteInfo(myNBObj, myStorageVersion, myDate, mySchemaName, mySchemaVersion,
133 myApplicationName, myApplicationVersion, myDataType, myUserInfo);
135 catch (Storage_StreamTypeMismatchError const&)
137 myErrorStatus = Storage_VSTypeMismatch;
138 myErrorStatusExt = "WriteInfo";
139 return Standard_False;
141 catch (Storage_StreamExtCharParityError const&)
143 myErrorStatus = Storage_VSExtCharParityError;
144 myErrorStatusExt = "WriteInfo";
145 return Standard_False;
148 myErrorStatus = theDriver->EndWriteInfoSection();
149 if (myErrorStatus != Storage_VSOk)
151 myErrorStatusExt = "EndWriteInfoSection";
152 return Standard_False;
155 // Write comment section
156 myErrorStatus = theDriver->BeginWriteCommentSection();
157 if (myErrorStatus != Storage_VSOk)
159 myErrorStatusExt = "BeginWriteCommentSection";
160 return Standard_False;
166 theDriver->WriteComment(myComments);
168 catch (Storage_StreamTypeMismatchError const&)
170 myErrorStatus = Storage_VSTypeMismatch;
171 myErrorStatusExt = "WriteComment";
172 return Standard_False;
174 catch (Storage_StreamExtCharParityError const&)
176 myErrorStatus = Storage_VSExtCharParityError;
177 myErrorStatusExt = "WriteComment";
178 return Standard_False;
181 myErrorStatus = theDriver->EndWriteCommentSection();
182 if (myErrorStatus != Storage_VSOk)
184 myErrorStatusExt = "EndWriteCommentSection";
185 return Standard_False;
188 return Standard_True;
191 TCollection_AsciiString StdStorage_HeaderData::CreationDate() const
196 void StdStorage_HeaderData::SetSchemaVersion(const TCollection_AsciiString& aVersion)
198 mySchemaVersion = aVersion;
201 TCollection_AsciiString StdStorage_HeaderData::SchemaVersion() const
203 return mySchemaVersion;
206 void StdStorage_HeaderData::SetSchemaName(const TCollection_AsciiString& aSchemaName)
208 mySchemaName = aSchemaName;
211 void StdStorage_HeaderData::SetApplicationVersion(const TCollection_AsciiString& aVersion)
213 myApplicationVersion = aVersion;
216 TCollection_AsciiString StdStorage_HeaderData::ApplicationVersion() const
218 return myApplicationVersion;
221 void StdStorage_HeaderData::SetApplicationName(const TCollection_ExtendedString& aName)
223 myApplicationName = aName;
226 TCollection_ExtendedString StdStorage_HeaderData::ApplicationName() const
228 return myApplicationName;
231 void StdStorage_HeaderData::SetDataType(const TCollection_ExtendedString& aName)
236 TCollection_ExtendedString StdStorage_HeaderData::DataType() const
241 void StdStorage_HeaderData::AddToUserInfo(const TCollection_AsciiString& theUserInfo)
243 myUserInfo.Append(theUserInfo);
246 const TColStd_SequenceOfAsciiString& StdStorage_HeaderData::UserInfo() const
251 void StdStorage_HeaderData::AddToComments(const TCollection_ExtendedString& aComments)
253 myComments.Append(aComments);
256 const TColStd_SequenceOfExtendedString& StdStorage_HeaderData::Comments() const
261 Standard_Integer StdStorage_HeaderData::NumberOfObjects() const
266 void StdStorage_HeaderData::SetNumberOfObjects(const Standard_Integer anObjectNumber)
268 myNBObj = anObjectNumber;
271 void StdStorage_HeaderData::SetStorageVersion(const TCollection_AsciiString& v)
273 myStorageVersion = v;
276 void StdStorage_HeaderData::SetCreationDate(const TCollection_AsciiString& d)
281 TCollection_AsciiString StdStorage_HeaderData::StorageVersion() const
283 return myStorageVersion;
286 Storage_Error StdStorage_HeaderData::ErrorStatus() const
288 return myErrorStatus;
291 void StdStorage_HeaderData::SetErrorStatus(const Storage_Error anError)
293 myErrorStatus = anError;
296 TCollection_AsciiString StdStorage_HeaderData::ErrorStatusExtension() const
298 return myErrorStatusExt;
301 void StdStorage_HeaderData::SetErrorStatusExtension(const TCollection_AsciiString& anErrorExt)
303 myErrorStatusExt = anErrorExt;
306 void StdStorage_HeaderData::ClearErrorStatus()
308 myErrorStatus = Storage_VSOk;
309 myErrorStatusExt.Clear();