package org.tessell.model.properties;
import org.tessell.model.values.DerivedValue;
/**
* Creates a derived property where the subclass's {@link #getDerivedValue()} can
* return a calculated value and we will automatically update anytime values
* used in the calculation change.
*
* E.g.:
*
* <code>
* DerivedProperty<String> withSuffix = new DerivedProperty<String>() {
* protected String getDerivedValue() {
* return otherProperty.get() + " suffix";
* }
* };
* </code>
*/
public abstract class DerivedProperty<P> extends AbstractProperty<P, DerivedProperty<P>> {
public DerivedProperty() {
initializeValue(new DerivedValue<P>() {
public P get() {
return DerivedProperty.this.getDerivedValue();
}
});
}
protected abstract P getDerivedValue();
@Override
protected DerivedProperty<P> getThis() {
return this;
}
}