Package org.drools.workbench.screens.guided.dtable.client.widget.table

Source Code of org.drools.workbench.screens.guided.dtable.client.widget.table.DecisionTableCellValueFactory

/*
* Copyright 2011 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.dtable.client.widget.table;

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.datamodel.oracle.DataType;
import org.drools.workbench.models.guided.dtable.shared.model.Analysis;
import org.drools.workbench.models.guided.dtable.shared.model.AnalysisCol52;
import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52;
import org.drools.workbench.models.guided.dtable.shared.model.BaseColumn;
import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.models.guided.dtable.shared.model.LimitedEntryCol;
import org.drools.workbench.models.guided.dtable.shared.model.RowNumberCol52;
import org.drools.workbench.screens.guided.dtable.client.utils.DTCellValueUtilities;
import org.drools.workbench.screens.guided.rule.client.editor.RuleAttributeWidget;
import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle;
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.CellValue.CellState;
import org.kie.workbench.common.widgets.decoratedgrid.client.widget.data.DynamicDataRow;

/**
* A Factory to create CellValues applicable to given columns.
*/
public class DecisionTableCellValueFactory extends AbstractCellValueFactory<BaseColumn, DTCellValue52> {

    // Model used to determine data-types etc for cells
    private final GuidedDecisionTable52 model;

    private final DTCellValueUtilities utilities;

    /**
     * Construct a Cell Value Factory for a specific Decision Table
     * @param oracle DataModelOracle to assist with drop-downs
     */
    public DecisionTableCellValueFactory( GuidedDecisionTable52 model,
                                          AsyncPackageDataModelOracle oracle ) {
        super( oracle );
        this.model = model;
        this.utilities = new DTCellValueUtilities( model,
                                                   oracle );
    }

    /**
     * Construct a new row of data for the underlying model
     * @return
     */
    public List<DTCellValue52> makeRowData() {
        List<DTCellValue52> data = new ArrayList<DTCellValue52>();
        List<BaseColumn> columns = model.getExpandedColumns();
        //Use allColumns.size() - 1 to exclude the Analysis column that is not stored in the general grid data
        for ( int iCol = 0; iCol < columns.size() - 1; iCol++ ) {
            BaseColumn column = columns.get( iCol );
            DTCellValue52 cell = makeModelCellValue( column );
            data.add( cell );
        }
        return data;
    }

    /**
     * Construct a new row of data for the MergableGridWidget
     * @return
     */
    @Override
    public DynamicDataRow makeUIRowData() {
        DynamicDataRow data = new DynamicDataRow();
        List<BaseColumn> columns = model.getExpandedColumns();
        for ( BaseColumn column : columns ) {
            DTCellValue52 dcv = makeModelCellValue( column );
            DataType.DataTypes dataType = utilities.getDataType( column );
            utilities.assertDTCellValue( dataType,
                                         dcv );
            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<DTCellValue52> makeColumnData( BaseColumn column ) {
        List<DTCellValue52> data = new ArrayList<DTCellValue52>();
        for ( int iRow = 0; iRow < model.getData().size(); iRow++ ) {
            DTCellValue52 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( BaseColumn column,
                                                                       List<DTCellValue52> columnData ) {
        List<CellValue<? extends Comparable<?>>> data = new ArrayList<CellValue<? extends Comparable<?>>>();
        for ( int iRow = 0; iRow < model.getData().size(); iRow++ ) {
            DTCellValue52 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 DTCellValue52 makeModelCellValue( BaseColumn column ) {
        DataType.DataTypes dataType = utilities.getDataType( column );
        DTCellValue52 dcv = null;
        if ( column instanceof LimitedEntryCol ) {
            dcv = new DTCellValue52( Boolean.FALSE );
        } else if ( column instanceof AttributeCol52 ) {
            dcv = new DTCellValue52( column.getDefaultValue() );
        } else {
            dcv = new DTCellValue52( column.getDefaultValue() );
        }
        utilities.assertDTCellValue( dataType,
                                     dcv );
        return dcv;
    }

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

        //Analysis cells do not use data-type
        if ( column instanceof AnalysisCol52 ) {
            return makeNewAnalysisCellValue();
        }

        //Other cells do use data-type
        DataType.DataTypes dataType = utilities.getDataType( column );
        utilities.assertDTCellValue( dataType,
                                     dcv );

        CellValue<? extends Comparable<?>> cell = null;
        switch ( dataType ) {
            case BOOLEAN:
                cell = makeNewBooleanCellValue( dcv.getBooleanValue() );
                break;
            case DATE:
                cell = makeNewDateCellValue( dcv.getDateValue() );
                break;
            case NUMERIC:
                cell = makeNewNumericCellValue( (BigDecimal) dcv.getNumericValue() );
                break;
            case NUMERIC_BIGDECIMAL:
                cell = makeNewBigDecimalCellValue( (BigDecimal) dcv.getNumericValue() );
                break;
            case NUMERIC_BIGINTEGER:
                cell = makeNewBigIntegerCellValue( (BigInteger) dcv.getNumericValue() );
                break;
            case NUMERIC_BYTE:
                cell = makeNewByteCellValue( (Byte) dcv.getNumericValue() );
                break;
            case NUMERIC_DOUBLE:
                cell = makeNewDoubleCellValue( (Double) dcv.getNumericValue() );
                break;
            case NUMERIC_FLOAT:
                cell = makeNewFloatCellValue( (Float) dcv.getNumericValue() );
                break;
            case NUMERIC_INTEGER:
                cell = makeNewIntegerCellValue( (Integer) dcv.getNumericValue() );
                break;
            case NUMERIC_LONG:
                if ( column instanceof RowNumberCol52 ) {
                    cell = makeNewRowNumberCellValue( (Long) dcv.getNumericValue() );
                } else {
                    cell = makeNewLongCellValue( (Long) dcv.getNumericValue() );
                    if ( column instanceof AttributeCol52 ) {
                        AttributeCol52 at = (AttributeCol52) column;
                        if ( at.getAttribute().equals( RuleAttributeWidget.SALIENCE_ATTR ) ) {
                            if ( at.isUseRowNumber() ) {
                                cell = makeNewRowNumberCellValue( (Long) dcv.getNumericValue() );
                            }
                        }
                    }
                }
                break;
            case NUMERIC_SHORT:
                cell = makeNewShortCellValue( (Short) dcv.getNumericValue() );
                break;
            default:
                cell = makeNewStringCellValue( dcv.getStringValue() );
                if ( column instanceof AttributeCol52 ) {
                    AttributeCol52 ac = (AttributeCol52) column;
                    if ( ac.getAttribute().equals( RuleAttributeWidget.DIALECT_ATTR ) ) {
                        cell = makeNewDialectCellValue( dcv.getStringValue() );
                    }
                }
        }

        if ( dcv.isOtherwise() ) {
            cell.addState( CellState.OTHERWISE );
        }

        return cell;
    }

    public CellValue<Long> makeNewRowNumberCellValue( Long initialValue ) {
        // Rows are 0-based internally but 1-based in the UI
        CellValue<Long> cv = makeNewLongCellValue( initialValue );
        if ( initialValue != null ) {
            cv.setValue( initialValue );
        }
        return cv;
    }

    public CellValue<Analysis> makeNewAnalysisCellValue() {
        Analysis analysis = new Analysis();
        return new CellValue<Analysis>( analysis );
    }

    /**
     * Convert a type-safe UI CellValue into a type-safe Model CellValue
     * @param column Model column from which data-type can be derived
     * @param cell UI CellValue to convert into Model CellValue
     * @return
     */
    public DTCellValue52 convertToModelCell( BaseColumn column,
                                             CellValue<?> cell ) {
        DataType.DataTypes dt = utilities.getDataType( column );
        DTCellValue52 dtCell = null;

        switch ( dt ) {
            case BOOLEAN:
                dtCell = new DTCellValue52( (Boolean) cell.getValue() );
                break;
            case DATE:
                dtCell = new DTCellValue52( (Date) cell.getValue() );
                break;
            case NUMERIC:
                dtCell = new DTCellValue52( (BigDecimal) cell.getValue() );
                break;
            case NUMERIC_BIGDECIMAL:
                dtCell = new DTCellValue52( (BigDecimal) cell.getValue() );
                break;
            case NUMERIC_BIGINTEGER:
                dtCell = new DTCellValue52( (BigInteger) cell.getValue() );
                break;
            case NUMERIC_BYTE:
                dtCell = new DTCellValue52( (Byte) cell.getValue() );
                break;
            case NUMERIC_DOUBLE:
                dtCell = new DTCellValue52( (Double) cell.getValue() );
                break;
            case NUMERIC_FLOAT:
                dtCell = new DTCellValue52( (Float) cell.getValue() );
                break;
            case NUMERIC_INTEGER:
                dtCell = new DTCellValue52( (Integer) cell.getValue() );
                break;
            case NUMERIC_LONG:
                dtCell = new DTCellValue52( (Long) cell.getValue() );
                break;
            case NUMERIC_SHORT:
                dtCell = new DTCellValue52( (Short) cell.getValue() );
                break;
            default:
                dtCell = new DTCellValue52( (String) cell.getValue() );
        }
        dtCell.setOtherwise( cell.isOtherwise() );
        return dtCell;
    }

}
TOP

Related Classes of org.drools.workbench.screens.guided.dtable.client.widget.table.DecisionTableCellValueFactory

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.