package org.marketcetera.photon.commons.databinding;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* A strongly typed observable value.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: TypedObservableValue.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
*/
@ClassVersion("$Id: TypedObservableValue.java 16154 2012-07-14 16:34:05Z colin $")
public abstract class TypedObservableValue<T> extends
AbstractObservableValue implements ITypedObservableValue<T> {
private final Class<T> mType;
/**
* Constructor.
*
* @param type
* type parameter
*/
protected TypedObservableValue(Class<T> type) {
mType = type;
}
@Override
public final Object getValueType() {
return mType;
}
/**
* Returns the typed value, equivalent to {@link #getValue()}.
*
* @return the typed value
*/
public final T getTypedValue() {
return mType.cast(getValue());
}
@Override
protected final void doSetValue(Object value) {
doSetTypedValue(mType.cast(value));
}
protected abstract void doSetTypedValue(T value);
@Override
protected abstract T doGetValue();
}