0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / CDM / CDM_Reference.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_Reference.hxx>
22 #include <Standard_Dump.hxx>
23 #include <Standard_Type.hxx>
24
25 IMPLEMENT_STANDARD_RTTIEXT(CDM_Reference,Standard_Transient)
26
27 CDM_Reference::CDM_Reference(const Handle(CDM_Document)& aFromDocument, const Handle(CDM_Document)& aToDocument, const Standard_Integer aReferenceIdentifier, const Standard_Integer aToDocumentVersion):
28 myToDocument(aToDocument),
29 myFromDocument(aFromDocument.operator->()),
30 myReferenceIdentifier(aReferenceIdentifier),
31 myDocumentVersion(aToDocumentVersion) 
32 {}
33
34 CDM_Reference::CDM_Reference(const Handle(CDM_Document)& aFromDocument, const Handle(CDM_MetaData)& aToDocument, const Standard_Integer aReferenceIdentifier, const Handle(CDM_Application)& anApplication, const Standard_Integer aToDocumentVersion, const Standard_Boolean UseStorageConfiguration):
35 myFromDocument(aFromDocument.operator->()),
36 myReferenceIdentifier(aReferenceIdentifier),
37 myApplication(anApplication),
38 myMetaData(aToDocument),
39 myDocumentVersion(aToDocumentVersion),
40 myUseStorageConfiguration(UseStorageConfiguration)
41 {}
42
43 Handle(CDM_Document) CDM_Reference::FromDocument() {
44   return myFromDocument;
45 }
46
47 Handle(CDM_Document) CDM_Reference::ToDocument() {
48   if(myToDocument.IsNull()) { 
49     myToDocument=myApplication->Retrieve(myMetaData,myUseStorageConfiguration);
50     myApplication.Nullify();
51   }
52   return myToDocument;
53 }
54 Standard_Integer CDM_Reference::ReferenceIdentifier() {
55   return myReferenceIdentifier;
56 }
57  
58
59 void CDM_Reference::Update(const Handle(CDM_MetaData)& aMetaData) {
60   if(myToDocument.IsNull()) {
61     if(myMetaData == aMetaData) {
62       myToDocument=myMetaData->Document();
63       myToDocument->AddFromReference(this);
64       myApplication.Nullify();
65     }
66   }
67 }
68
69 Standard_Boolean CDM_Reference::IsUpToDate() const {
70   Standard_Integer theActualDocumentVersion;
71   if(myToDocument.IsNull())
72     theActualDocumentVersion=myMetaData->DocumentVersion(myApplication);
73   else
74     theActualDocumentVersion=myToDocument->Modifications();
75   
76   return myDocumentVersion==theActualDocumentVersion;
77 }
78 void CDM_Reference::SetIsUpToDate() {
79   
80   Standard_Integer theActualDocumentVersion;
81   if(myToDocument.IsNull())
82     theActualDocumentVersion=myMetaData->DocumentVersion(myApplication);
83   else
84     theActualDocumentVersion=myToDocument->Modifications();
85
86   if(theActualDocumentVersion != -1) myDocumentVersion=theActualDocumentVersion;
87 }
88 void CDM_Reference::UnsetToDocument(const Handle(CDM_MetaData)& aMetaData, const Handle(CDM_Application)& anApplication) {
89   myToDocument.Nullify();
90   myApplication=anApplication;
91   myMetaData=aMetaData;
92 }
93
94 Standard_Integer CDM_Reference::DocumentVersion() const {
95   return myDocumentVersion;
96 }
97 Standard_Boolean CDM_Reference::IsOpened() const {
98   if(myToDocument.IsNull()) return Standard_False;
99   return myToDocument->IsOpened();
100 }
101 Standard_Boolean CDM_Reference::IsReadOnly() const {
102   if(myToDocument.IsNull()) return myMetaData->IsReadOnly();
103   return myToDocument->IsReadOnly();
104 }
105 Handle(CDM_Document) CDM_Reference::Document() const {
106   return myToDocument;
107 }
108 Handle(CDM_MetaData) CDM_Reference::MetaData() const {
109   return myMetaData;
110 }
111 Handle(CDM_Application) CDM_Reference::Application() const {
112   return myApplication;
113 }
114
115 Standard_Boolean CDM_Reference::UseStorageConfiguration() const {
116   return myUseStorageConfiguration;
117 }
118 Standard_Boolean CDM_Reference::IsInSession() const {
119   return !myToDocument.IsNull();
120 }
121 Standard_Boolean CDM_Reference::IsStored() const {
122   return !myMetaData.IsNull();
123 }
124
125 //=======================================================================
126 //function : DumpJson
127 //purpose  : 
128 //=======================================================================
129 void CDM_Reference::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
130 {
131   OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
132
133   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myToDocument.get())
134   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myFromDocument)
135
136   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myReferenceIdentifier)
137
138   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myApplication.get())
139   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myMetaData.get())
140
141   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myDocumentVersion)
142   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myUseStorageConfiguration)
143 }