org.eclipse.emf.transaction.impl
Class ReadWriteValidatorImpl

java.lang.Object
  extended by org.eclipse.emf.transaction.impl.ReadWriteValidatorImpl
All Implemented Interfaces:
TransactionValidator
Direct Known Subclasses:
ReadOnlyValidatorImpl

public class ReadWriteValidatorImpl
extends Object
implements TransactionValidator

A validator for read/write transactions. It provides all of the notifications (in order) that occurred during the transaction, and validates them to detect changes that would violate model integrity.

A read/write validator should be created for the root transaction of any nested read/write transaction structure, when the root transaction is activated. As child transactions are activated, they must be added to me so that I may correctly track which notifications were received during which transaction, and at which time relative to the start and completion of nested transactions.

Whenever a transaction (nested or otherwise) is rolled back, it must be removed from me so that I may forget the notifications received for any changes that it or its nested transactions made.

See Also:
ReadOnlyValidatorImpl

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.eclipse.emf.transaction.impl.TransactionValidator
TransactionValidator.Factory
 
Field Summary
 
Fields inherited from interface org.eclipse.emf.transaction.impl.TransactionValidator
NULL
 
Constructor Summary
ReadWriteValidatorImpl()
          Initializes me.
 
Method Summary
 void add(InternalTransaction transaction)
          Adds the specified transaction to me for validation.
protected  IValidator<Notification> createValidator()
          Creates a validator which will be responsible for the transaction validation
 void dispose()
          Disposes me by clearing my state and cleaning up any resources that I am retaining.
 List<Notification> getNotificationsForPostcommit(Transaction tx)
          Obtains the notifications that I need to broadcast in a post-commit resource-change event for the specified transaction.
 List<Notification> getNotificationsForPrecommit(Transaction tx)
          Obtains the notifications that I need to broadcast in a pre-commit resource-change event for the specified transaction.
 List<Notification> getNotificationsForValidation(Transaction tx)
          Obtains the notifications received, in order, during the execution of the (possibly nested) transaction(s) that I am validating.
 void remove(InternalTransaction transaction)
          Removes the specified transaction from me.
 IStatus validate(Transaction tx)
          Performs the validation step of a commit.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ReadWriteValidatorImpl

public ReadWriteValidatorImpl()
Initializes me.

Method Detail

add

public void add(InternalTransaction transaction)
Adds the specified transaction to me for validation. This must be called when the transaction is activated.

Specified by:
add in interface TransactionValidator
Parameters:
transaction - the transaction (root or a nested transaction) to add

remove

public void remove(InternalTransaction transaction)
Removes the specified transaction from me. This must be called when the transaction is rolled back, and is recommended also after a successful commit.

Specified by:
remove in interface TransactionValidator
Parameters:
transaction - the transaction (root or a nested transaction) to remove

getNotificationsForValidation

public List<Notification> getNotificationsForValidation(Transaction tx)
Description copied from interface: TransactionValidator
Obtains the notifications received, in order, during the execution of the (possibly nested) transaction(s) that I am validating.

Specified by:
getNotificationsForValidation in interface TransactionValidator
Parameters:
tx - the transaction to be validated
Returns:
the transaction's notifications, or null if the transaction has not started yet

getNotificationsForPrecommit

public List<Notification> getNotificationsForPrecommit(Transaction tx)
Description copied from interface: TransactionValidator
Obtains the notifications that I need to broadcast in a pre-commit resource-change event for the specified transaction. Note that this does not include notifications from "no-triggers" transactions.

Specified by:
getNotificationsForPrecommit in interface TransactionValidator
Parameters:
tx - the transaction to be broadcast
Returns:
those of the transaction's notifications that are eligible to be broadcast, or null if the transaction has not started

getNotificationsForPostcommit

public List<Notification> getNotificationsForPostcommit(Transaction tx)
Description copied from interface: TransactionValidator
Obtains the notifications that I need to broadcast in a post-commit resource-change event for the specified transaction. Note that this does not include notifications from "silent" transactions.

Specified by:
getNotificationsForPostcommit in interface TransactionValidator
Parameters:
tx - the transaction to be broadcast
Returns:
those of the transaction's notifications that are eligible to be broadcast, or null if the transaction has not started

validate

public IStatus validate(Transaction tx)
Description copied from interface: TransactionValidator
Performs the validation step of a commit.

Specified by:
validate in interface TransactionValidator
Parameters:
tx - the transaction to validate
Returns:
the status of validation. If the severity is error or worse, then the transaction must roll back, and this status included in the exception
See Also:
Transaction.commit(), RollbackException

createValidator

protected IValidator<Notification> createValidator()
Creates a validator which will be responsible for the transaction validation

Returns:
the validator
Since:
1.1

dispose

public void dispose()
Description copied from interface: TransactionValidator
Disposes me by clearing my state and cleaning up any resources that I am retaining.

Specified by:
dispose in interface TransactionValidator

Copyright 2002, 2007 IBM Corporation and others.
All Rights Reserved.