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; } }