/* * Created on Feb 21, 2010 * */ package org.atdl4j.ui.impl; import java.math.BigDecimal; import java.math.RoundingMode; import org.atdl4j.config.Atdl4jOptions; import org.atdl4j.data.Atdl4jConstants; import org.atdl4j.fixatdl.core.ParameterT; 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; /** * * This class contains the data associated with the <code>ControlHelper</code>. * * Creation date: (Feb 21, 2010 5:44:02 PM) * @author Scott Atwell * @version 1.0, Feb 21, 2010 */ public class ControlHelper { // 9/11/2010 John Shields adding back previous interface for Swing usage public static BigDecimal getIncrementValue(ControlT aControl, Atdl4jOptions aAtdl4jOptions) { return getIncrementValue(aControl, aAtdl4jOptions, 0); } /** * @param aControl * @param aAtdl4jOptions * @param aDigits * @return */ public static BigDecimal getIncrementValue( ControlT aControl, Atdl4jOptions aAtdl4jOptions, int aDigits ) { if ( aControl instanceof SingleSpinnerT ) { return determineIncrementValue( ((SingleSpinnerT) aControl).getIncrement(), ((SingleSpinnerT) aControl).getIncrementPolicy(), aAtdl4jOptions, aDigits ); } return null; } // 9/11/2010 John Shields adding back previous interface for Swing usage public static BigDecimal getInnerIncrementValue(ControlT aControl, Atdl4jOptions aAtdl4jOptions) { return getInnerIncrementValue(aControl, aAtdl4jOptions, 0); } /** * @param aControl * @param aAtdl4jOptions * @param aDigits * @return */ public static BigDecimal getInnerIncrementValue( ControlT aControl, Atdl4jOptions aAtdl4jOptions, int aDigits ) { if ( aControl instanceof DoubleSpinnerT ) { return determineIncrementValue( ((DoubleSpinnerT) aControl).getInnerIncrement(), ((DoubleSpinnerT) aControl).getInnerIncrementPolicy(), aAtdl4jOptions, aDigits ); } return null; } /** * @param aControl * @param aAtdl4jOptions * @return */ public static BigDecimal getOuterIncrementValue( ControlT aControl, Atdl4jOptions aAtdl4jOptions ) { if ( aControl instanceof DoubleSpinnerT ) { return determineIncrementValue( ((DoubleSpinnerT) aControl).getOuterIncrement(), ((DoubleSpinnerT) aControl).getOuterIncrementPolicy(), aAtdl4jOptions ); } return null; } /** * @param aIncrement * @param aIncrementPolicy * @param aAtdl4jOptions * @param aDigits * @return */ public static BigDecimal determineIncrementValue( Double aIncrement, String aIncrementPolicy, Atdl4jOptions aAtdl4jOptions, int aDigits ) { BigDecimal tempBigDecimal = determineIncrementValue( aIncrement, aIncrementPolicy, aAtdl4jOptions ); if ( tempBigDecimal != null ) { BigDecimal tempBigDecimal2 = tempBigDecimal.setScale( aDigits, RoundingMode.HALF_UP ); if ( tempBigDecimal2.doubleValue() == 0.0d ) { // -- if aDigits is 2 then ".01" -- return new BigDecimal( 1 ).scaleByPowerOfTen( - aDigits ); } else { return tempBigDecimal2; } } else { return tempBigDecimal; } } /** * @param aIncrement * @param aIncrementPolicy * @param aAtdl4jOptions * @return */ public static BigDecimal determineIncrementValue( Double aIncrement, String aIncrementPolicy, Atdl4jOptions aAtdl4jOptions ) { // -- FIXatdl 1.1 Schema documentation: -- // <xs:documentation> // Describes how to use increment. If undefined then take value from increment // attribute, if LotSize use value based on symbol lot size. (If lot size is not available use value of // increment attribute.) If Tick use value based on symbol tick size. (If tick size is not available // use value of increment attribute.) If increment is to be used and is not defined then use a system // default value. // </xs:documentation> if ( Atdl4jConstants.INCREMENT_POLICY_LOT_SIZE.equals( aIncrementPolicy ) ) { if ( ( aAtdl4jOptions != null ) && ( aAtdl4jOptions.getInputAndFilterData() != null ) && ( aAtdl4jOptions.getInputAndFilterData().getInputIncrementPolicy_LotSize() != null ) ) { return aAtdl4jOptions.getInputAndFilterData().getInputIncrementPolicy_LotSize(); } else if ( aIncrement != null ) { return new BigDecimal( aIncrement.toString() ); } else { return aAtdl4jOptions.getDefaultLotSizeIncrementValue(); } } else if ( Atdl4jConstants.INCREMENT_POLICY_TICK.equals( aIncrementPolicy ) ) { if ( ( aAtdl4jOptions != null ) && ( aAtdl4jOptions.getInputAndFilterData() != null ) && ( aAtdl4jOptions.getInputAndFilterData().getInputIncrementPolicy_Tick() != null ) ) { return aAtdl4jOptions.getInputAndFilterData().getInputIncrementPolicy_Tick(); } else if ( aIncrement != null ) { return new BigDecimal( aIncrement.toString() ); } else { return aAtdl4jOptions.getDefaultTickIncrementValue(); } } else // -- Use aIncrement value when aIncrementPolicy null or Atdl4jConstants.INCREMENT_POLICY_STATIC -- { if ( aIncrement != null ) { return new BigDecimal( aIncrement.toString() ); } else { return aAtdl4jOptions.getDefaultIncrementValue(); } } } /** * Handles ControlT/@initPolicy ("UseValue" or "UseFixField") logic in conjunction with ControlT/@initValue and ControlT/@initFixField * Returns null if ControlT/@initValue is the special null indicator: VALUE_NULL_INDICATOR * @param aControl * @param aAtdl4jOptions * @return */ public static Object getInitValue( ControlT aControl, Atdl4jOptions aAtdl4jOptions ) { // INIT_POLICY_USE_VALUE = "UseValue"; // -- use value from ControlT/@initValue -- // INIT_POLICY_USE_FIX_FIELD = "UseFixField"; // -- use value from ControlT/@initFixField if available, else ControlT/@initValue -- if ( Atdl4jConstants.INIT_POLICY_USE_FIX_FIELD.equals( aControl.getInitPolicy() ) ) { if ( aControl.getInitFixField() == null ) { throw new IllegalArgumentException( "ERROR: Control: " + aControl.getID() + " has initPolicy=\"" + aControl.getInitPolicy() + "\" but does not have initFixField set." ); } if ( ( aAtdl4jOptions == null ) || ( aAtdl4jOptions.getInputAndFilterData() == null ) ) { throw new IllegalArgumentException( "ERROR: Control: " + aControl.getID() + " has initPolicy=\"" + aControl.getInitPolicy() + "\" but Atdl4jOptions is null." ); } String tempFixFieldValue = aAtdl4jOptions.getInputAndFilterData().getInputHiddenFieldValue( aControl.getInitFixField().toString() ); if ( tempFixFieldValue != null ) { // -- "FIX_[fieldname]" value found, return it -- return tempFixFieldValue; } } // -- Get the 'raw' ControlT/@initValue -- Object tempInitValueRaw = getInitValueRaw( aControl ); // -- Special handling to check for VALUE_NULL_INDICATOR -- if ( Atdl4jConstants.VALUE_NULL_INDICATOR.equals( tempInitValueRaw ) ) { return null; } else { return tempInitValueRaw; } } /** * Returns raw/actual value (could be "{NULL}" string) from ControlT/@initValue * @param aControl * @return */ public static Object getInitValueRaw( ControlT aControl ) { // -- initPolicy is INIT_POLICY_USE_VALUE or no input field value supplied/found for ControlT/@initFixField -- if ( aControl instanceof CheckBoxT ) { return ((CheckBoxT) aControl).isInitValue(); } else if ( aControl instanceof CheckBoxListT ) { return ((CheckBoxListT) aControl).getInitValue(); } else if ( aControl instanceof ClockT ) { return ((ClockT) aControl).getInitValue(); } else if ( aControl instanceof DoubleSpinnerT ) { return ((DoubleSpinnerT) aControl).getInitValue(); } else if ( aControl instanceof DropDownListT ) { return ((DropDownListT) aControl).getInitValue(); } else if ( aControl instanceof EditableDropDownListT ) { return ((EditableDropDownListT) aControl).getInitValue(); } else if ( aControl instanceof HiddenFieldT ) { return ((HiddenFieldT) aControl).getInitValue(); } else if ( aControl instanceof LabelT ) { return ((LabelT) aControl).getInitValue(); } else if ( aControl instanceof MultiSelectListT ) { return ((MultiSelectListT) aControl).getInitValue(); } else if ( aControl instanceof RadioButtonT ) { return ((RadioButtonT) aControl).isInitValue(); } else if ( aControl instanceof RadioButtonListT ) { return ((RadioButtonListT) aControl).getInitValue(); } else if ( aControl instanceof SingleSelectListT ) { return ((SingleSelectListT) aControl).getInitValue(); } else if ( aControl instanceof SingleSpinnerT ) { return ((SingleSpinnerT) aControl).getInitValue(); } else if ( aControl instanceof SliderT ) { return ((SliderT) aControl).getInitValue(); } else if ( aControl instanceof TextFieldT ) { return ((TextFieldT) aControl).getInitValue(); } return null; } public static String getLabelOrID( ControlT aControl ) { return (aControl.getLabel() != null && !"".equals(aControl.getLabel())) ? aControl.getLabel() : aControl.getID(); } /** * Handles ControlT/@initPolicy ("UseValue" or "UseFixField") logic in conjunction with ControlT/@initValue and ControlT/@initFixField * Returns null if ControlT/@initValue is the special null indicator: VALUE_NULL_INDICATOR * Also has special handling for LabelT which may simply use "label=" vs. "initValue=" for its value. * @param aControl * @param aAtdl4jOptions * @return */ public static Object getReinitValue( ControlT aControl, Atdl4jOptions aAtdl4jOptions ) { Object tempInitValue = getInitValue( aControl, aAtdl4jOptions ); if ( ( tempInitValue == null ) && ( aControl instanceof LabelT ) ) { // -- LabelT may simply use "label=" and do not want to lose it upon reinit -- return ((LabelT) aControl).getLabel(); } else { return tempInitValue; } } /** * Returns the default number of Spinner control "digits" for the specified aParameter * @param aParameter * @param aAtdl4jOptions * @return */ public static int getDefaultDigitsForSpinnerControl( ParameterT aParameter, Atdl4jOptions aAtdl4jOptions ) { // -- not specified via rule above, use default if we have one within Atdl4jOptions -- if ( aAtdl4jOptions != null ) { return aAtdl4jOptions.getDefaultDigitsForSpinnerControl( aParameter ); } else { return 0; } } /** * Returns true if Control can toggle between two boolean states. * @param aControl * @return */ public static boolean isControlToggleable( ControlT aControl ) { if ( ( aControl instanceof CheckBoxT ) || ( aControl instanceof RadioButtonT ) ) { return true; } else { return false; } } }