package com.tibco.as.spacebar.ui.editor; 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.extension.glazedlists.GlazedListsSortModel; import org.eclipse.nebula.widgets.nattable.extension.glazedlists.filterrow.DefaultGlazedListsFilterStrategy; import org.eclipse.nebula.widgets.nattable.filterrow.FilterRowHeaderComposite; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider; import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer; import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer; import org.eclipse.nebula.widgets.nattable.group.ColumnGroupHeaderLayer; import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel; import org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform; import org.eclipse.nebula.widgets.nattable.layer.ILayer; import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; import org.eclipse.nebula.widgets.nattable.sort.SortHeaderLayer; import org.eclipse.nebula.widgets.nattable.util.IClientAreaProvider; import ca.odell.glazedlists.FilterList; import ca.odell.glazedlists.SortedList; import ca.odell.glazedlists.matchers.CompositeMatcherEditor; public class ColumnHeaderLayerStack<T> extends AbstractLayerTransform { private ColumnHeaderLayer columnHeaderLayer; private ColumnGroupHeaderLayer columnGroupHeaderLayer; private SortHeaderLayer<T> sortableColumnHeaderLayer; private IDataProvider columnHeaderDataProvider; private DefaultColumnHeaderDataLayer columnHeaderDataLayer; private DefaultGlazedListsFilterStrategy<T> filterStrategy; private FilterRowHeaderComposite<T> composite; public ColumnHeaderLayerStack(SortedList<T> sortedList, FilterList<T> filterList, String[] propertyNames, Map<String, String> propertyToLabelMap, ILayer bodyLayer, SelectionLayer selectionLayer, ColumnGroupModel columnGroupModel, IConfigRegistry configRegistry, IColumnPropertyAccessor<T> propertyAccessor) { columnHeaderDataProvider = new DefaultColumnHeaderDataProvider( propertyNames, propertyToLabelMap); columnHeaderDataLayer = new DefaultColumnHeaderDataLayer( columnHeaderDataProvider); columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer, selectionLayer); sortableColumnHeaderLayer = new SortHeaderLayer<T>(columnHeaderLayer, new GlazedListsSortModel<T>(sortedList, propertyAccessor, configRegistry, columnHeaderDataLayer)); columnGroupHeaderLayer = new ColumnGroupHeaderLayer( sortableColumnHeaderLayer, selectionLayer, columnGroupModel); CompositeMatcherEditor<T> matcherEditor = new CompositeMatcherEditor<T>(); filterList.setMatcherEditor(matcherEditor); filterStrategy = new DefaultGlazedListsFilterStrategy<T>(filterList, matcherEditor, propertyAccessor, configRegistry); composite = new FilterRowHeaderComposite<T>(filterStrategy, sortableColumnHeaderLayer, columnHeaderDataProvider, configRegistry); setUnderlyingLayer(composite); } @Override public void dispose() { if (columnHeaderDataLayer != null) { columnHeaderDataLayer.dispose(); columnHeaderDataLayer = null; } if (columnHeaderLayer != null) { columnHeaderLayer.dispose(); columnHeaderLayer = null; } if (sortableColumnHeaderLayer != null) { sortableColumnHeaderLayer.dispose(); sortableColumnHeaderLayer = null; } if (columnGroupHeaderLayer != null) { columnGroupHeaderLayer.dispose(); columnGroupHeaderLayer = null; } filterStrategy = null; composite = null; super.dispose(); } @Override public void setClientAreaProvider(IClientAreaProvider clientAreaProvider) { super.setClientAreaProvider(clientAreaProvider); } public ColumnGroupHeaderLayer getColumnGroupHeaderLayer() { return columnGroupHeaderLayer; } public ColumnHeaderLayer getColumnHeaderLayer() { return columnHeaderLayer; } public IDataProvider getColumnHeaderDataProvider() { return columnHeaderDataProvider; } public DefaultColumnHeaderDataLayer getColumnHeaderDataLayer() { return columnHeaderDataLayer; } }