blob: b47a21c69da6c6d2914202ffaf73f8e3f1729f49 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.examples.fixtures;
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.dataset.fixture.data.RowDataFixture;
import org.eclipse.nebula.widgets.nattable.dataset.fixture.data.RowDataListFixture;
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsEventLayer;
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsSortModel;
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.filterrow.DefaultGlazedListsStaticFilterStrategy;
import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowHeaderComposite;
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.config.SingleClickSortConfiguration;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.FilterList;
import ca.odell.glazedlists.GlazedLists;
import ca.odell.glazedlists.SortedList;
import ca.odell.glazedlists.TransformedList;
import ca.odell.glazedlists.matchers.Matcher;
public class StaticFilterExampleGridLayer extends GridLayer {
private final ListDataProvider<RowDataFixture> bodyDataProvider;
private final DataLayer bodyDataLayer;
public StaticFilterExampleGridLayer(IConfigRegistry configRegistry) {
super(true);
// Underlying data source
EventList<RowDataFixture> eventList =
GlazedLists.eventList(RowDataListFixture.getList());
TransformedList<RowDataFixture, RowDataFixture> rowObjectsGlazedList =
GlazedLists.threadSafeList(eventList);
SortedList<RowDataFixture> sortedList =
new SortedList<>(rowObjectsGlazedList, null);
FilterList<RowDataFixture> filterList =
new FilterList<>(sortedList);
String[] propertyNames = RowDataListFixture.getPropertyNames();
Map<String, String> propertyToLabelMap = RowDataListFixture.getPropertyToLabelMap();
// Body layer
IColumnPropertyAccessor<RowDataFixture> columnPropertyAccessor =
new ReflectiveColumnPropertyAccessor<>(propertyNames);
this.bodyDataProvider = new ListDataProvider<>(filterList, columnPropertyAccessor);
// add a static filter that only shows RowDataFixtures with a rating
// other than "AAA"
// bodyDataProvider = new
// AbstractFilterListDataProvider<RowDataFixture>(filterList,
// columnPropertyAccessor) {
// @Override
// protected boolean show(RowDataFixture object) {
// return !(object.rating.equals("AAA"));
// }
// };
this.bodyDataLayer = new DataLayer(this.bodyDataProvider);
GlazedListsEventLayer<RowDataFixture> glazedListsEventLayer =
new GlazedListsEventLayer<>(this.bodyDataLayer, eventList);
DefaultBodyLayerStack bodyLayer =
new DefaultBodyLayerStack(glazedListsEventLayer);
ColumnOverrideLabelAccumulator bodyLabelAccumulator =
new ColumnOverrideLabelAccumulator(this.bodyDataLayer);
this.bodyDataLayer.setConfigLabelAccumulator(bodyLabelAccumulator);
bodyLabelAccumulator.registerColumnOverrides(
RowDataListFixture.getColumnIndexOfProperty(RowDataListFixture.PRICING_TYPE_PROP_NAME),
"PRICING_TYPE_PROP_NAME");
// Column header layer
IDataProvider columnHeaderDataProvider =
new DefaultColumnHeaderDataProvider(propertyNames, propertyToLabelMap);
DataLayer columnHeaderDataLayer =
new DefaultColumnHeaderDataLayer(columnHeaderDataProvider);
ColumnHeaderLayer columnHeaderLayer =
new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
SortHeaderLayer<RowDataFixture> sortHeaderLayer =
new SortHeaderLayer<>(
columnHeaderLayer,
new GlazedListsSortModel<>(
sortedList, columnPropertyAccessor, configRegistry, columnHeaderDataLayer),
false);
sortHeaderLayer.addConfiguration(new SingleClickSortConfiguration());
// Note: The column header layer is wrapped in a filter row composite.
// This plugs in the filter row functionality
// DefaultGlazedListsFilterStrategy<RowDataFixture> filterStrategy =
// new
// DefaultGlazedListsFilterStrategy<RowDataFixture>(autoFilterMatcherEditor,
// columnPropertyAccessor, configRegistry);
DefaultGlazedListsStaticFilterStrategy<RowDataFixture> filterStrategy =
new DefaultGlazedListsStaticFilterStrategy<>(
filterList, columnPropertyAccessor, configRegistry);
filterStrategy.addStaticFilter(new Matcher<RowDataFixture>() {
@Override
public boolean matches(RowDataFixture item) {
return !(item.rating.equals("AAA"));
}
});
FilterRowHeaderComposite<RowDataFixture> filterRowHeaderLayer =
new FilterRowHeaderComposite<>(
filterStrategy, sortHeaderLayer, columnHeaderDataProvider, configRegistry);
ColumnOverrideLabelAccumulator labelAccumulator =
new ColumnOverrideLabelAccumulator(columnHeaderDataLayer);
columnHeaderDataLayer.setConfigLabelAccumulator(labelAccumulator);
// Register labels
labelAccumulator.registerColumnOverrides(
RowDataListFixture.getColumnIndexOfProperty(RowDataListFixture.RATING_PROP_NAME),
"CUSTOM_COMPARATOR_LABEL");
// Row header layer
DefaultRowHeaderDataProvider rowHeaderDataProvider =
new DefaultRowHeaderDataProvider(this.bodyDataProvider);
DefaultRowHeaderDataLayer rowHeaderDataLayer =
new DefaultRowHeaderDataLayer(rowHeaderDataProvider);
RowHeaderLayer rowHeaderLayer =
new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
// Corner layer
DefaultCornerDataProvider cornerDataProvider =
new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider);
DataLayer cornerDataLayer =
new DataLayer(cornerDataProvider);
CornerLayer cornerLayer =
new CornerLayer(cornerDataLayer, rowHeaderLayer, filterRowHeaderLayer);
// Grid
setBodyLayer(bodyLayer);
// Note: Set the filter row as the column header
setColumnHeaderLayer(filterRowHeaderLayer);
setRowHeaderLayer(rowHeaderLayer);
setCornerLayer(cornerLayer);
}
public ListDataProvider<RowDataFixture> getBodyDataProvider() {
return this.bodyDataProvider;
}
public DataLayer getBodyDataLayer() {
return this.bodyDataLayer;
}
}