public class ChangeCopier extends Object implements ChangeSwitch<Change<?>>
Change
object based on an existing one where the JObject
s referred to by the
new Change
are copies in a different transaction of the originals. This is useful to allow database
change information to be accessed after the transaction in which the change occured has completed.
Each instance has an internal CopyState
used to avoid redundant copies, accessible via getCopyState()
.
Modifier and Type | Field and Description |
---|---|
protected String |
cascadeName |
protected CopyState |
copyState |
protected JTransaction |
dest |
protected int |
recursionLimit |
Constructor and Description |
---|
ChangeCopier()
"Snapshot" constructor for when the destination transaction is the "snapshot" transaction of the transaction
associated with the current thread and no copy cascade is needed
|
ChangeCopier(JTransaction dest)
Non-cascading constructor.
|
ChangeCopier(JTransaction dest,
String cascadeName,
int recursionLimit)
Primary constructor.
|
ChangeCopier(String cascadeName,
int recursionLimit)
"Snapshot" constructor for when the destination transaction is the "snapshot" transaction of the transaction
associated with the current thread.
|
protected final JTransaction dest
protected final String cascadeName
protected final int recursionLimit
protected CopyState copyState
public ChangeCopier(JTransaction dest)
Equivalent to: ChangeCopier(dest, null, 0)
.
dest
- destination transaction for copied JObject
sIllegalArgumentException
- if dest
is nullpublic ChangeCopier(JTransaction dest, String cascadeName, int recursionLimit)
dest
- destination transaction for copied JObject
scascadeName
- cascade to use when copying objects, or null to not cascaderecursionLimit
- the maximum number of references to hop through, or -1 for infinityIllegalArgumentException
- if recursionLimit
is less that -1IllegalArgumentException
- if dest
is nullpublic ChangeCopier()
This is a convenience constructor, equivalent to:
ChangeCopier(JTransaction.getCurrent().getSnapshotTransaction())
IllegalStateException
- if this is not a snapshot instance and there is no JTransaction
associated with the current threadpublic ChangeCopier(String cascadeName, int recursionLimit)
This is a convenience constructor, equivalent to:
ChangeCopier(JTransaction.getCurrent().getSnapshotTransaction(), cascadeName, recursionLimit)
cascadeName
- cascade to use when copying objects, or null to not cascaderecursionLimit
- the maximum number of cascaded references to traverse, or -1 for infinityIllegalArgumentException
- if recursionLimit
is less that -1IllegalStateException
- if this is not a snapshot instance and there is no JTransaction
associated with the current threadpublic JTransaction getDestinationTransaction()
public String getCascadeName()
public void setCopyState(CopyState copyState)
CopyState
used by this instance.copyState
- copy stateIllegalArgumentException
- if copyState
is nullpublic CopyState getCopyState()
CopyState
used by this instance.public <T> ObjectCreate<T> caseObjectCreate(ObjectCreate<T> change)
ChangeSwitch
ObjectCreate
event.caseObjectCreate
in interface ChangeSwitch<Change<?>>
T
- changed object typechange
- visiting changepublic <T> ObjectDelete<T> caseObjectDelete(ObjectDelete<T> change)
ChangeSwitch
ObjectDelete
event.caseObjectDelete
in interface ChangeSwitch<Change<?>>
T
- changed object typechange
- visiting changepublic <T,E> ListFieldAdd<T,E> caseListFieldAdd(ListFieldAdd<T,E> change)
ChangeSwitch
ListFieldAdd
event.caseListFieldAdd
in interface ChangeSwitch<Change<?>>
T
- changed object typeE
- changed list element typechange
- visiting changepublic <T> ListFieldClear<T> caseListFieldClear(ListFieldClear<T> change)
ChangeSwitch
ListFieldClear
event.caseListFieldClear
in interface ChangeSwitch<Change<?>>
T
- changed object typechange
- visiting changepublic <T,E> ListFieldRemove<T,E> caseListFieldRemove(ListFieldRemove<T,E> change)
ChangeSwitch
ListFieldRemove
event.caseListFieldRemove
in interface ChangeSwitch<Change<?>>
T
- changed object typeE
- changed list element typechange
- visiting changepublic <T,E> ListFieldReplace<T,E> caseListFieldReplace(ListFieldReplace<T,E> change)
ChangeSwitch
ListFieldReplace
event.caseListFieldReplace
in interface ChangeSwitch<Change<?>>
T
- changed object typeE
- changed list element typechange
- visiting changepublic <T,K,V> MapFieldAdd<T,K,V> caseMapFieldAdd(MapFieldAdd<T,K,V> change)
ChangeSwitch
MapFieldAdd
event.caseMapFieldAdd
in interface ChangeSwitch<Change<?>>
T
- changed object typeK
- changed map key typeV
- changed map value typechange
- visiting changepublic <T> MapFieldClear<T> caseMapFieldClear(MapFieldClear<T> change)
ChangeSwitch
MapFieldClear
event.caseMapFieldClear
in interface ChangeSwitch<Change<?>>
T
- changed object typechange
- visiting changepublic <T,K,V> MapFieldRemove<T,K,V> caseMapFieldRemove(MapFieldRemove<T,K,V> change)
ChangeSwitch
MapFieldRemove
event.caseMapFieldRemove
in interface ChangeSwitch<Change<?>>
T
- changed object typeK
- changed map key typeV
- changed map value typechange
- visiting changepublic <T,K,V> MapFieldReplace<T,K,V> caseMapFieldReplace(MapFieldReplace<T,K,V> change)
ChangeSwitch
MapFieldReplace
event.caseMapFieldReplace
in interface ChangeSwitch<Change<?>>
T
- changed object typeK
- changed map key typeV
- changed map value typechange
- visiting changepublic <T,E> SetFieldAdd<T,E> caseSetFieldAdd(SetFieldAdd<T,E> change)
ChangeSwitch
SetFieldAdd
event.caseSetFieldAdd
in interface ChangeSwitch<Change<?>>
T
- changed object typeE
- changed set element typechange
- visiting changepublic <T> SetFieldClear<T> caseSetFieldClear(SetFieldClear<T> change)
ChangeSwitch
SetFieldClear
event.caseSetFieldClear
in interface ChangeSwitch<Change<?>>
T
- changed object typechange
- visiting changepublic <T,E> SetFieldRemove<T,E> caseSetFieldRemove(SetFieldRemove<T,E> change)
ChangeSwitch
SetFieldRemove
event.caseSetFieldRemove
in interface ChangeSwitch<Change<?>>
T
- changed object typeE
- changed set element typechange
- visiting changepublic <T,V> SimpleFieldChange<T,V> caseSimpleFieldChange(SimpleFieldChange<T,V> change)
ChangeSwitch
SimpleFieldChange
event.caseSimpleFieldChange
in interface ChangeSwitch<Change<?>>
T
- changed object typeV
- changed field typechange
- visiting changeprotected JObject copy(JObject jobj)
JObject
into the destination transaction.
The implementation in ChangeCopier
copies jobj
and objects reachable via the configured copy cascade,
unless jobj
does not exist, in which case it is not copied (but the
corresponding JObject
is still returned).
Subclasses may override as needed.
jobj
- original objectdest
IllegalArgumentException
- if jobj
is nullCopyright © 2022. All rights reserved.