Package org.drools.workbench.screens.guided.template.client.editor

Source Code of org.drools.workbench.screens.guided.template.client.editor.TemplateDataCellValueFactory

/*
* Copyright 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.workbench.screens.guided.template.client.editor;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.drools.workbench.models.commons.shared.oracle.model.DataType;
import org.drools.workbench.models.commons.shared.rule.InterpolationVariable;
import org.drools.workbench.models.datamodel.model.DateConverter;
import org.drools.workbench.models.guided.template.shared.TemplateModel;
import org.kie.workbench.common.widgets.decoratedgrid.client.widget.AbstractCellValueFactory;
import org.kie.workbench.common.widgets.decoratedgrid.client.widget.CellValue;
import org.kie.workbench.common.widgets.decoratedgrid.client.widget.data.DynamicDataRow;
import org.drools.workbench.models.commons.shared.oracle.PackageDataModelOracle;

/**
* A Factory to create CellValues applicable to given columns.
*/
public class TemplateDataCellValueFactory
        extends AbstractCellValueFactory<TemplateDataColumn, String> {

    //Template model
    private TemplateModel model;

    // Dates are serialised to Strings with the user-defined format, or dd-MMM-yyyy by default
    protected static DateConverter DATE_CONVERTOR = null;

    /**
     * Override the default, GWT-centric, Date conversion utility class. Only
     * use to hook-in a JVM Compatible implementation for tests
     * @param dc
     */
    public static void injectDateConvertor( DateConverter dc ) {
        DATE_CONVERTOR = dc;
    }

    /**
     * Construct a Cell Value Factory for a specific Template data editor
     * @param model for which cells will be created
     * @param oracle SuggestionCompletionEngine to assist with drop-downs
     */
    public TemplateDataCellValueFactory( final TemplateModel model,
                                         final PackageDataModelOracle oracle ) {
        super( oracle );
        if ( model == null ) {
            throw new IllegalArgumentException( "model cannot be null" );
        }
        this.model = model;
    }

    /**
     * Construct a new row of data for the underlying model
     * @return
     */
    public List<String> makeRowData() {
        List<String> data = new ArrayList<String>();
        InterpolationVariable[] variables = model.getInterpolationVariablesList();
        for ( InterpolationVariable var : variables ) {
            TemplateDataColumn column = makeModelColumn( var );
            String dcv = makeModelCellValue( column );
            data.add( dcv );
        }
        return data;
    }

    /**
     * Construct a new row of data for the MergableGridWidget
     * @return
     */
    @Override
    public DynamicDataRow makeUIRowData() {
        DynamicDataRow data = new DynamicDataRow();
        InterpolationVariable[] variables = model.getInterpolationVariablesList();
        for ( InterpolationVariable var : variables ) {
            TemplateDataColumn column = makeModelColumn( var );
            String dcv = makeModelCellValue( column );
            CellValue<? extends Comparable<?>> cell = convertModelCellValue( column,
                                                                             dcv );
            data.add( cell );
        }

        return data;
    }

    /**
     * Construct a new column of data for the underlying model
     * @return
     */
    public List<String> makeColumnData( TemplateDataColumn column ) {
        List<String> data = new ArrayList<String>();
        for ( int iRow = 0; iRow < model.getRowsCount(); iRow++ ) {
            String cell = makeModelCellValue( column );
            data.add( cell );
        }
        return data;
    }

    /**
     * Convert a column of domain data to that suitable for the UI
     * @param column
     * @param columnData
     * @return
     */
    public List<CellValue<? extends Comparable<?>>> convertColumnData( TemplateDataColumn column,
                                                                       List<String> columnData ) {
        List<CellValue<? extends Comparable<?>>> data = new ArrayList<CellValue<? extends Comparable<?>>>();
        for ( int iRow = 0; iRow < model.getRowsCount(); iRow++ ) {
            String dcv = columnData.get( iRow );
            CellValue<? extends Comparable<?>> cell = convertModelCellValue( column,
                                                                             dcv );
            data.add( cell );
        }
        return data;
    }

    /**
     * Make a Model cell for the given column
     * @param column
     * @return
     */
    @Override
    public String makeModelCellValue( TemplateDataColumn column ) {
        return new String();
    }

    /**
     * Convert a Model cell to one that can be used in the UI
     * @param column
     * @param dcv
     * @return
     */
    @Override
    public CellValue<? extends Comparable<?>> convertModelCellValue( TemplateDataColumn column,
                                                                     String dcv ) {

        DataType.DataTypes dataType = getDataType( column );
        CellValue<? extends Comparable<?>> cell = null;

        switch ( dataType ) {
            case BOOLEAN:
                Boolean b = Boolean.FALSE;
                try {
                    b = Boolean.valueOf( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewBooleanCellValue( b );
                break;
            case DATE:
                Date d = null;
                try {
                    if ( DATE_CONVERTOR == null ) {
                        throw new IllegalArgumentException( "DATE_CONVERTOR has not been initialised." );
                    }
                    d = DATE_CONVERTOR.parse( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewDateCellValue( d );
                break;
            case NUMERIC:
                BigDecimal numericValue = null;
                try {
                    numericValue = new BigDecimal( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewNumericCellValue( numericValue );
                break;
            case NUMERIC_BIGDECIMAL:
                BigDecimal bigDecimalValue = null;
                try {
                    bigDecimalValue = new BigDecimal( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewBigDecimalCellValue( bigDecimalValue );
                break;
            case NUMERIC_BIGINTEGER:
                BigInteger bigIntegerValue = null;
                try {
                    bigIntegerValue = new BigInteger( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewBigIntegerCellValue( bigIntegerValue );
                break;
            case NUMERIC_BYTE:
                Byte byteValue = null;
                try {
                    byteValue = new Byte( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewByteCellValue( byteValue );
                break;
            case NUMERIC_DOUBLE:
                Double doubleValue = null;
                try {
                    doubleValue = new Double( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewDoubleCellValue( doubleValue );
                break;
            case NUMERIC_FLOAT:
                Float floatValue = null;
                try {
                    floatValue = new Float( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewFloatCellValue( floatValue );
                break;
            case NUMERIC_INTEGER:
                Integer integerValue = null;
                try {
                    integerValue = new Integer( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewIntegerCellValue( integerValue );
                break;
            case NUMERIC_LONG:
                Long longValue = null;
                try {
                    longValue = new Long( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewLongCellValue( longValue );
                break;
            case NUMERIC_SHORT:
                Short shortValue = null;
                try {
                    shortValue = new Short( dcv );
                } catch ( Exception e ) {
                }
                cell = makeNewShortCellValue( shortValue );
                break;
            default:
                cell = makeNewStringCellValue( dcv );
        }

        return cell;
    }

    // Get the Data Type corresponding to a given column
    private DataType.DataTypes getDataType( TemplateDataColumn column ) {

        // Columns with lists of values, enums etc are always Text (for now)
        String[] vals = null;
        String factType = column.getFactType();
        String factField = column.getFactField();

        //Check for enumerations
        if ( factType != null && factField != null ) {
            vals = oracle.getEnumValues( factType,
                                         factField );
            if ( vals != null && vals.length > 0 ) {
                return DataType.DataTypes.STRING;
            }
        }

        //Otherwise use data type extracted from model
        String dataType = column.getDataType();
        if ( dataType.equals( DataType.TYPE_BOOLEAN ) ) {
            return DataType.DataTypes.BOOLEAN;
        } else if ( dataType.equals( DataType.TYPE_DATE ) ) {
            return DataType.DataTypes.DATE;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC ) ) {
            return DataType.DataTypes.NUMERIC;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_BIGDECIMAL ) ) {
            return DataType.DataTypes.NUMERIC_BIGDECIMAL;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_BIGINTEGER ) ) {
            return DataType.DataTypes.NUMERIC_BIGINTEGER;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_BYTE ) ) {
            return DataType.DataTypes.NUMERIC_BYTE;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_DOUBLE ) ) {
            return DataType.DataTypes.NUMERIC_DOUBLE;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_FLOAT ) ) {
            return DataType.DataTypes.NUMERIC_FLOAT;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_INTEGER ) ) {
            return DataType.DataTypes.NUMERIC_INTEGER;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_LONG ) ) {
            return DataType.DataTypes.NUMERIC_LONG;
        } else if ( dataType.equals( DataType.TYPE_NUMERIC_SHORT ) ) {
            return DataType.DataTypes.NUMERIC_SHORT;
        } else {
            return DataType.DataTypes.STRING;
        }
    }

    /**
     * Convert an interpolation variable to a column
     */
    public TemplateDataColumn makeModelColumn( InterpolationVariable var ) {
        return new TemplateDataColumn( var.getVarName(),
                                       var.getDataType(),
                                       var.getFactType(),
                                       var.getFactField() );
    }

    /**
     * Convert a type-safe UI CellValue into a type-safe Model CellValue
     * @param column Model column from which data-type can be derived
     * @param cv UI CellValue to convert into Model CellValue
     * @return
     */
    public String convertToModelCell( TemplateDataColumn column,
                                      CellValue<?> cv ) {
        DataType.DataTypes dataType = getDataType( column );

        switch ( dataType ) {
            case BOOLEAN:
                return convertBooleanValueToString( cv );
            case DATE:
                return convertDateValueToString( cv );
            case NUMERIC:
                return convertNumericValueToString( cv );
            case NUMERIC_BIGDECIMAL:
                return convertBigDecimalValueToString( cv );
            case NUMERIC_BIGINTEGER:
                return convertBigIntegerValueToString( cv );
            case NUMERIC_BYTE:
                return convertByteValueToString( cv );
            case NUMERIC_DOUBLE:
                return convertDoubleValueToString( cv );
            case NUMERIC_FLOAT:
                return convertFloatValueToString( cv );
            case NUMERIC_INTEGER:
                return convertIntegerValueToString( cv );
            case NUMERIC_LONG:
                return convertLongValueToString( cv );
            case NUMERIC_SHORT:
                return convertShortValueToString( cv );
            default:
                return convertStringValueToString( cv );
        }

    }

    //Convert a Boolean value to a String
    private String convertBooleanValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Boolean) value.getValue() ).toString() );
    }

    //Convert a Date value to a String
    private String convertDateValueToString( CellValue<?> value ) {
        String result = null;
        if ( value.getValue() != null ) {
            if ( DATE_CONVERTOR == null ) {
                throw new IllegalArgumentException( "DATE_CONVERTOR has not been initialised." );
            }
            result = DATE_CONVERTOR.format( (Date) value.getValue() );
        }
        return result;
    }

    //Convert a Generic Numeric (BigDecimal) value to a String
    private String convertNumericValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (BigDecimal) value.getValue() ).toPlainString() );
    }

    //Convert a BigDecimal value to a String
    private String convertBigDecimalValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (BigDecimal) value.getValue() ).toPlainString() );
    }

    //Convert a BigInteger value to a String
    private String convertBigIntegerValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (BigInteger) value.getValue() ).toString() );
    }

    //Convert a Byte value to a String
    private String convertByteValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Byte) value.getValue() ).toString() );
    }

    //Convert a Double value to a String
    private String convertDoubleValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Double) value.getValue() ).toString() );
    }

    //Convert a Float value to a String
    private String convertFloatValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Float) value.getValue() ).toString() );
    }

    //Convert a Integer value to a String
    private String convertIntegerValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Integer) value.getValue() ).toString() );
    }

    //Convert a Long value to a String
    private String convertLongValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Long) value.getValue() ).toString() );
    }

    //Convert a Short value to a String
    private String convertShortValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : ( (Short) value.getValue() ).toString() );
    }

    //Convert a String value to a String
    private String convertStringValueToString( CellValue<?> value ) {
        return ( value.getValue() == null ? null : (String) value.getValue() );
    }

}
TOP

Related Classes of org.drools.workbench.screens.guided.template.client.editor.TemplateDataCellValueFactory

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.