package org.jboss.windup.ui;
import java.util.concurrent.Callable;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.windup.config.ConfigurationOption;
/**
* An adapter between {@link ConfigurationOption#getDefaultValue()} default values, and
* {@link UIInput#setDefaultValue(Callable)}
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class DefaultValueAdapter<T> implements Callable<T>
{
private ConfigurationOption option;
private Class<T> expectedType;
public DefaultValueAdapter(ConfigurationOption option, Class<T> expectedType)
{
this.option = option;
this.expectedType = expectedType;
}
public DefaultValueAdapter(ConfigurationOption option)
{
this(option, null);
}
@Override
@SuppressWarnings("unchecked")
public T call() throws Exception
{
Object val = this.option.getDefaultValue();
if (val != null && this.expectedType != null && !this.expectedType.isAssignableFrom(val.getClass()))
{
throw new IllegalStateException("Windup option " + option.getName() +
" was expected to return " + expectedType.getName() + " but returned " + val.getClass());
}
return (T) val;
}
}