/******************************************************************************* * 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.extension.glazedlists.test.integration; import java.util.Map; import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry; import org.eclipse.nebula.widgets.nattable.data.IColumnPropertyAccessor; import org.eclipse.nebula.widgets.nattable.data.IDataProvider; import org.eclipse.nebula.widgets.nattable.data.ListDataProvider; import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsEventLayer; import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsSortModel; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider; import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.CornerLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultRowHeaderDataLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer; import org.eclipse.nebula.widgets.nattable.layer.DataLayer; import org.eclipse.nebula.widgets.nattable.layer.cell.ColumnOverrideLabelAccumulator; import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack; import org.eclipse.nebula.widgets.nattable.sort.SortHeaderLayer; import org.eclipse.nebula.widgets.nattable.sort.command.SortColumnCommand; import org.eclipse.nebula.widgets.nattable.util.IClientAreaProvider; import ca.odell.glazedlists.EventList; import ca.odell.glazedlists.SortedList; /** * This is a copy of the * org.eclipse.nebula.widgets.nattable.examples.fixtures.GlazedListsGridLayer It * has been copied here since glazed list tests bundle can't depend on the * examples bundle */ public class GlazedListsGridLayer<T> extends GridLayer { private ColumnOverrideLabelAccumulator columnLabelAccumulator; private DataLayer bodyDataLayer; private DataLayer columnHeaderDataLayer; private DefaultBodyLayerStack bodyLayerStack; private ListDataProvider<T> bodyDataProvider; private GlazedListsEventLayer<T> glazedListsEventLayer; public GlazedListsGridLayer(EventList<T> eventList, String[] propertyNames, Map<String, String> propertyToLabelMap, IConfigRegistry configRegistry) { this(eventList, propertyNames, propertyToLabelMap, configRegistry, true); } /** * The underlying {@link DataLayer} created is able to handle Events raised * by GlazedLists and fire corresponding NatTable events. * * The {@link SortHeaderLayer} triggers sorting on the the underlying * SortedList when a {@link SortColumnCommand} is received. */ public GlazedListsGridLayer(EventList<T> eventList, String[] propertyNames, Map<String, String> propertyToLabelMap, IConfigRegistry configRegistry, boolean useDefaultConfiguration) { super(useDefaultConfiguration); // Body - with list event listener // NOTE: Remember to use the SortedList constructor with 'null' for the // Comparator SortedList<T> sortedList = new SortedList<T>(eventList, null); IColumnPropertyAccessor<T> columnPropertyAccessor = new ReflectiveColumnPropertyAccessor<T>( propertyNames); this.bodyDataProvider = new ListDataProvider<T>(sortedList, columnPropertyAccessor); this.bodyDataLayer = new DataLayer(this.bodyDataProvider); this.glazedListsEventLayer = new GlazedListsEventLayer<T>(this.bodyDataLayer, eventList); this.bodyLayerStack = new DefaultBodyLayerStack(this.glazedListsEventLayer); // Sort Column header IDataProvider columnHeaderDataProvider = new DefaultColumnHeaderDataProvider( propertyNames, propertyToLabelMap); this.columnHeaderDataLayer = new DefaultColumnHeaderDataLayer( columnHeaderDataProvider); ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer( this.columnHeaderDataLayer, this.bodyLayerStack, this.bodyLayerStack.getSelectionLayer()); // Auto configure off. Configurations have to applied manually. SortHeaderLayer<T> columnHeaderSortableLayer = new SortHeaderLayer<T>( columnHeaderLayer, new GlazedListsSortModel<T>(sortedList, columnPropertyAccessor, configRegistry, this.columnHeaderDataLayer), false); // Row header DefaultRowHeaderDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider( this.bodyDataProvider); DefaultRowHeaderDataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer( rowHeaderDataProvider); RowHeaderLayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, this.bodyLayerStack, this.bodyLayerStack.getSelectionLayer()); // Corner DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider( columnHeaderDataProvider, rowHeaderDataProvider); DataLayer cornerDataLayer = new DataLayer(cornerDataProvider); CornerLayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnHeaderLayer); // Grid setBodyLayer(this.bodyLayerStack); setColumnHeaderLayer(columnHeaderSortableLayer); setRowHeaderLayer(rowHeaderLayer); setCornerLayer(cornerLayer); } public ColumnOverrideLabelAccumulator getColumnLabelAccumulator() { return this.columnLabelAccumulator; } @Override public void setClientAreaProvider(IClientAreaProvider clientAreaProvider) { super.setClientAreaProvider(clientAreaProvider); } public DataLayer getBodyDataLayer() { return this.bodyDataLayer; } public ListDataProvider<T> getBodyDataProvider() { return this.bodyDataProvider; } public DataLayer getColumnHeaderDataLayer() { return this.columnHeaderDataLayer; } public DefaultBodyLayerStack getBodyLayerStack() { return this.bodyLayerStack; } public GlazedListsEventLayer<T> getGlazedListsEventLayer() { return this.glazedListsEventLayer; } }