Package DisplayProject.factory

Source Code of DisplayProject.factory.DataFieldFactory

/*
Copyright (c) 2003-2009 ITerative Consulting Pty Ltd. All Rights Reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:

o Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
 
o Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the distribution.
   
o This jcTOOL Helper Class software, whether in binary or source form may not be used within,
or to derive, any other product without the specific prior written permission of the copyright holder

 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


*/
package DisplayProject.factory;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.SystemColor;
import java.text.Format;

import javax.swing.JComboBox;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.JFormattedTextField.AbstractFormatterFactory;
import javax.swing.text.DefaultFormatterFactory;

import DisplayProject.CompoundField;
import DisplayProject.Constants;
import DisplayProject.DataField;
import DisplayProject.DataFieldFormatterFactory;
import DisplayProject.DataFieldVerifier;
import DisplayProject.DateFieldEditListener;
import DisplayProject.FixedLengthDocument;
import DisplayProject.GridCell;
import DisplayProject.NumericFormatter;
import DisplayProject.PasswordDataField;
import DisplayProject.WindowSystem;
import DisplayProject.actions.ColourChange;
import DisplayProject.actions.Parent;
import DisplayProject.actions.TextValue;
import DisplayProject.actions.WidgetState;
import Framework.AmountFormatter;
import Framework.DecimalFormatter;
import Framework.IntegerFormatter;
import Framework.NumericData;
import Framework.PercentFormatter;
import Framework.TextData;

/**
* A factory to create DataField Instances
*
*
*/
public class DataFieldFactory {
    private static final String cDefaultDateMask   = "##/##/####";
    public  static final String cDefaultDatePattern = "dd/MM/yyyy";

    // private static Font defaultFont = new Font("tahoma",java.awt.Font.PLAIN, 11);
    private static Font defaultFont = null;

    private DataFieldFactory() {
        super();
    }
    /**
     * Creates a new DataField instance
     * @param name the name of he DataField
     * @param columns The number of columns in width
     * @param MaskType The Mask type. Allowable values are:
     * <li> Constants.MK_ALPHA_LOWER</li>
     * <li> Constants.MK_ALPHA_MIXED</li>
     * <li> Constants.MK_ALPHA_UPPER</li>
     * <li> Constants.MK_ALPHANUM_LOWER</li>
     * <li> Constants.MK_ALPHANUM_MIXED</li>
     * <li> Constants.MK_ALPHANUM_UPPER</li>
     * <li> Constants.MK_DEFAULT</li>
     * <li> Constants.MK_FLOAT</li>
     * <li> Constants.MK_INTEGER</li>
     * <li> Constants.MK_LOWERCASE</li>
     * <li> Constants.MK_NONE</li>
     * <li> Constants.MK_NUMERIC</li>
     * <li> Constants.MK_TEMPLATE</li>
     * <li> Constants.MK_UPPERCASE</li>
     *
     * @param allowsNull Indicates weather a null value is allowed, used with Nullable Data types
     * @return
     */
    public static DataField newDataField(String name, int columns, int MaskType, boolean allowsNull){
        DataField df = newDataField(name, columns, MaskType);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    /**
     * Creates a new DataField instance
     * @param name the name of he DataField
     * @param columns The number of columns in width
     * @param maskType The Mask type. Allowable values are:
     * <li> Constants.MK_ALPHA_LOWER</li>
     * <li> Constants.MK_ALPHA_MIXED</li>
     * <li> Constants.MK_ALPHA_UPPER</li>
     * <li> Constants.MK_ALPHANUM_LOWER</li>
     * <li> Constants.MK_ALPHANUM_MIXED</li>
     * <li> Constants.MK_ALPHANUM_UPPER</li>
     * <li> Constants.MK_DEFAULT</li>
     * <li> Constants.MK_FLOAT</li>
     * <li> Constants.MK_INTEGER</li>
     * <li> Constants.MK_LOWERCASE</li>
     * <li> Constants.MK_NONE</li>
     * <li> Constants.MK_NUMERIC</li>
     * <li> Constants.MK_TEMPLATE</li>
     * <li> Constants.MK_UPPERCASE</li>
     *
     */
    public static DataField newDataField(String name, int columns, int maskType){
        DataField df = newDataField(name, columns);
        df.setMaskType(maskType);
        df.setInputVerifier(new DataFieldVerifier());
        return df;
    }
    /**
     * Creates an new DataField
     * @param name the name of the DataField
     * @param columns The number of columns in width
     * @param format The format of the data
     * @param allowsNull Indicates weather a null value is allowed, used with Nullable Data types
     * @return
     */
    public static DataField newDataField(String name, int columns, Format format, boolean allowsNull){
        DataField df = newDataField(name, columns, format);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    /**
     * Creates an new DataField
     * @param name the name of the DataField
     * @param columns The number of columns in width
     * @param format The format of the data
     */
    public static DataField newDataField(String name, int columns, Format format) {
        DataField df = new DataField(format);
        df.setName(name);
        df.setColumns(columns);
        df.setOpaque(true);
        df.setInputVerifier(new DataFieldVerifier());
        setFont(df);
        // TF:17 Sep 2009:Moved this into the actual control
        // df.addMouseListener(StatusTextListener.sharedInstance()); //PM:1/5/08
        return df;
    }
    /**
     * Creates an new DataField
     * @param name the name of the DataField
     * @param columns The number of columns in width
     * @param allowsNull Indicates weather a null value is allowed, used with Nullable Data types
     * @return
     */
    public static DataField newDataField(String name, int columns, boolean allowsNull){
        DataField df = newDataField(name, columns);
        df.setNullValueAllowed(allowsNull);
        return df;
    }

    /**
     * Create a new data field
     * @return
     */
    public static DataField newDataField() {
        DataField df = new DataField();
        df.setOpaque(true);
        df.setDocument(new FixedLengthDocument(0));
        df.setInputVerifier(new DataFieldVerifier());
        // Install a factory that knows about data value instances
        df.setFormatterFactory(new DataFieldFormatterFactory());
        df.setDisabledTextColor(SystemColor.windowText);
        setFont(df);
        // TF:17 Sep 2009:Moved this into the actual control
        // df.addMouseListener(StatusTextListener.sharedInstance()); //PM:1/5/08
        return df;
    }

    /**
     * Creates an new DataField
     * @param name the name of the DataField
     * @param columns The number of columns in width
     * @return
     */
    public static DataField newDataField(String name, int columns){
        DataField df = newDataField();
        df.setName(name);
        df.setColumns(columns);
        return df;
    }
    private static Font getDefaultFont() {
        if (defaultFont == null) {
            // TF:15/07/2008:Changed this to be the window system 8 point font (which will resolve to Tahoma 11pt)
            defaultFont = WindowSystem.getPortableFont(80, Constants.TF_SYSTEM_DEFAULT, false, false);
        }

        return defaultFont;
    }
    private static void setFont(DataField df) {
        getDefaultFont();
        if (defaultFont != null) {
            df.setFont(defaultFont);
        }
    }

    private static void setFont(PasswordDataField pdf) {
        getDefaultFont();
        if (defaultFont != null) {
            pdf.setFont(defaultFont);
        }
    }

    public static DataField newDataField(String name, int columns, AbstractFormatter formatter, boolean allowsNull) {
        DataField df = newDataField(name, columns, formatter);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatter formatter) {
        DataField df = new DataField(formatter);
        df.setName(name);
        df.setColumns(columns);
        df.setOpaque(true);
        df.setDocument(new FixedLengthDocument(0));
        df.setInputVerifier(new DataFieldVerifier());
        df.setDisabledTextColor(SystemColor.windowText);
        setFont(df);
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory, boolean allowsNull) {
        DataField df = newDataField(name, columns, factory);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory) {
        DataField df = new DataField(factory);
        df.setName(name);
        df.setColumns(columns);
        df.setOpaque(true);
        df.setInputVerifier(new DataFieldVerifier());
        df.setDisabledTextColor(SystemColor.windowText);
        setFont(df);
        // TF:17 Sep 2009:Moved this into the actual control
        // df.addMouseListener(StatusTextListener.sharedInstance()); //PM:1/5/08
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory, JComboBox cb, boolean allowsNull) {
        DataField df = newDataField(name, columns, factory, cb);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory, JComboBox cb) {
        DataField df = new DataField(factory, cb);
        df.setName(name);
        df.setColumns(columns);
        df.setOpaque(true);
        df.setInputVerifier(new DataFieldVerifier());
        df.setDisabledTextColor(SystemColor.windowText);
        setFont(df);
        // TF:17 Sep 2009:Moved this into the actual control
        // df.addMouseListener(StatusTextListener.sharedInstance()); //PM:1/5/08
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory, Object currentValue, boolean allowsNull) {
        DataField df = newDataField(name, columns, factory, currentValue);
        df.setNullValueAllowed(allowsNull);
        return df;
    }
    public static DataField newDataField(String name, int columns, AbstractFormatterFactory factory, Object currentValue) {
        DataField df = new DataField(factory, currentValue);
        df.setName(name);
        df.setColumns(columns);
        df.setOpaque(true);
        df.setInputVerifier(new DataFieldVerifier());
        df.setDisabledTextColor(SystemColor.windowText);
        setFont(df);
        return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Component parent,
        int row,
        int widthPolicy ) {
      DataField df = newDataField();
      df.setColumns(maxCharacters);
      df.setMinimumSize(new Dimension(minWidthInPixels, df.getMinimumSize().height));
      GridCell cell = GridCell.get(df);
      cell.setCellGravity(gravity);
      cell.setRow(row-1);
      cell.setColumn(column-1);
      Parent.set(df, parent);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        int widthPolicy ) {
      return newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, (Container)parent, row, widthPolicy);
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Component parent,
        int row,
        boolean validateOnKeyStroke,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      df.setValidateOnKeystroke(validateOnKeyStroke);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        TextData textValue,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      TextValue.set(df, textValue);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Container parent,
        int row,
        TextData textValue,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      TextValue.set(df, textValue);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        String textValue,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      TextValue.set(df, textValue);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Container parent,
        int row,
        String textValue,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      TextValue.set(df, textValue);
      return df;
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        boolean validateOnKeyStroke,
        int widthPolicy ) {
      return newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, (Container)parent, row, validateOnKeyStroke, widthPolicy);
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int fillColour,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Container parent,
        int row,
        int state,
        String textValue,
        int widthPolicy ) {
      return newDataField(appData, column, fillColour, gravity, maxCharacters, minWidthInPixels, parent, row, state, TextData.getInstance(textValue), widthPolicy);
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int fillColour,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        int state,
        String textValue,
        int widthPolicy ) {
      return newDataField(appData, column, fillColour, gravity, maxCharacters, minWidthInPixels, (Container)parent, row, state, TextData.getInstance(textValue), widthPolicy);
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int fillColour,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        CompoundField parent,
        int row,
        int state,
        TextData textValue,
        int widthPolicy ) {
      return newDataField(appData, column, fillColour, gravity, maxCharacters, minWidthInPixels, (Container)parent, row, state, textValue, widthPolicy);
    }
   
    public static DataField newDataField(Object appData,
        int column,
        int fillColour,
        int gravity,
        int maxCharacters,
        int minWidthInPixels,
        Container parent,
        int row,
        int state,
        TextData textValue,
        int widthPolicy ) {
      DataField df = newDataField(appData, column, gravity, maxCharacters, minWidthInPixels, parent, row, widthPolicy);
      ColourChange.setBackground(df, fillColour);
      WidgetState.set(df, state);
      TextValue.set(df, textValue);
      return df;
    }
   
    public static PasswordDataField newPasswordField(String name, int columns ){
        PasswordDataField pdf = new PasswordDataField();
        pdf.setName(name);
        pdf.setColumns(columns);
        pdf.setOpaque(true);
        setFont(pdf);
        return pdf;
    }
    //PM:22/05/2008:added to make remediation of express windows easier
    /*
     * comment out this method when Express is not used, and organize imports on this class
     */
//  public static PasswordDataField newPasswordDataField(String name, int columns,
//      Class<TextDomain> klass, int mask) {
//    return newPasswordField(name, columns);
//  }

    public static DataField newPercentageField(String name, int columns, String pattern, int minimumFraction) {
        PercentFormatter editFormatter = new PercentFormatter(pattern, minimumFraction);
        PercentFormatter displayFormatter = new PercentFormatter(pattern, minimumFraction);
        DataField df = newDataField(name, columns, new DefaultFormatterFactory(displayFormatter, displayFormatter, editFormatter, null));
        return df;
    }

    public static DataField newAmountField(String name, int columns, String pattern, int decimalPlaces, Class<?> mappedType) {
        AmountFormatter editFormatter = new AmountFormatter(pattern, decimalPlaces, true, mappedType);
        AmountFormatter displayFormatter = new AmountFormatter(pattern, decimalPlaces, false, mappedType);
        DataField df = newDataField(name, columns, new DefaultFormatterFactory(displayFormatter, displayFormatter, editFormatter, null));
        return df;
    }

    public static DataField newAmountField(String name, int columns, String pattern, int decimalPlaces) {
        return newAmountField(name, columns, pattern, decimalPlaces, null);
    }

    public static DataField newAmountField(String name, int columns, String pattern) {
        return newAmountField(name, columns, pattern, 0, null);
    }

    public static DataField newAmountField(String name, int columns, Class<?> mappedType) {
        return newAmountField(name, columns, "'$'#,##0.00", 2, mappedType);
    }

    public static DataField newDecimalField(String name, int columns, String pattern, int decimalPlaces, Class<?> mappedType) {
        DecimalFormatter editFormatter = new DecimalFormatter(pattern, decimalPlaces, mappedType);
        DecimalFormatter displayFormatter = new DecimalFormatter(pattern, decimalPlaces, mappedType);
        DataField df = newDataField(name, columns, new DefaultFormatterFactory(displayFormatter, displayFormatter, editFormatter, null));
        return df;     
    }

    public static DataField newDecimalField(String name, int columns, String pattern, int decimalPlaces) {
        return newDecimalField(name, columns, pattern, decimalPlaces, null);
    }

    public static DataField newDecimalField(String name, int columns, String pattern) {
        return newDecimalField(name, columns, pattern, 0);
    }

    public static DataField newDecimalField(String name, int columns, String pattern, Class<?> mappedType) {
        return newDecimalField(name, columns, pattern, 0, mappedType);
    }

    public static DataField newIntegerField(String name, int columns) {
        IntegerFormatter editFormatter = new IntegerFormatter("#0");
        IntegerFormatter displayFormatter = new IntegerFormatter("#0");
        DataField df = newDataField(name, columns, new DefaultFormatterFactory(displayFormatter, displayFormatter, editFormatter, null));
        return df;
    }

    public static DataField newDateField(String name, int columns, Class<?> mappedType)
    {
        DataField df = configureFormatter(newDataField(name, columns, Constants.MK_NONE), cDefaultDateMask, '*', cDefaultDatePattern, mappedType);
        df.getDocument().addUndoableEditListener(new DateFieldEditListener(cDefaultDateMask));
        return df;
    }
    /**
     * New Datafield for the specified mapped type
     * @param name
     * @param columns
     * @param mappedType
     * @return  constructed data field instance
     */
    public static DataField newDataField(String name, int columns, Class<?> mappedType)
    {
        return newDataField(name, columns,  mappedType, Constants.MK_NONE);
    }

    /**
     * New data field for the specified mapped type using the given format
     * pattern
     * @param name
     * @param columns
     * @param format
     * @param mappedType
     * @return constructed data field instance
     */
    public static DataField newDataField(String name, int columns, String format, Class<?> mappedType)
    {
      // TF:8/3/08:Changed this to pass TEMPLATE in instead of NONE
        return newDataField(name, columns, format, mappedType, Constants.MK_TEMPLATE);
    }

    /**
     * New datafield for nthe specified mapped type, with the given format pattern and input mask
     * @param name
     * @param columns
     * @param inputMask
     * @param maskPlaceHolder
     * @param format
     * @param mappedType
     * @return constructed data field instance
     */
    public static DataField newDataField(String name, int columns, String inputMask, char maskPlaceHolder, String format, Class<?> mappedType)
    {
        return configureFormatter(newDataField(name, columns, Constants.MK_NONE), inputMask, maskPlaceHolder, format, mappedType);
    }

    /**
     * New datafield for the specified mapped type with a given input mask type
     * @param name
     * @param columns
     * @param mappedType
     * @param pMaskType
     * @return constructed data field instance
     */
    public static DataField newDataField(String name, int columns, Class<?> mappedType, int pMaskType)
    {
        return configureFormatter(newDataField(name, columns, pMaskType), mappedType);
    }

    /**
     * New datafield for the specified mapped type with a given format string and input mask type
     * @param name
     * @param columns
     * @param format
     * @param mappedType
     * @param pMaskType
     * @return constructed data field instance
     */
    public static DataField newDataField(String name, int columns, String format, Class<?> mappedType, int pMaskType)
    {
        return configureFormatter(newDataField(name, columns, pMaskType), format, mappedType);
    }

    /**
     * New datafield for the specified mapped type with a given format string and input mask and input mask type
     * @param name
     * @param columns
     * @param inputMask
     * @param maskPlaceHolder
     * @param mappedType
     * @param pMaskType
     * @return constructed data field instance
     */
    public static DataField newDataField(String name, int columns, String inputMask, char maskPlaceHolder, Class<?> mappedType, int pMaskType)
    {
        return configureFormatter(newDataField(name, columns, pMaskType), inputMask, maskPlaceHolder, mappedType);
    }

    public static DataField configureFormatter(DataField dataField, String inputMask, char maskPlaceHolder, String format, Class<?> mappedType)
    {
        dataField.setFormatterFactory(new DataFieldFormatterFactory(inputMask, maskPlaceHolder, format, mappedType));
        return dataField;
    }

    private static DataField configureFormatter(DataField dataField, String inputMask, char maskPlaceHolder, Class<?> mappedType)
    {
        dataField.setFormatterFactory(new DataFieldFormatterFactory(inputMask, maskPlaceHolder, mappedType));
        return dataField;
    }

    private static DataField configureFormatter(DataField dataField, String format, Class<?> mappedType)
    {
      // TF:6/3/08:Changed this so if it's a numeric format it's just applied here. This is necessary as we need
      // to attach things onto the widget to get this correct.
      if (Number.class.isAssignableFrom(mappedType) ||
          NumericData.class.isAssignableFrom(mappedType) ||
          Double.TYPE.equals(mappedType) ||
          Float.TYPE.equals(mappedType) ||
          Long.TYPE.equals(mappedType) ||
          Integer.TYPE.equals(mappedType) ||
          Short.TYPE.equals(mappedType) ||
          Byte.TYPE.equals(mappedType) ||
          Character.TYPE.equals(mappedType)) {
        NumericFormatter formatter = new NumericFormatter(dataField, format, mappedType);
       
            dataField.setFormatterFactory(new DefaultFormatterFactory(formatter, formatter, formatter, formatter));
        //dataField.setFormatterFactory(new DataFieldFormatterFactory(mappedType, formatter));
            dataField.setOriginalFormatText(format);
      }
      //PM:18/3/08 date for
      else {
        dataField.setFormatterFactory(new DataFieldFormatterFactory(format, mappedType));
      }
        return dataField;
    }

    private static DataField configureFormatter(DataField dataField, Class<?> mappedType)
    {
        dataField.setFormatterFactory(new DataFieldFormatterFactory(mappedType));
        return dataField;
    }
}
TOP

Related Classes of DisplayProject.factory.DataFieldFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.