0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / CDM / CDM_MetaData.cxx
1 // Created on: 1997-10-22
2 // Created by: Jean-Louis Frenkel
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <CDM_Application.hxx>
19 #include <CDM_Document.hxx>
20 #include <CDM_MetaData.hxx>
21 #include <CDM_MetaDataLookUpTable.hxx>
22 #include <CDM_Reference.hxx>
23 #include <Standard_Dump.hxx>
24 #include <Standard_NoSuchObject.hxx>
25 #include <Standard_Type.hxx>
26 #include <TCollection_ExtendedString.hxx>
27
28 IMPLEMENT_STANDARD_RTTIEXT(CDM_MetaData,Standard_Transient)
29
30 static CDM_MetaDataLookUpTable& getLookUpTable(){
31   static CDM_MetaDataLookUpTable theLookUpTable;
32   return theLookUpTable;
33 }
34 CDM_MetaData::CDM_MetaData(const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aPath,const TCollection_ExtendedString& aFileName,const Standard_Boolean ReadOnly):
35 myIsRetrieved(Standard_False),
36 myFolder(aFolder),
37 myName(aName),
38 myHasVersion(Standard_False),
39 myFileName(aFileName),
40 myPath(aPath),
41 myDocumentVersion(0),
42 myIsReadOnly(ReadOnly) 
43 {}
44
45 CDM_MetaData::CDM_MetaData(const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aPath,const TCollection_ExtendedString& aVersion,const TCollection_ExtendedString& aFileName,const Standard_Boolean ReadOnly):
46 myIsRetrieved(Standard_False),
47 myFolder(aFolder),
48 myName(aName),
49 myVersion(aVersion),
50 myHasVersion(Standard_True),
51 myFileName(aFileName),
52 myPath(aPath),
53 myDocumentVersion(0),
54 myIsReadOnly(ReadOnly)  
55 {}
56
57 Standard_Boolean CDM_MetaData::IsRetrieved() const {
58   return myIsRetrieved;
59 }
60
61 Handle(CDM_Document) CDM_MetaData::Document() const {
62   return myDocument;
63 }
64
65 void CDM_MetaData::SetDocument(const Handle(CDM_Document)& aDocument) {
66   myIsRetrieved = Standard_True;
67   myDocument = aDocument.operator->();
68 }
69 void CDM_MetaData::UnsetDocument() {
70   myIsRetrieved = Standard_False;
71 }
72 Handle(CDM_MetaData) CDM_MetaData::LookUp(const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aPath,const TCollection_ExtendedString& aFileName,const Standard_Boolean ReadOnly) {
73   Handle(CDM_MetaData) theMetaData;
74   TCollection_ExtendedString aConventionalPath=aPath;
75   aConventionalPath.ChangeAll('\\','/');
76   if(!getLookUpTable().IsBound(aConventionalPath)) {
77     theMetaData = new CDM_MetaData(aFolder,aName,aPath,aFileName,ReadOnly);
78     getLookUpTable().Bind(aConventionalPath,theMetaData);
79   }
80   else
81     theMetaData = getLookUpTable()(aConventionalPath);
82   
83   return theMetaData;
84 }
85 Handle(CDM_MetaData) CDM_MetaData::LookUp(const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aPath, const TCollection_ExtendedString& aVersion, const TCollection_ExtendedString& aFileName,const Standard_Boolean ReadOnly) {
86   Handle(CDM_MetaData) theMetaData;
87   TCollection_ExtendedString aConventionalPath=aPath;
88   aConventionalPath.ChangeAll('\\','/');
89   if(!getLookUpTable().IsBound(aConventionalPath)) {
90     theMetaData = new CDM_MetaData(aFolder,aName,aPath,aVersion,aFileName,ReadOnly);
91     getLookUpTable().Bind(aConventionalPath,theMetaData);
92   }
93   else
94     theMetaData = getLookUpTable()(aConventionalPath);
95   
96   return theMetaData;
97 }
98
99 TCollection_ExtendedString CDM_MetaData::Folder() const {
100   return myFolder;
101 }
102 TCollection_ExtendedString CDM_MetaData::Name() const {
103   return myName;
104 }
105 TCollection_ExtendedString CDM_MetaData::Version() const {
106   Standard_NoSuchObject_Raise_if(!myHasVersion,"Document has no version");
107   return myVersion;
108 }
109 Standard_Boolean CDM_MetaData::HasVersion() const {
110   return myHasVersion;
111 }
112
113 TCollection_ExtendedString CDM_MetaData::FileName() const {
114   return myFileName;
115 }
116 TCollection_ExtendedString CDM_MetaData::Path() const {
117   return myPath;
118 }
119 Standard_OStream& CDM_MetaData::Print(Standard_OStream& anOStream) const {
120   anOStream << "*CDM_MetaData*";
121   anOStream <<  myFolder << "," << myName; 
122   if(HasVersion()) anOStream << "," << myVersion ;
123   anOStream << "; Physical situation: ";
124   anOStream << myFileName;
125   anOStream << std::endl;
126   return anOStream;
127 }
128 Standard_OStream& CDM_MetaData::operator << (Standard_OStream& anOStream) {
129   return Print(anOStream);
130 }
131 const CDM_MetaDataLookUpTable& CDM_MetaData::LookUpTable() {
132   return getLookUpTable();
133 }
134 Standard_Integer CDM_MetaData::DocumentVersion(const Handle(CDM_Application)& anApplication) {
135   if(myDocumentVersion==0) myDocumentVersion=anApplication->DocumentVersion(this);
136   return myDocumentVersion;
137 }
138 Standard_Boolean CDM_MetaData::IsReadOnly() const {
139   return myIsReadOnly;
140 }
141 void CDM_MetaData::SetIsReadOnly() {
142   myIsReadOnly=Standard_True;
143 }
144     
145 void CDM_MetaData::UnsetIsReadOnly() {
146   myIsReadOnly=Standard_False;
147 }
148
149 //=======================================================================
150 //function : DumpJson
151 //purpose  : 
152 //=======================================================================
153 void CDM_MetaData::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
154 {
155   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
156
157   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsRetrieved)
158   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myDocument)
159   
160   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myFolder)
161   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myName)
162   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myVersion)
163   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myHasVersion)
164   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myFileName)
165   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myPath)
166   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDocumentVersion)
167   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsReadOnly)
168 }