package org.atdl4j.data;
import java.math.BigDecimal;
import java.math.BigInteger;
import javax.xml.datatype.XMLGregorianCalendar;
import org.atdl4j.data.converter.BooleanConverter;
import org.atdl4j.data.converter.DateTimeConverter;
import org.atdl4j.data.converter.DecimalConverter;
import org.atdl4j.data.converter.IntegerConverter;
import org.atdl4j.data.converter.StringConverter;
import org.atdl4j.fixatdl.core.BooleanT;
import org.atdl4j.fixatdl.core.CharT;
import org.atdl4j.fixatdl.core.CurrencyT;
import org.atdl4j.fixatdl.core.DataT;
import org.atdl4j.fixatdl.core.ExchangeT;
import org.atdl4j.fixatdl.core.IntT;
import org.atdl4j.fixatdl.core.LengthT;
import org.atdl4j.fixatdl.core.LocalMktDateT;
import org.atdl4j.fixatdl.core.MonthYearT;
import org.atdl4j.fixatdl.core.MultipleCharValueT;
import org.atdl4j.fixatdl.core.MultipleStringValueT;
import org.atdl4j.fixatdl.core.NumInGroupT;
import org.atdl4j.fixatdl.core.NumericT;
import org.atdl4j.fixatdl.core.ParameterT;
import org.atdl4j.fixatdl.core.SeqNumT;
import org.atdl4j.fixatdl.core.StringT;
import org.atdl4j.fixatdl.core.TagNumT;
import org.atdl4j.fixatdl.core.UTCDateOnlyT;
import org.atdl4j.fixatdl.core.UTCTimeOnlyT;
import org.atdl4j.fixatdl.core.UTCTimestampT;
import org.atdl4j.fixatdl.layout.CheckBoxListT;
import org.atdl4j.fixatdl.layout.CheckBoxT;
import org.atdl4j.fixatdl.layout.ClockT;
import org.atdl4j.fixatdl.layout.ControlT;
import org.atdl4j.fixatdl.layout.DoubleSpinnerT;
import org.atdl4j.fixatdl.layout.DropDownListT;
import org.atdl4j.fixatdl.layout.EditableDropDownListT;
import org.atdl4j.fixatdl.layout.HiddenFieldT;
import org.atdl4j.fixatdl.layout.LabelT;
import org.atdl4j.fixatdl.layout.MultiSelectListT;
import org.atdl4j.fixatdl.layout.RadioButtonListT;
import org.atdl4j.fixatdl.layout.RadioButtonT;
import org.atdl4j.fixatdl.layout.SingleSelectListT;
import org.atdl4j.fixatdl.layout.SingleSpinnerT;
import org.atdl4j.fixatdl.layout.SliderT;
import org.atdl4j.fixatdl.layout.TextFieldT;
/*
* NumericT subclasses
import org.atdl4j.fixatdl.core.AmtT;
import org.atdl4j.fixatdl.core.FloatT;
import org.atdl4j.fixatdl.core.PercentageT;
import org.atdl4j.fixatdl.core.PriceT;
import org.atdl4j.fixatdl.core.PriceOffsetT;
import org.atdl4j.fixatdl.core.QtyT;
*/
/**
* Factory that creates the appropriate ParameterTypeConveter depending on the parameter
* or creates the appropriate ControlTypeConveter depending upon the control type.
*
* Note that all UI widgets in ATDL are strongly typed.
*
*/
public class TypeConverterFactory
{
/*
* Create adapter based on ParameterT
*/
public ParameterTypeConverter<?> createParameterTypeConverter(ParameterT parameter)
{
if ( parameter instanceof StringT || parameter instanceof CharT || parameter instanceof MultipleCharValueT
|| parameter instanceof MultipleStringValueT || parameter instanceof CurrencyT || parameter instanceof ExchangeT
|| parameter instanceof DataT )
{
return new StringConverter( parameter );
}
else if ( parameter instanceof NumericT )
{
return new DecimalConverter( parameter ); // Float field
}
else if ( parameter instanceof IntT || parameter instanceof NumInGroupT || parameter instanceof SeqNumT || parameter instanceof TagNumT
|| parameter instanceof LengthT )
{
return new IntegerConverter( parameter ); // Integer field
}
else if ( parameter instanceof BooleanT )
{
return new BooleanConverter( (BooleanT) parameter );
}
else if ( parameter instanceof MonthYearT || parameter instanceof UTCTimestampT || parameter instanceof UTCTimeOnlyT
|| parameter instanceof LocalMktDateT || parameter instanceof UTCDateOnlyT )
{
return new DateTimeConverter( parameter );
}
else
{
throw new IllegalArgumentException( "Unsupported ParameterT type: " + parameter.getClass().getName() );
}
}
/*
* Create adapter based on ControlT (native type for each control)
*/
public ControlTypeConverter<?> createControlTypeConverter(ControlT control, ParameterTypeConverter<?> aParameterTypeConverter)
{
if ( control instanceof TextFieldT || control instanceof SingleSelectListT || control instanceof MultiSelectListT
|| control instanceof CheckBoxListT || control instanceof DropDownListT || control instanceof EditableDropDownListT
|| control instanceof RadioButtonListT || control instanceof HiddenFieldT || control instanceof LabelT )
{
return new StringConverter( aParameterTypeConverter );
}
else if ( control instanceof SliderT )
{
return new StringConverter( aParameterTypeConverter );
}
else if ( control instanceof SingleSpinnerT || control instanceof DoubleSpinnerT )
{
return new DecimalConverter( aParameterTypeConverter );
}
else if ( control instanceof CheckBoxT || control instanceof RadioButtonT )
{
return new BooleanConverter( aParameterTypeConverter );
}
else if ( control instanceof ClockT )
{
return new DateTimeConverter( aParameterTypeConverter );
}
else
{
throw new IllegalArgumentException( "Unsupported ControlT type: " + control.getClass().getName() );
}
}
/*
* Returns an Object that is an instanceof the Parameter's base data type
* (eg String, BigDecimal, DateTime, etc)
*/
// 3/12/2010 Scott Atwell added
public Class<?> getParameterDatatype(ParameterT aParameter) {
if (aParameter instanceof StringT || aParameter instanceof CharT
|| aParameter instanceof MultipleCharValueT
|| aParameter instanceof MultipleStringValueT
|| aParameter instanceof CurrencyT
|| aParameter instanceof ExchangeT
|| aParameter instanceof DataT) {
return String.class;
} else if (aParameter instanceof NumericT) {
return BigDecimal.class; // Float field
} else if (aParameter instanceof IntT
|| aParameter instanceof NumInGroupT
|| aParameter instanceof SeqNumT
|| aParameter instanceof TagNumT
|| aParameter instanceof LengthT) {
return BigInteger.class; // Integer field
} else if (aParameter instanceof BooleanT) {
return Boolean.class;
} else if (aParameter instanceof MonthYearT) {
return String.class;
} else if (aParameter instanceof UTCTimestampT
|| aParameter instanceof UTCTimeOnlyT
|| aParameter instanceof LocalMktDateT
|| aParameter instanceof UTCDateOnlyT) {
return XMLGregorianCalendar.class;
} else {
throw new IllegalArgumentException("Unsupported ParameterT type: "
+ aParameter.getClass().getName());
}
}
}