/******************************************************************************* * Copyright (c) 2012, 2013 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.grid.layer; import java.util.List; import java.util.Map; import org.eclipse.nebula.widgets.nattable.copy.command.CopyDataCommandHandler; import org.eclipse.nebula.widgets.nattable.data.IDataProvider; import org.eclipse.nebula.widgets.nattable.grid.data.DefaultBodyDataProvider; 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.layer.DataLayer; import org.eclipse.nebula.widgets.nattable.layer.ILayer; import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer; import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack; import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; public class DefaultGridLayer extends GridLayer { protected IUniqueIndexLayer bodyDataLayer; protected IUniqueIndexLayer columnHeaderDataLayer; protected IUniqueIndexLayer rowHeaderDataLayer; protected IUniqueIndexLayer cornerDataLayer; public <T> DefaultGridLayer(List<T> rowData, String[] propertyNames, Map<String, String> propertyToLabelMap) { this(rowData, propertyNames, propertyToLabelMap, true); } public <T> DefaultGridLayer(List<T> rowData, String[] propertyNames, Map<String, String> propertyToLabelMap, boolean useDefaultConfiguration) { super(useDefaultConfiguration); init(rowData, propertyNames, propertyToLabelMap); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider) { this(bodyDataProvider, columnHeaderDataProvider, true); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, boolean useDefaultConfiguration) { super(useDefaultConfiguration); init(bodyDataProvider, columnHeaderDataProvider); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider) { this(bodyDataProvider, columnHeaderDataProvider, rowHeaderDataProvider, true); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider, boolean useDefaultConfiguration) { super(useDefaultConfiguration); init(bodyDataProvider, columnHeaderDataProvider, rowHeaderDataProvider); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider, IDataProvider cornerDataProvider) { this(bodyDataProvider, columnHeaderDataProvider, rowHeaderDataProvider, cornerDataProvider, true); } public DefaultGridLayer(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider, IDataProvider cornerDataProvider, boolean useDefaultConfiguration) { super(useDefaultConfiguration); init(bodyDataProvider, columnHeaderDataProvider, rowHeaderDataProvider, cornerDataProvider); } public DefaultGridLayer(IUniqueIndexLayer bodyDataLayer, IUniqueIndexLayer columnHeaderDataLayer, IUniqueIndexLayer rowHeaderDataLayer, IUniqueIndexLayer cornerDataLayer) { this(bodyDataLayer, columnHeaderDataLayer, rowHeaderDataLayer, cornerDataLayer, true); } public DefaultGridLayer(IUniqueIndexLayer bodyDataLayer, IUniqueIndexLayer columnHeaderDataLayer, IUniqueIndexLayer rowHeaderDataLayer, IUniqueIndexLayer cornerDataLayer, boolean useDefaultConfiguration) { super(useDefaultConfiguration); init(bodyDataLayer, columnHeaderDataLayer, rowHeaderDataLayer, cornerDataLayer); } protected DefaultGridLayer(boolean useDefaultConfiguration) { super(useDefaultConfiguration); } protected <T> void init(List<T> rowData, String[] propertyNames, Map<String, String> propertyToLabelMap) { init(new DefaultBodyDataProvider<T>(rowData, propertyNames), new DefaultColumnHeaderDataProvider(propertyNames, propertyToLabelMap)); } protected void init(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider) { init(bodyDataProvider, columnHeaderDataProvider, new DefaultRowHeaderDataProvider(bodyDataProvider)); } protected void init(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider) { init(bodyDataProvider, columnHeaderDataProvider, rowHeaderDataProvider, new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider)); } protected void init(IDataProvider bodyDataProvider, IDataProvider columnHeaderDataProvider, IDataProvider rowHeaderDataProvider, IDataProvider cornerDataProvider) { init(new DataLayer(bodyDataProvider), new DefaultColumnHeaderDataLayer( columnHeaderDataProvider), new DefaultRowHeaderDataLayer( rowHeaderDataProvider), new DataLayer(cornerDataProvider)); } protected void init(IUniqueIndexLayer bodyDataLayer, IUniqueIndexLayer columnHeaderDataLayer, IUniqueIndexLayer rowHeaderDataLayer, IUniqueIndexLayer cornerDataLayer) { // Body this.bodyDataLayer = bodyDataLayer; DefaultBodyLayerStack bodyLayer = new DefaultBodyLayerStack( bodyDataLayer); SelectionLayer selectionLayer = bodyLayer.getSelectionLayer(); // Column header this.columnHeaderDataLayer = columnHeaderDataLayer; ILayer columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer, selectionLayer); // Row header this.rowHeaderDataLayer = rowHeaderDataLayer; ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, selectionLayer); // Corner this.cornerDataLayer = cornerDataLayer; ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnHeaderLayer); setBodyLayer(bodyLayer); setColumnHeaderLayer(columnHeaderLayer); setRowHeaderLayer(rowHeaderLayer); setCornerLayer(cornerLayer); CopyDataCommandHandler cdch = new CopyDataCommandHandler( selectionLayer, columnHeaderDataLayer, rowHeaderDataLayer); cdch.setCopyFormattedText(true); registerCommandHandler(cdch); } public IUniqueIndexLayer getBodyDataLayer() { return this.bodyDataLayer; } @Override public DefaultBodyLayerStack getBodyLayer() { return (DefaultBodyLayerStack) super.getBodyLayer(); } public IUniqueIndexLayer getColumnHeaderDataLayer() { return this.columnHeaderDataLayer; } @Override public ColumnHeaderLayer getColumnHeaderLayer() { return (ColumnHeaderLayer) super.getColumnHeaderLayer(); } public IUniqueIndexLayer getRowHeaderDataLayer() { return this.rowHeaderDataLayer; } @Override public RowHeaderLayer getRowHeaderLayer() { return (RowHeaderLayer) super.getRowHeaderLayer(); } public IUniqueIndexLayer getCornerDataLayer() { return this.cornerDataLayer; } @Override public CornerLayer getCornerLayer() { return (CornerLayer) super.getCornerLayer(); } }