Class TransactionalPropertyWrapper<T>
- java.lang.Object
-
- com.vaadin.data.util.AbstractProperty<T>
-
- 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 theTransactionalPropertyWrapper
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
- 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
Constructors Constructor Description TransactionalPropertyWrapper(Property<T> wrappedProperty)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
commit()
Commits and ends the transaction that is in progress.void
detachFromProperty()
Removes the ValueChangeListener from wrapped Property that was added by TransactionalPropertyWrapper.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()
boolean
isReadOnly()
Tests if the Property is in read-only mode.void
rollback()
Aborts and rolls back the transaction that is in progress.void
setReadOnly(boolean newStatus)
Sets the Property's read-only mode to the specified status.void
setValue(T newValue)
Sets the value of the Property.void
startTransaction()
Starts a transaction.-
Methods inherited from class com.vaadin.data.util.AbstractProperty
addListener, addListener, addReadOnlyStatusChangeListener, addValueChangeListener, fireReadOnlyStatusChange, getListeners, removeListener, removeListener, removeReadOnlyStatusChangeListener, removeValueChangeListener, 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, addValueChangeListener, removeListener, removeValueChangeListener
-
-
-
-
Method Detail
-
detachFromProperty
public void detachFromProperty()
Removes the ValueChangeListener from wrapped Property that was added by TransactionalPropertyWrapper.- Since:
- 7.1.15
-
getType
public Class getType()
Description copied from interface:Property
Returns the type of the Property. The methodsgetValue
andsetValue
must be compatible with this type: one must be able to safely cast the value returned fromgetValue
to the given type and pass any variable assignable to this type as an argument tosetValue
.
-
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().
-
setValue
public void setValue(T 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
Note : Since Vaadin 7.0, setting the value of a non-String property as a String is no longer supported.Property.ReadOnlyException
in this function.- Specified by:
setValue
in interfaceProperty<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. CallingProperty.Transactional.rollback()
while in a transaction must rollback the value to what it was before the transaction started.Property.ValueChangeEvent
s must not be emitted for internal value changes during a transaction. If the value changes as a result ofProperty.Transactional.commit()
, aProperty.ValueChangeEvent
should be emitted.- Specified by:
startTransaction
in interfaceProperty.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 interfaceProperty.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 interfaceProperty.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 classAbstractProperty<T>
-
isReadOnly
public boolean isReadOnly()
Description copied from class:AbstractProperty
Tests if the Property is in read-only mode. In read-only mode calls to the methodsetValue
will throwReadOnlyException
and will not modify the value of the Property. Override for additional restrictions on what is considered a read-only property.- Specified by:
isReadOnly
in interfaceProperty<T>
- Overrides:
isReadOnly
in classAbstractProperty<T>
- Returns:
true
if the Property is in read-only mode,false
if it's not
-
setReadOnly
public void setReadOnly(boolean newStatus)
Description copied from interface:Property
Sets the Property's read-only mode to the specified status. This functionality is optional, but all properties must implement theisReadOnly
mode query correctly.- Specified by:
setReadOnly
in interfaceProperty<T>
- Overrides:
setReadOnly
in classAbstractProperty<T>
- Parameters:
newStatus
- new read-only status of the Property
-
-