zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
 
#ifndef   _LONG_TRANSACTION_MANAGER_H_INCLUDED_
#define   _LONG_TRANSACTION_MANAGER_H_INCLUDED_
 
#include "RxObject.h"
#include "IdArrays.h"
#include "TD_PackPush.h"
 
class OdDbLongTransaction;
class OdDbDatabase;
class OdDbIdMapping;
 
/** \details
    This class is used to access callbacks for long transactions.  
 
    \sa
    TD_Db
 
    <group OdAp_Classes>
*/
class TOOLKIT_EXPORT OdApLongTransactionReactor: public OdRxObject 
public:
  ODRX_DECLARE_MEMBERS(OdApLongTransactionReactor);
  OdApLongTransactionReactor();
 
   /** \details
    Begins the checkout process of the specified long transaction.
 
    \param originList [in]  List/array of objects (in the same block table record) to check out.
   */
  virtual void beginCheckOut        (OdDbLongTransaction& , OdDbObjectIdArray& originList);
 /** \details
    Completes the checkout process and returns the long transaction.
 */
  virtual void endCheckOut          (OdDbLongTransaction& );
   /** \details
    Begins the checkin process of the specified long transaction.
   */
  virtual void beginCheckIn         (OdDbLongTransaction& );
   /** \details
    Completes the checkin process of the specified long transaction.
   */
  virtual void endCheckIn           (OdDbLongTransaction& );
   /** \details
    Terminates the check out process and returns the aborted long transaction.
   */
  virtual void abortLongTransaction (OdDbLongTransaction& );
 
  /** \details
    Terminates the check out process, if in progress.
  */
protected:
  OdResult veto();
 
private:
  bool m_Veto;
  friend class OdApLongTransactionManagerImpl;
};
 
/** \details
    This class controls long transactions. 
 
    \remarks
    There is one OdApLongTransactionManager object per application session.  
    
    \sa
    TD_Db
 
    <group OdAp_Classes> 
*/
class ODRX_ABSTRACT TOOLKIT_EXPORT OdApLongTransactionManager : public OdRxObject 
public:
  ODRX_DECLARE_MEMBERS(OdApLongTransactionManager);
 
  /** \details
    Generates a new long transaction and clones objects from the specified list.
    
    \param transID [out]  Receives the object ID of the new long transaction.
    \param objList [in]  List/array of objects (in the same block table record) to check out.
    \param toBlock [in]  Object ID of the block table record to which the objects will be cloned.
    \param errorMap [out]  Receives an empty mapping object.
    \param lockBlkRef [in]  Optional object ID of the last block reference, which during checkout will
    will be placed on a locked layer.
  */
  virtual OdResult checkOut(OdDbObjectId& transId, OdDbObjectIdArray& objList,
    OdDbObjectId toBlock, OdDbIdMapping& errorMap, OdDbObjectId lockBlkRef = OdDbObjectId::kNull) = 0;
 
  /** \details
    Checks in a long transaction that was previously checked out.
    
    \param transID [in]  Object ID of the long transaction.
    \param errorMap [out]  Receives an empty mapping object.
    \param keepObjs [in]  Boolean value indicating whether to keep workset objects.
  */
  virtual OdResult checkIn(OdDbObjectId transId, OdDbIdMapping& errorMap, bool keepObjs = false) = 0;
 
  /** \details
    Terminates a long transaction during or in between checkin and checkout.
    
    \param transID [in]  Object ID of the long transaction.
    \param keepObjs [in]  Boolean value indicating whether to keep cloned objects.
  */
  virtual OdResult abortLongTransaction(OdDbObjectId transId, bool keepObjs = false) = 0;
 
  virtual OdDbObjectId currentLongTransactionFor(const OdDbDatabase* pDb) const = 0;
  /** \details
    Adds the specified reactor to this object's reactor list.
  */
  virtual void addReactor(OdApLongTransactionReactor*) = 0;
  /** \details
    Deletes the specified reactor from this object's reactor list.
  */
  virtual void removeReactor(OdApLongTransactionReactor*) = 0;
 
  /** \details
    Adds the class of the specified OdRxClass object to the class filter.
  */
  virtual OdResult addClassFilter (OdRxClass* ) = 0;
  /** \details
    Returns True if the class of the specified OdRxClass object is in the class filter.
  */
  virtual bool isFiltered (OdRxClass* ) const = 0;
};
 
extern TOOLKIT_EXPORT OdApLongTransactionManager* odapLongTransactionManager();
 
#include "TD_PackPop.h"
#endif  // _LONG_TRANSACTION_MANAGER_H_INCLUDED_