Package org.drools.guvnor.client.asseteditor.drools.modeldriven.ui.templates

Source Code of org.drools.guvnor.client.asseteditor.drools.modeldriven.ui.templates.AbstractDecoratedTemplateDataGridWidget

/*
* 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.guvnor.client.asseteditor.drools.modeldriven.ui.templates;

import java.util.ArrayList;
import java.util.List;

import org.drools.guvnor.client.asseteditor.drools.modeldriven.ui.templates.events.SetInternalTemplateDataModelEvent;
import org.drools.guvnor.client.asseteditor.drools.modeldriven.ui.templates.events.SetTemplateDataEvent;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.AbstractDecoratedGridHeaderWidget;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.AbstractDecoratedGridSidebarWidget;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.AbstractDecoratedGridWidget;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.AbstractMergableGridWidget;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.CellValue;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.DynamicColumn;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.ResourcesProvider;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.data.DynamicData;
import org.drools.guvnor.client.widgets.drools.decoratedgrid.events.SetModelEvent;
import org.drools.ide.common.client.modeldriven.brl.templates.InterpolationVariable;
import org.drools.ide.common.client.modeldriven.brl.templates.TemplateModel;

import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.Panel;

/**
* A Decorated Grid for Template Data
*/
public abstract class AbstractDecoratedTemplateDataGridWidget extends AbstractDecoratedGridWidget<TemplateModel, TemplateDataColumn, String> {

    //Factories to create new data elements
    protected final TemplateDataCellFactory      cellFactory;
    protected final TemplateDataCellValueFactory cellValueFactory;

    public AbstractDecoratedTemplateDataGridWidget(ResourcesProvider<TemplateDataColumn> resources,
                                                   TemplateDataCellFactory cellFactory,
                                                   TemplateDataCellValueFactory cellValueFactory,
                                                   EventBus eventBus,
                                                   Panel mainPanel,
                                                   Panel bodyPanel,
                                                   AbstractMergableGridWidget<TemplateModel, TemplateDataColumn> gridWidget,
                                                   AbstractDecoratedGridHeaderWidget<TemplateModel, TemplateDataColumn> headerWidget,
                                                   AbstractDecoratedGridSidebarWidget<TemplateModel, TemplateDataColumn> sidebarWidget) {
        super( resources,
               eventBus,
               mainPanel,
               bodyPanel,
               gridWidget,
               headerWidget,
               sidebarWidget );
        if ( cellFactory == null ) {
            throw new IllegalArgumentException( "cellFactory cannot be null" );
        }
        if ( cellValueFactory == null ) {
            throw new IllegalArgumentException( "cellValueFactory cannot be null" );
        }
        this.cellFactory = cellFactory;
        this.cellValueFactory = cellValueFactory;

        //Wire-up event handlers
        eventBus.addHandler( SetTemplateDataEvent.TYPE,
                             this );
    }

    public void onSetModel(SetModelEvent<TemplateModel> event) {

        DynamicData data = new DynamicData();
        TemplateModel model = event.getModel();
        List<DynamicColumn<TemplateDataColumn>> columns = new ArrayList<DynamicColumn<TemplateDataColumn>>();

        setupInternalModel( model,
                            columns,
                            data );

        //Raise event setting data and columns for UI components
        SetInternalTemplateDataModelEvent sime = new SetInternalTemplateDataModelEvent( model,
                                                                                        data,
                                                                                        columns );
        eventBus.fireEvent( sime );
    }

    private void setupInternalModel(TemplateModel model,
                                    List<DynamicColumn<TemplateDataColumn>> columns,
                                    DynamicData data) {

        //Get interpolation variables
        InterpolationVariable[] vars = model.getInterpolationVariablesList();
        if ( vars.length == 0 ) {
            return;
        }

        int colIndex = 0;
        String[][] modelData = model.getTableAsArray();

        // Dummy rows because the underlying DecoratedGridWidget expects there
        // to be enough rows to receive the columns data
        for ( int iRow = 0; iRow < modelData.length; iRow++ ) {
            data.addRow();
        }

        //Add corresponding columns to table
        for ( InterpolationVariable var : vars ) {
            TemplateDataColumn col = new TemplateDataColumn( var.getVarName(),
                                                             var.getDataType(),
                                                             var.getFactType(),
                                                             var.getFactField() );

            DynamicColumn<TemplateDataColumn> column = new DynamicColumn<TemplateDataColumn>( col,
                                                                                              cellFactory.getCell( col ),
                                                                                              colIndex,
                                                                                              eventBus );
            columns.add( column );

            data.addColumn( colIndex,
                            makeColumnData( modelData,
                                            col,
                                            colIndex++ ),
                                            true );
        }

    }

    // Make a row of data for insertion into a DecoratedGridWidget
    private List<CellValue< ? extends Comparable< ? >>> makeColumnData(String[][] data,
                                                                       TemplateDataColumn column,
                                                                       int colIndex) {
        int dataSize = data.length;
        List<CellValue< ? extends Comparable< ? >>> columnData = new ArrayList<CellValue< ? extends Comparable< ? >>>( dataSize );

        for ( int iRow = 0; iRow < dataSize; iRow++ ) {
            String[] row = data[iRow];
            //Underlying Template model uses empty Strings as null values; which is quite different in the MergedGrid world
            String initialValue = row[colIndex];
            if ( initialValue != null && initialValue.equals( "" ) ) {
                initialValue = null;
            }
            CellValue< ? extends Comparable< ? >> cv = cellValueFactory.convertModelCellValue( column,
                                                                                               initialValue );
            columnData.add( cv );
        }
        return columnData;
    }

}
TOP

Related Classes of org.drools.guvnor.client.asseteditor.drools.modeldriven.ui.templates.AbstractDecoratedTemplateDataGridWidget

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.