public final class DBObjectTransaction
extends java.lang.Object
Constructor and Description |
---|
DBObjectTransaction(DBObjectProvider pro)
Create a new transaction to work on objects in the given provider.
|
Modifier and Type | Method and Description |
---|---|
void |
addException(DBException dbe)
Adds a failure to the transaction.
|
void |
addParameter(java.lang.Object parameter)
Adds a parameter object to this transaction.
|
void |
commit()
Convenience method to commit this transaction to the underlying
provider.
|
boolean |
containsUpdate(java.lang.String type,
java.lang.String schema,
java.lang.String name)
Tests whether this transaction contains a create or update operation on
the given object.
|
Difference |
difference(SystemObject oldObject,
SystemObject newObject)
Convinience method to diff the two objects using the provider's
DiffEngine.
|
Difference |
findExistingUpdate(Difference newDiff)
If there is an update Difference in this transaction already for the
object being updated in newDiff this method returns it.
|
Difference |
findExistingUpdate(SystemObject obj)
Finds an existing Difference for the given object.
|
SystemObject |
getCopyForUpdate(SystemObject obj)
Checks the transaction for an existing changes to the given object
(using
findExistingUpdate ). |
java.util.Collection<DBObjectID> |
getCreateIDs()
Gets the ids of all the objects that are to be created as part of this
transaction.
|
java.util.Collection<DBObjectID> |
getDeleteIDs()
Gets the ids of all the objects that are to be deleted as part of this
transaction.
|
SystemObject |
getDiffUpdatedObject(Difference objDiff)
Gets a copy of the original object in the given diff with any
marked differences in the diff applied.
|
<T> T |
getParameter(java.lang.Class<T> parameterClz)
Gets a parameter object using its class.
|
DBObjectProvider |
getProvider()
Gets the DBObjectProvider this transaction is happening in.
|
Difference |
getTransactionDifference()
Gets the overall Difference for this transaction that will be committed
to the underlying provider.
|
java.util.Collection<DBObjectID> |
getUpdateIDs()
Gets the ids of all the objects that are to be updated as part of this
transaction.
|
void |
includeListDifference(Difference listDiff)
Includes a Difference whose children are SystemObject Differences -
i.e.
|
void |
includeObjectDifference(Difference objDiff)
Includes an update to a given object in this transaction.
|
void |
includeUpdate(SystemObject updatedObject)
Includes
updatedObject in this transaction. |
void |
includeUpdate(SystemObject oldObject,
SystemObject newObject)
Includes an update to a given object in this transaction.
|
boolean |
isCascade()
Tests whether cascade is allowed.
|
boolean |
isCurrentObject(DBObjectID id)
Tests whether the given DBObjectID is the ID of the object currently
being processed in this transaction.
|
boolean |
isReplace()
Tests whether existing objects can be replaced.
|
void |
removeUpdate(Difference objDiff)
Removes the given object difference from the current operation.
|
void |
setCascade(boolean cascade)
Sets whether deletes and updates should be cascaded to dependent
objects.
|
void |
setRefactorUpdatedObject(boolean refactorUpdated)
Sets whether any changes that have been included by an UpdateProcessor
should also be included on the updated object.
|
void |
setReplace(boolean replace)
Sets whether replace of existing objects should be allowed, or whether
an explict update is required when chaning existing objects.
|
void |
setUpdateProcessors(java.util.List<UpdateProcessor> processors)
Iternal use only.
|
public DBObjectTransaction(DBObjectProvider pro)
pro
- the provider the transaction will be within - must not be
null.public boolean isReplace()
public void setReplace(boolean replace)
public boolean isCascade()
public void setCascade(boolean cascade)
public void setRefactorUpdatedObject(boolean refactorUpdated)
public void addParameter(java.lang.Object parameter)
getParameter(Class)
.
A paramter object can be any object that is used to customise the way that a transaction is processed (e.g. extra options regarding how a change might be refactored).
If a parameter object instance of the same class has already been added it will be replaced.
parameter
- the parameter object to add.public <T> T getParameter(java.lang.Class<T> parameterClz)
addParameter(Object)
.parameterClz
- the class of the paramter object to getpublic DBObjectProvider getProvider()
public void commit() throws DBException
DBException
public void addException(DBException dbe)
The ultimate call to getTransactionDifference()
will check
the transaction for exceptions and re-throw them after processing all
Differences in the operation.
public boolean isCurrentObject(DBObjectID id)
public SystemObject getDiffUpdatedObject(Difference objDiff)
This is used by getCopyForUpdate
to copy an original
object that already has changes included in this transaction.
public void includeListDifference(Difference listDiff)
java.lang.IllegalStateException
- if listDiff is not a Difference of type
LISTpublic void includeUpdate(SystemObject updatedObject)
updatedObject
in this transaction. If this
transaction already contains changes to the object this will overwrite
the existing Difference in the operation. If the object is not already
included the original object will be retrieved from the provider.
Before the changes to include were made, updatedObject
must have been created using getCopyForUpdate(oracle.javatools.db.SystemObject)
.public void includeUpdate(SystemObject oldObject, SystemObject newObject)
getCopyForUpdate(oracle.javatools.db.SystemObject)
.oldObject
- the original object to update (or null to create a
new object)newObject
- the update (can be null to delete the oldObject).public Difference difference(SystemObject oldObject, SystemObject newObject)
public Difference findExistingUpdate(Difference newDiff)
newDiff
- a difference of two SystemObjectspublic void includeObjectDifference(Difference objDiff)
getCopyForUpdate(oracle.javatools.db.SystemObject)
.objDiff
- the change to include in this transactionjava.lang.NullPointerException
- if the diff's original object is null.java.lang.ClassCastException
- if the diff's original object is not a
SystemObject.java.lang.IllegalStateException
- if the diff's update object was not
created using getCopyForUpdate
.public boolean containsUpdate(java.lang.String type, java.lang.String schema, java.lang.String name)
public void setUpdateProcessors(java.util.List<UpdateProcessor> processors)
public void removeUpdate(Difference objDiff)
objDiff
- a Difference already included in this transaction that
should no longer be processed.public java.util.Collection<DBObjectID> getDeleteIDs()
public java.util.Collection<DBObjectID> getCreateIDs()
public java.util.Collection<DBObjectID> getUpdateIDs()
public Difference findExistingUpdate(SystemObject obj)
getDiffUpdateObject
should be used to create
a new "updated object" with the current difference applied. Once
the further changes have been made, includeUpdate
should
then be called to re-add the object to the transaction.
Unless the specific Difference is required, checkForExistingUpdate also does the getDiffUpdateObject phase and returns an existing object that can be further changed, and re-included.
public SystemObject getCopyForUpdate(SystemObject obj)
findExistingUpdate
). If a change is found, a copy
of the original object is returned with the existing change applied,
so that further changes can be made to it. If further changes are
made to the returned obj, it should be re-included in the transaction
(when those changes are complete) using includeUpdate
.
If the given object is being deleted as part of this transaction, this method will return null to reflect that.
If the object has not got an existing change included in this transaction, the object definition from the provider is copied so that the caller has a definition that can be changed and re-included.
obj
- the object to find an existing change to, and/or make a copy
ofpublic Difference getTransactionDifference() throws DBException
DBException