package br.com.caelum.iogi.conversion;
import br.com.caelum.iogi.reflection.Target;
public class FallbackConverter<T> extends TypeConverter<T> {
private final TypeConverter<T> delegate;
private final T fallbackValue;
public static <T> FallbackConverter<T> fallbackToNull(final TypeConverter<T> delegate) {
return new FallbackConverter<T>(delegate, null);
}
public static <T> FallbackConverter<T> fallbackTo(final TypeConverter<T> delegate, final T fallbackValue) {
return new FallbackConverter<T>(delegate, fallbackValue);
}
public FallbackConverter(final TypeConverter<T> delegate, final T fallbackValue) {
this.delegate = delegate;
this.fallbackValue = fallbackValue;
}
@Override
protected T convert(final String stringValue, final Target<?> to) throws Exception {
if (stringValue.length() == 0)
return fallbackValue;
return delegate.convert(stringValue, to);
}
public boolean isAbleToInstantiate(final Target<?> target) {
return delegate.isAbleToInstantiate(target);
}
}