Package org.eclipse.nebula.widgets.nattable.examples.examples._101_Data

Source Code of org.eclipse.nebula.widgets.nattable.examples.examples._101_Data.Creating_a_summary_row

/*******************************************************************************
* Copyright (c) 2012 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.examples.examples._101_Data;

import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.nebula.widgets.nattable.examples.AbstractNatExample;
import org.eclipse.nebula.widgets.nattable.examples.runner.StandaloneNatExampleRunner;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.summaryrow.DefaultSummaryRowConfiguration;
import org.eclipse.nebula.widgets.nattable.summaryrow.ISummaryProvider;
import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowConfigAttributes;
import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowLayer;
import org.eclipse.nebula.widgets.nattable.summaryrow.SummationSummaryProvider;
import org.eclipse.nebula.widgets.nattable.util.GUIHelper;
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

public class Creating_a_summary_row extends AbstractNatExample {

    private IDataProvider myDataProvider;

    public static void main(String[] args) throws Exception {
        StandaloneNatExampleRunner.run(600, 400, new Creating_a_summary_row());
    }

    @Override
    public String getDescription() {
        return "Grid demonstrates adding a Summary row at the end of the table.\n"
                + "\n"
                + "Features\n"
                + "  Different style can be applied to the whole row\n"
                + "  Different style can be applied to the individual cells in the summary row\n"
                + "  Plug-in your own summary formulas via ISummaryProvider interface (Default is summation)";
    }

    public Control createExampleControl(Composite parent) {
        myDataProvider = new IDataProvider() {

            public int getColumnCount() {
                return 4;
            }

            public int getRowCount() {
                return 10;
            }

            public Object getDataValue(int columnIndex, int rowIndex) {
                if (columnIndex >= getColumnCount()
                        || rowIndex >= getRowCount()) {
                    throw new RuntimeException(
                            "Data value requested is out of bounds");
                }
                return (columnIndex % 2 == 0) ? 10 : "Apple";
            }

            public void setDataValue(int columnIndex, int rowIndex,
                    Object newValue) {}
        };

        IConfigRegistry configRegistry = new ConfigRegistry();
        IUniqueIndexLayer dataLayer = new DataLayer(myDataProvider);

        // Plug in the SummaryRowLayer
        IUniqueIndexLayer summaryRowLayer = new SummaryRowLayer(dataLayer,
                configRegistry, false);
        ViewportLayer viewportLayer = new ViewportLayer(summaryRowLayer);

        NatTable natTable = new NatTable(parent, viewportLayer, false);

        // Configure custom summary formula for a column
        natTable.addConfiguration(new MySummaryRowConfig(myDataProvider));
        natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
        natTable.setConfigRegistry(configRegistry);
        natTable.configure();

        return natTable;
    }

    /**
     * Custom summary provider which averages out the contents of the column
     */
    class AverageSummaryProvider implements ISummaryProvider {
        public Object summarize(int columnIndex) {
            int total = 0;
            int rowCount = myDataProvider.getRowCount();

            for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
                Object dataValue = myDataProvider.getDataValue(columnIndex,
                        rowIndex);
                total = total + Integer.parseInt(dataValue.toString());
            }
            return "Average: " + total / rowCount;
        }
    }

    /**
     * Override the DefaultSummaryRowConfiguration for customizing the summary
     * row style and/or summary formulas
     */
    class MySummaryRowConfig extends DefaultSummaryRowConfiguration {

        private final IDataProvider myDataProvider;

        public MySummaryRowConfig(IDataProvider myDataProvider) {
            this.myDataProvider = myDataProvider;
            summaryRowBgColor = GUIHelper.COLOR_BLUE;
            summaryRowFgColor = GUIHelper.COLOR_WHITE;
        }

        @Override
        public void addSummaryProviderConfig(IConfigRegistry configRegistry) {
            // Labels are applied to the summary row and cells by default to
            // make configuration easier.
            // See the Javadoc for the SummaryRowLayer

            // Default summary provider
            configRegistry.registerConfigAttribute(
                    SummaryRowConfigAttributes.SUMMARY_PROVIDER,
                    new SummationSummaryProvider(myDataProvider),
                    DisplayMode.NORMAL,
                    SummaryRowLayer.DEFAULT_SUMMARY_ROW_CONFIG_LABEL);

            // Average summary provider for column index 2
            configRegistry
                    .registerConfigAttribute(
                            SummaryRowConfigAttributes.SUMMARY_PROVIDER,
                            new AverageSummaryProvider(),
                            DisplayMode.NORMAL,
                            SummaryRowLayer.DEFAULT_SUMMARY_COLUMN_CONFIG_LABEL_PREFIX + 2);
        }
    }

}
TOP

Related Classes of org.eclipse.nebula.widgets.nattable.examples.examples._101_Data.Creating_a_summary_row

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.