package moulder.values;
import moulder.Value;
/**
* A <code>Value</code> that transforms the values generated by another delegate
* <code>Value</code>
*
* @param <S> the delegate <code>Value</code> value's type
* @param <T> the resulting value's type
* @author jawher
*/
public abstract class ValueTransformer<S, T> implements Value<T> {
private Value<S> delegate;
public ValueTransformer(Value<S> delegate) {
this.delegate = delegate;
}
/**
* Transforms the delegate's <code>Value</code> generated value
*
* @param s the delegate's <code>Value</code> generated value
* @return the transformed value
*/
protected abstract T transform(S s);
/**
* @return the transformed value
*/
public T get() {
return transform(delegate.get());
}
}