com.vaadin.data.util
Class TransactionalPropertyWrapper<T>

java.lang.Object
  extended by com.vaadin.data.util.AbstractProperty<T>
      extended by com.vaadin.data.util.TransactionalPropertyWrapper<T>
Type Parameters:
T -
All Implemented Interfaces:
Property<T>, Property.ReadOnlyStatusChangeNotifier, Property.Transactional<T>, Property.ValueChangeNotifier, Serializable

public class TransactionalPropertyWrapper<T>
extends AbstractProperty<T>
implements Property.ValueChangeNotifier, Property.Transactional<T>

Wrapper class that helps implement two-phase commit for a non-transactional property. When accessing the property through the wrapper, getting and setting the property value take place immediately. However, the wrapper keeps track of the old value of the property so that it can be set for the property in case of a roll-back. This can result in the underlying property value changing multiple times (first based on modifications made by the application, then back upon roll-back). Value change events on the TransactionalPropertyWrapper are only fired at the end of a successful transaction, whereas listeners attached to the underlying property may receive multiple value change events.

Since:
7.0
Version:
@version@
Author:
Vaadin Ltd
See Also:
Property.Transactional, Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class com.vaadin.data.util.AbstractProperty
AbstractProperty.ReadOnlyStatusChangeEvent
 
Nested classes/interfaces inherited from interface com.vaadin.data.Property
Property.Editor, Property.ReadOnlyException, Property.ReadOnlyStatusChangeEvent, Property.ReadOnlyStatusChangeListener, Property.ReadOnlyStatusChangeNotifier, Property.Transactional<T>, Property.ValueChangeEvent, Property.ValueChangeListener, Property.ValueChangeNotifier, Property.Viewer
 
Constructor Summary
TransactionalPropertyWrapper(Property<T> wrappedProperty)
           
 
Method Summary
 void commit()
          Commits and ends the transaction that is in progress.
protected  void endTransaction()
           
protected  void fireValueChange()
          Sends a value change event to all registered listeners.
 Class getType()
          Returns the type of the Property.
 T getValue()
          Gets the value stored in the Property.
 Property<T> getWrappedProperty()
           
 void rollback()
          Aborts and rolls back the transaction that is in progress.
 void setValue(Object newValue)
          Sets the value of the Property.
 void startTransaction()
          Starts a transaction.
 
Methods inherited from class com.vaadin.data.util.AbstractProperty
addListener, addListener, fireReadOnlyStatusChange, getListeners, isReadOnly, removeListener, removeListener, setReadOnly, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.vaadin.data.Property.ValueChangeNotifier
addListener, removeListener
 
Methods inherited from interface com.vaadin.data.Property
isReadOnly, setReadOnly
 

Constructor Detail

TransactionalPropertyWrapper

public TransactionalPropertyWrapper(Property<T> wrappedProperty)
Method Detail

getType

public Class getType()
Description copied from interface: Property
Returns the type of the Property. The methods getValue and setValue must be compatible with this type: one must be able to safely cast the value returned from getValue to the given type and pass any variable assignable to this type as an argument to setValue.

Specified by:
getType in interface Property<T>
Returns:
type of the Property

getValue

public T getValue()
Description copied from interface: Property
Gets the value stored in the Property. The returned object is compatible with the class returned by getType().

Specified by:
getValue in interface Property<T>
Returns:
the value stored in the Property

setValue

public void setValue(Object newValue)
              throws Property.ReadOnlyException
Description copied from interface: Property
Sets the value of the Property.

Implementing this functionality is optional. If the functionality is missing, one should declare the Property to be in read-only mode and throw Property.ReadOnlyException in this function.

Note : Since Vaadin 7.0, setting the value of a non-String property as a String is no longer supported.

Specified by:
setValue in interface Property<T>
Parameters:
newValue - New value of the Property. This should be assignable to the type returned by getType
Throws:
Property.ReadOnlyException - if the object is in read-only mode

startTransaction

public void startTransaction()
Description copied from interface: Property.Transactional
Starts a transaction.

If the value is set during a transaction the value must not replace the original value until Property.Transactional.commit() is called. Still, Property.getValue() must return the current value set in the transaction. Calling Property.Transactional.rollback() while in a transaction must rollback the value to what it was before the transaction started.

Property.ValueChangeEvents must not be emitted for internal value changes during a transaction. If the value changes as a result of Property.Transactional.commit(), a Property.ValueChangeEvent should be emitted.

Specified by:
startTransaction in interface Property.Transactional<T>

commit

public void commit()
Description copied from interface: Property.Transactional
Commits and ends the transaction that is in progress.

If the value is changed as a result of this operation, a Property.ValueChangeEvent is emitted if such are supported.

This method has no effect if there is no transaction is in progress.

This method must never throw an exception.

Specified by:
commit in interface Property.Transactional<T>

rollback

public void rollback()
Description copied from interface: Property.Transactional
Aborts and rolls back the transaction that is in progress.

The value is reset to the value before the transaction started. No Property.ValueChangeEvent is emitted as a result of this.

This method has no effect if there is no transaction is in progress.

This method must never throw an exception.

Specified by:
rollback in interface Property.Transactional<T>

endTransaction

protected void endTransaction()

fireValueChange

protected void fireValueChange()
Description copied from class: AbstractProperty
Sends a value change event to all registered listeners.

Overrides:
fireValueChange in class AbstractProperty<T>

getWrappedProperty

public Property<T> getWrappedProperty()


Copyright © 2000-2011 Vaadin Ltd. All Rights Reserved.