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
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
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>
28 IMPLEMENT_STANDARD_RTTIEXT(CDM_MetaData,Standard_Transient)
30 static CDM_MetaDataLookUpTable& getLookUpTable(){
31 static CDM_MetaDataLookUpTable theLookUpTable;
32 return theLookUpTable;
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),
39 myHasVersion(Standard_False),
40 myFileName(aFileName),
43 myIsReadOnly(ReadOnly)
46 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):
47 myIsRetrieved(Standard_False),
52 myHasVersion(Standard_True),
53 myFileName(aFileName),
56 myIsReadOnly(ReadOnly)
59 Standard_Boolean CDM_MetaData::IsRetrieved() const {
63 Handle(CDM_Document) CDM_MetaData::Document() const {
67 void CDM_MetaData::SetDocument(const Handle(CDM_Document)& aDocument) {
68 myIsRetrieved = Standard_True;
69 myDocument = aDocument.operator->();
71 void CDM_MetaData::UnsetDocument() {
72 myIsRetrieved = Standard_False;
74 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) {
75 Handle(CDM_MetaData) theMetaData;
76 TCollection_ExtendedString aConventionalPath=aPath;
77 aConventionalPath.ChangeAll('\\','/');
78 if(!getLookUpTable().IsBound(aConventionalPath)) {
79 theMetaData = new CDM_MetaData(aFolder,aName,aPath,aFileName,ReadOnly);
80 getLookUpTable().Bind(aConventionalPath,theMetaData);
83 theMetaData = getLookUpTable()(aConventionalPath);
87 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) {
88 Handle(CDM_MetaData) theMetaData;
89 TCollection_ExtendedString aConventionalPath=aPath;
90 aConventionalPath.ChangeAll('\\','/');
91 if(!getLookUpTable().IsBound(aConventionalPath)) {
92 theMetaData = new CDM_MetaData(aFolder,aName,aPath,aVersion,aFileName,ReadOnly);
93 getLookUpTable().Bind(aConventionalPath,theMetaData);
96 theMetaData = getLookUpTable()(aConventionalPath);
101 TCollection_ExtendedString CDM_MetaData::Folder() const {
104 TCollection_ExtendedString CDM_MetaData::Name() const {
107 TCollection_ExtendedString CDM_MetaData::Version() const {
108 Standard_NoSuchObject_Raise_if(!myHasVersion,"Document has no version");
111 Standard_Boolean CDM_MetaData::HasVersion() const {
115 TCollection_ExtendedString CDM_MetaData::FileName() const {
118 TCollection_ExtendedString CDM_MetaData::Path() const {
121 Standard_OStream& CDM_MetaData::Print(Standard_OStream& anOStream) const {
122 anOStream << "*CDM_MetaData*";
123 anOStream << myFolder << "," << myName;
124 if(HasVersion()) anOStream << "," << myVersion ;
125 anOStream << "; Physical situation: ";
126 anOStream << myFileName;
127 anOStream << std::endl;
130 Standard_OStream& CDM_MetaData::operator << (Standard_OStream& anOStream) {
131 return Print(anOStream);
133 const CDM_MetaDataLookUpTable& CDM_MetaData::LookUpTable() {
134 return getLookUpTable();
136 Standard_Integer CDM_MetaData::DocumentVersion(const Handle(CDM_Application)& anApplication) {
137 if(myDocumentVersion==0) myDocumentVersion=anApplication->DocumentVersion(this);
138 return myDocumentVersion;
140 Standard_Boolean CDM_MetaData::IsReadOnly() const {
143 void CDM_MetaData::SetIsReadOnly() {
144 myIsReadOnly=Standard_True;
147 void CDM_MetaData::UnsetIsReadOnly() {
148 myIsReadOnly=Standard_False;
151 //=======================================================================
152 //function : DumpJson
154 //=======================================================================
155 void CDM_MetaData::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
157 OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
159 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsRetrieved)
160 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myDocument)
162 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myFolder)
163 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myName)
164 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myVersion)
165 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myHasVersion)
166 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myFileName)
167 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myPath)
168 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDocumentVersion)
169 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsReadOnly)