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 theTransactionalPropertyWrapperare 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 voidcommit()Commits and ends the transaction that is in progress.voiddetachFromProperty()Removes the ValueChangeListener from wrapped Property that was added by TransactionalPropertyWrapper.protected voidendTransaction()protected voidfireValueChange()Sends a value change event to all registered listeners.ClassgetType()Returns the type of the Property.TgetValue()Gets the value stored in the Property.Property<T>getWrappedProperty()booleanisReadOnly()Tests if the Property is in read-only mode.voidrollback()Aborts and rolls back the transaction that is in progress.voidsetReadOnly(boolean newStatus)Sets the Property's read-only mode to the specified status.voidsetValue(T newValue)Sets the value of the Property.voidstartTransaction()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:PropertyReturns the type of the Property. The methodsgetValueandsetValuemust be compatible with this type: one must be able to safely cast the value returned fromgetValueto the given type and pass any variable assignable to this type as an argument tosetValue.
-
getValue
public T getValue()
Description copied from interface:PropertyGets 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:PropertySets 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.ReadOnlyExceptionin this function.- Specified by:
setValuein 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.TransactionalStarts 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.ValueChangeEvents must not be emitted for internal value changes during a transaction. If the value changes as a result ofProperty.Transactional.commit(), aProperty.ValueChangeEventshould be emitted.- Specified by:
startTransactionin interfaceProperty.Transactional<T>
-
commit
public void commit()
Description copied from interface:Property.TransactionalCommits and ends the transaction that is in progress.If the value is changed as a result of this operation, a
Property.ValueChangeEventis 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:
commitin interfaceProperty.Transactional<T>
-
rollback
public void rollback()
Description copied from interface:Property.TransactionalAborts and rolls back the transaction that is in progress.The value is reset to the value before the transaction started. No
Property.ValueChangeEventis 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:
rollbackin interfaceProperty.Transactional<T>
-
endTransaction
protected void endTransaction()
-
fireValueChange
protected void fireValueChange()
Description copied from class:AbstractPropertySends a value change event to all registered listeners.- Overrides:
fireValueChangein classAbstractProperty<T>
-
isReadOnly
public boolean isReadOnly()
Description copied from class:AbstractPropertyTests if the Property is in read-only mode. In read-only mode calls to the methodsetValuewill throwReadOnlyExceptionand will not modify the value of the Property. Override for additional restrictions on what is considered a read-only property.- Specified by:
isReadOnlyin interfaceProperty<T>- Overrides:
isReadOnlyin classAbstractProperty<T>- Returns:
trueif the Property is in read-only mode,falseif it's not
-
setReadOnly
public void setReadOnly(boolean newStatus)
Description copied from interface:PropertySets the Property's read-only mode to the specified status. This functionality is optional, but all properties must implement theisReadOnlymode query correctly.- Specified by:
setReadOnlyin interfaceProperty<T>- Overrides:
setReadOnlyin classAbstractProperty<T>- Parameters:
newStatus- new read-only status of the Property
-
-