0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / TDF / TDF_Transaction.cxx
1 // Created by: DAUTRY Philippe
2 // Copyright (c) 1997-1999 Matra Datavision
3 // Copyright (c) 1999-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 //              -------------------
17 // Version:     0.0
18 //Version       Date            Purpose
19 //              0.0     Oct  1 1997     Creation
20
21 #include <Standard_DomainError.hxx>
22 #include <Standard_Dump.hxx>
23 #include <Standard_NullObject.hxx>
24 #include <TCollection_AsciiString.hxx>
25 #include <TDF_Data.hxx>
26 #include <TDF_Delta.hxx>
27 #include <TDF_Transaction.hxx>
28
29 #undef DEB_TRANSACTION
30 #ifdef OCCT_DEBUG
31 #define DEB_TRANSACTION
32 #endif
33 #undef DEB_TRANSACTION_DUMP
34
35 #include <TDF_Tool.hxx>
36
37 //=======================================================================
38 //function : TDF_Transaction
39 //purpose  : 
40 //=======================================================================
41
42 TDF_Transaction::TDF_Transaction
43 (const TCollection_AsciiString& aName)
44 : myUntilTransaction(0),
45   myName(aName)
46 {}
47
48
49 //=======================================================================
50 //function : TDF_Transaction
51 //purpose  : Private copy constructor.
52 //=======================================================================
53
54 TDF_Transaction::TDF_Transaction(const TDF_Transaction& /*aTrans*/)
55 {}
56
57
58 //=======================================================================
59 //function : TDF_Transaction
60 //purpose  : 
61 //=======================================================================
62
63 TDF_Transaction::TDF_Transaction
64 (const Handle(TDF_Data)& aDF,
65  const TCollection_AsciiString& aName)
66 : myDF(aDF),
67   myUntilTransaction(0),
68   myName(aName)
69 {}
70
71
72
73
74 //=======================================================================
75 //function : Initialize
76 //purpose  : Initializes a transaction ready to be opened.
77 //=======================================================================
78
79 void TDF_Transaction::Initialize(const Handle(TDF_Data)& aDF)
80 {
81   if (IsOpen()) myDF->AbortUntilTransaction(myUntilTransaction);
82   myDF = aDF;
83   myUntilTransaction = 0;
84 }
85
86
87 //=======================================================================
88 //function : Open
89 //purpose  : 
90 //=======================================================================
91
92 Standard_Integer TDF_Transaction::Open()
93 {
94 #ifdef OCCT_DEBUG_TRANSACTION
95   std::cout<<"Transaction "<<myName<<" opens #"<<myDF->Transaction()+1<<std::endl;
96 #endif
97   if (IsOpen())
98     throw Standard_DomainError("This transaction is already open.");
99   if (myDF.IsNull())
100     throw Standard_NullObject("Null TDF_Data.");
101   return myUntilTransaction = myDF->OpenTransaction();
102 }
103
104
105 //=======================================================================
106 //function : Commit
107 //purpose  : 
108 //=======================================================================
109
110 Handle(TDF_Delta) TDF_Transaction::Commit(const Standard_Boolean withDelta)
111 {
112 #ifdef OCCT_DEBUG_TRANSACTION
113   std::cout<<"Transaction "<<myName<<" commits ";
114 #endif
115   Handle(TDF_Delta) delta;
116   if (IsOpen()) {
117 #ifdef OCCT_DEBUG_TRANSACTION
118     std::cout<<"from #"<<myDF->Transaction()<<" until #"<<myUntilTransaction<<" while current is #"<<myDF->Transaction()<<std::endl;
119 #endif
120 #ifdef OCCT_DEBUG_TRANSACTION_DUMP
121     std::cout<<"DF before commit"<<std::endl;
122     TDF_Tool::DeepDump(std::cout,myDF);
123 #endif
124     Standard_Integer until = myUntilTransaction;
125     myUntilTransaction = 0;
126     delta = myDF->CommitUntilTransaction(until, withDelta);
127 #ifdef OCCT_DEBUG_TRANSACTION_DUMP
128     std::cout<<"DF after commit"<<std::endl;
129     TDF_Tool::DeepDump(std::cout,myDF);
130 #endif
131   }
132 #ifdef OCCT_DEBUG_TRANSACTION
133   else std::cout<<"but this transaction is not open!"<<std::endl;
134 #endif
135   return delta;
136 }
137
138
139 //=======================================================================
140 //function : Abort
141 //purpose  : alias ~
142 //=======================================================================
143
144 void TDF_Transaction::Abort()
145 {
146   if (IsOpen()) {
147 #ifdef OCCT_DEBUG_TRANSACTION
148     std::cout<<"Transaction "<<myName<<" aborts from #"<<myDF->Transaction()<<" until #"<<myUntilTransaction<<" while current is #"<<myDF->Transaction()<<std::endl;
149 #endif
150 #ifdef OCCT_DEBUG_TRANSACTION_DUMP
151     std::cout<<"DF before abort"<<std::endl;
152     TDF_Tool::DeepDump(std::cout,myDF);
153 #endif
154     myDF->AbortUntilTransaction(myUntilTransaction);
155     myUntilTransaction = 0;
156 #ifdef OCCT_DEBUG_TRANSACTION_DUMP
157     std::cout<<"DF after abort"<<std::endl;
158     TDF_Tool::DeepDump(std::cout,myDF);
159 #endif
160   }
161 }
162
163 //=======================================================================
164 //function : DumpJson
165 //purpose  : 
166 //=======================================================================
167 void TDF_Transaction::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
168 {
169   OCCT_DUMP_CLASS_BEGIN (theOStream, TDF_Transaction)
170
171   OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myDF.get())
172   OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myUntilTransaction)
173   OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myName)
174 }