blob: 4d4daa668940e8141d4ac2742ee2a037afdff3d6 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2018, 2019 Dirk Fauth.
*
* 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:
* Dirk Fauth <dirk.fauth@googlemail.com> - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.nebula.widgets.nattable.hierarchical;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.EditableRule;
import org.eclipse.nebula.widgets.nattable.coordinate.Range;
import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider;
import org.eclipse.nebula.widgets.nattable.data.IRowIdAccessor;
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
import org.eclipse.nebula.widgets.nattable.data.convert.DefaultDisplayConverter;
import org.eclipse.nebula.widgets.nattable.dataset.car.Car;
import org.eclipse.nebula.widgets.nattable.dataset.car.CarService;
import org.eclipse.nebula.widgets.nattable.dataset.car.Classification;
import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.edit.command.EditUtils;
import org.eclipse.nebula.widgets.nattable.hideshow.ColumnHideShowLayer;
import org.eclipse.nebula.widgets.nattable.hideshow.RowHideShowLayer;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ColumnHideCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.MultiColumnHideCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.RowHideCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.RowPositionHideCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ShowAllColumnsCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ShowAllRowsCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.event.HideRowPositionsEvent;
import org.eclipse.nebula.widgets.nattable.hideshow.event.ShowRowPositionsEvent;
import org.eclipse.nebula.widgets.nattable.hideshow.indicator.HideIndicatorConstants;
import org.eclipse.nebula.widgets.nattable.hierarchical.HierarchicalTreeLayer.HierarchicalTreeNode;
import org.eclipse.nebula.widgets.nattable.hierarchical.command.HierarchicalTreeExpandCollapseCommand;
import org.eclipse.nebula.widgets.nattable.layer.AbstractDpiConverter;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.IDpiConverter;
import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
import org.eclipse.nebula.widgets.nattable.layer.SpanningDataLayer;
import org.eclipse.nebula.widgets.nattable.layer.cell.ColumnLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.layer.cell.IConfigLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.layer.command.ConfigureScalingCommand;
import org.eclipse.nebula.widgets.nattable.reorder.ColumnReorderLayer;
import org.eclipse.nebula.widgets.nattable.reorder.command.ColumnReorderCommand;
import org.eclipse.nebula.widgets.nattable.reorder.command.MultiColumnReorderCommand;
import org.eclipse.nebula.widgets.nattable.search.CellValueAsStringComparator;
import org.eclipse.nebula.widgets.nattable.search.ISearchDirection;
import org.eclipse.nebula.widgets.nattable.search.command.SearchCommand;
import org.eclipse.nebula.widgets.nattable.search.strategy.GridSearchStrategy;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.selection.command.SelectCellCommand;
import org.eclipse.nebula.widgets.nattable.selection.command.SelectColumnCommand;
import org.eclipse.nebula.widgets.nattable.selection.preserve.PreserveSelectionModel;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.LayerListenerFixture;
import org.eclipse.nebula.widgets.nattable.tree.TreeLayer;
import org.eclipse.nebula.widgets.nattable.tree.command.TreeCollapseAllCommand;
import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandAllCommand;
import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandCollapseCommand;
import org.eclipse.nebula.widgets.nattable.tree.command.TreeExpandToLevelCommand;
import org.eclipse.nebula.widgets.nattable.tree.config.DefaultTreeLayerConfiguration;
import org.eclipse.swt.graphics.Rectangle;
import org.junit.Before;
import org.junit.Test;
public class HierarchicalTreeLayerTest {
private List<HierarchicalWrapper> data;
private IRowDataProvider<HierarchicalWrapper> bodyDataProvider;
private DataLayer bodyDataLayer;
private ColumnReorderLayer columnReorderLayer;
private ColumnHideShowLayer columnHideShowLayer;
private RowHideShowLayer rowHideShowLayer;
private SelectionLayer selectionLayer;
private HierarchicalTreeLayer treeLayer;
private LayerListenerFixture layerListener;
@Before
public void setup() {
// de-normalize the object graph without parent structure objects
this.data = HierarchicalHelper.deNormalize(CarService.getInput(), false, CarService.PROPERTY_NAMES_COMPACT);
HierarchicalReflectiveColumnPropertyAccessor columnPropertyAccessor =
new HierarchicalReflectiveColumnPropertyAccessor(CarService.PROPERTY_NAMES_COMPACT);
this.bodyDataProvider = new ListDataProvider<>(this.data, columnPropertyAccessor);
HierarchicalSpanningDataProvider spanningDataProvider = new HierarchicalSpanningDataProvider(this.bodyDataProvider, CarService.PROPERTY_NAMES_COMPACT);
this.bodyDataLayer = new SpanningDataLayer(spanningDataProvider);
// simply apply labels for every column by index
this.bodyDataLayer.setConfigLabelAccumulator(new ColumnLabelAccumulator());
this.columnReorderLayer = new ColumnReorderLayer(this.bodyDataLayer);
this.columnHideShowLayer = new ColumnHideShowLayer(this.columnReorderLayer);
this.rowHideShowLayer = new RowHideShowLayer(this.columnHideShowLayer);
this.selectionLayer = new SelectionLayer(this.rowHideShowLayer);
this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.PROPERTY_NAMES_COMPACT);
this.layerListener = new LayerListenerFixture();
this.treeLayer.addLayerListener(this.layerListener);
}
@Test
public void testIsLevelHeaderColumn() {
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertFalse(this.treeLayer.isLevelHeaderColumn(1));
assertFalse(this.treeLayer.isLevelHeaderColumn(2));
assertTrue(this.treeLayer.isLevelHeaderColumn(3));
assertFalse(this.treeLayer.isLevelHeaderColumn(4));
assertFalse(this.treeLayer.isLevelHeaderColumn(5));
assertTrue(this.treeLayer.isLevelHeaderColumn(6));
assertFalse(this.treeLayer.isLevelHeaderColumn(7));
assertFalse(this.treeLayer.isLevelHeaderColumn(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertFalse(this.treeLayer.isLevelHeaderColumn(0));
assertFalse(this.treeLayer.isLevelHeaderColumn(1));
assertFalse(this.treeLayer.isLevelHeaderColumn(2));
assertFalse(this.treeLayer.isLevelHeaderColumn(3));
assertFalse(this.treeLayer.isLevelHeaderColumn(4));
assertFalse(this.treeLayer.isLevelHeaderColumn(5));
assertFalse(this.treeLayer.isLevelHeaderColumn(6));
assertFalse(this.treeLayer.isLevelHeaderColumn(7));
assertFalse(this.treeLayer.isLevelHeaderColumn(8));
}
@Test
public void testIsLevelHeaderColumnOnHideShow() {
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(3));
assertTrue(this.treeLayer.isLevelHeaderColumn(6));
this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 1));
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(2));
assertTrue(this.treeLayer.isLevelHeaderColumn(5));
this.treeLayer.doCommand(new ShowAllColumnsCommand());
this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 4));
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(3));
assertTrue(this.treeLayer.isLevelHeaderColumn(5));
this.treeLayer.doCommand(new ShowAllColumnsCommand());
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(3));
assertTrue(this.treeLayer.isLevelHeaderColumn(6));
}
@Test
public void testIsTreeColumn() {
// with level header column 1 and 4 are node columns
assertFalse(this.treeLayer.isTreeColumn(0));
assertTrue(this.treeLayer.isTreeColumn(1));
assertFalse(this.treeLayer.isTreeColumn(2));
assertFalse(this.treeLayer.isTreeColumn(3));
assertTrue(this.treeLayer.isTreeColumn(4));
assertFalse(this.treeLayer.isTreeColumn(5));
assertFalse(this.treeLayer.isTreeColumn(6));
assertFalse(this.treeLayer.isTreeColumn(7));
assertFalse(this.treeLayer.isTreeColumn(8));
this.treeLayer.setShowTreeLevelHeader(false);
// without level header column 0 and 2 are node columns
assertTrue(this.treeLayer.isTreeColumn(0));
assertFalse(this.treeLayer.isTreeColumn(1));
assertTrue(this.treeLayer.isTreeColumn(2));
assertFalse(this.treeLayer.isTreeColumn(3));
assertFalse(this.treeLayer.isTreeColumn(4));
assertFalse(this.treeLayer.isTreeColumn(5));
}
@Test
public void testConfigLabelsByPosition() {
LabelStack stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 1));
stack = this.treeLayer.getConfigLabelsByPosition(3, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
stack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
stack = this.treeLayer.getConfigLabelsByPosition(8, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
this.treeLayer.setShowTreeLevelHeader(false);
stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 1));
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
stack = this.treeLayer.getConfigLabelsByPosition(3, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
}
@Test
public void testExpandCollapseConfigLabelsByPosition() {
LabelStack stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
// collapse first level - note that this is done by index
this.treeLayer.expandOrCollapse(0, 0);
stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
// expand first level again
this.treeLayer.expandOrCollapse(0, 0);
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
// collapse second level
this.treeLayer.expandOrCollapse(2, 0);
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
// expand second level again
this.treeLayer.expandOrCollapse(2, 0);
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
stack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
stack = this.treeLayer.getConfigLabelsByPosition(8, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
this.treeLayer.setShowTreeLevelHeader(false);
stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
// collapse first level
this.treeLayer.expandOrCollapse(0, 0);
stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
// expand first level again
this.treeLayer.expandOrCollapse(0, 0);
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
// collapse second level
this.treeLayer.expandOrCollapse(2, 0);
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
}
@Test
public void testExpandCollapseConfigLabelsByPositionForChildColumns() {
// collapse first level - note that this is done by index
this.treeLayer.expandOrCollapse(0, 0);
LabelStack stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 1));
stack = this.treeLayer.getConfigLabelsByPosition(3, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
stack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
stack = this.treeLayer.getConfigLabelsByPosition(8, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
// expand first level again
this.treeLayer.expandOrCollapse(0, 0);
// collapse second level
this.treeLayer.expandOrCollapse(2, 0);
stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 1));
stack = this.treeLayer.getConfigLabelsByPosition(3, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
stack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
stack = this.treeLayer.getConfigLabelsByPosition(8, 0);
assertEquals(2, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
assertTrue(stack.hasLabel(HierarchicalTreeLayer.COLLAPSED_CHILD));
// expand second level again
this.treeLayer.expandOrCollapse(2, 0);
// disable handle collapsed children, collapse first level, check
this.treeLayer.setHandleCollapsedChildren(false);
// collapse first level
this.treeLayer.expandOrCollapse(0, 0);
stack = this.treeLayer.getConfigLabelsByPosition(0, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(1, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0));
stack = this.treeLayer.getConfigLabelsByPosition(2, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 1));
stack = this.treeLayer.getConfigLabelsByPosition(3, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(4, 0);
assertEquals(4, stack.getLabels().size());
assertTrue(stack.hasLabel(TreeLayer.TREE_COLUMN_CELL));
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + 0));
// special situation
// the parent is collapsed but we show the data of the child level
// in that case we can not show the expand/collapse of the child,
// because the parent is collapsed
assertTrue(stack.hasLabel(DefaultTreeLayerConfiguration.TREE_LEAF_CONFIG_TYPE));
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 2));
stack = this.treeLayer.getConfigLabelsByPosition(5, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 3));
stack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 4));
stack = this.treeLayer.getConfigLabelsByPosition(8, 0);
assertEquals(1, stack.getLabels().size());
assertTrue(stack.hasLabel(ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 5));
}
@Test
public void testGetCellByPosition() {
// test first level header
ILayerCell cell = this.treeLayer.getCellByPosition(0, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(0, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(0, 1);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(0, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(0, 2);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(0, cell.getOriginColumnPosition());
// test first level column
cell = this.treeLayer.getCellByPosition(1, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(1, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(1, 1);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(1, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(1, 2);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(5, cell.getRowSpan());
assertEquals(1, cell.getOriginColumnPosition());
// test second level header
cell = this.treeLayer.getCellByPosition(3, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(2, cell.getRowSpan());
assertEquals(3, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(3, 1);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(2, cell.getRowSpan());
assertEquals(3, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(4, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(2, cell.getRowSpan());
assertEquals(4, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(4, 1);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(2, cell.getRowSpan());
assertEquals(4, cell.getOriginColumnPosition());
// test for third level header
cell = this.treeLayer.getCellByPosition(7, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(1, cell.getRowSpan());
assertEquals(7, cell.getOriginColumnPosition());
cell = this.treeLayer.getCellByPosition(8, 0);
assertEquals(0, cell.getOriginRowPosition());
assertEquals(1, cell.getRowSpan());
assertEquals(8, cell.getOriginColumnPosition());
}
@Test
public void testGetDataValueByPosition() {
assertNull(this.treeLayer.getDataValueByPosition(0, 0));
assertEquals("Mercedes", this.treeLayer.getDataValueByPosition(1, 0));
assertEquals("C Klasse", this.treeLayer.getDataValueByPosition(2, 0));
assertNull(this.treeLayer.getDataValueByPosition(3, 0));
assertEquals("C320", this.treeLayer.getDataValueByPosition(4, 0));
assertEquals("160", this.treeLayer.getDataValueByPosition(5, 0));
assertNull(this.treeLayer.getDataValueByPosition(6, 0));
assertEquals(Classification.POSITIVE, this.treeLayer.getDataValueByPosition(7, 0));
assertEquals("Blubb", this.treeLayer.getDataValueByPosition(8, 0));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals("Mercedes", this.treeLayer.getDataValueByPosition(0, 0));
assertEquals("C Klasse", this.treeLayer.getDataValueByPosition(1, 0));
assertEquals("C320", this.treeLayer.getDataValueByPosition(2, 0));
assertEquals("160", this.treeLayer.getDataValueByPosition(3, 0));
assertEquals(Classification.POSITIVE, this.treeLayer.getDataValueByPosition(4, 0));
assertEquals("Blubb", this.treeLayer.getDataValueByPosition(5, 0));
}
@Test
public void testGetDisplayModeByPosition() {
// first test that all cells in a row are NORMAL
for (int i = 0; i < this.treeLayer.getColumnCount(); i++) {
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(i, 0));
}
// select a cell
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
5,
0,
false,
false));
// test that all cells despite the selected one are NORMAL
boolean selectedFound = false;
for (int i = 0; i < this.treeLayer.getColumnCount(); i++) {
if (i != 5) {
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(i, 0));
} else {
selectedFound = true;
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(i, 0));
}
}
assertTrue(selectedFound);
}
@Test
public void testGetDisplayModeByPositionWithSelectionLayer() {
this.treeLayer = new HierarchicalTreeLayer(this.selectionLayer, this.data, CarService.PROPERTY_NAMES_COMPACT, this.selectionLayer);
// first test that all cells in a row are NORMAL
for (int i = 0; i < this.treeLayer.getColumnCount(); i++) {
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(i, 0));
}
// select a cell in first level
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
1,
0,
false,
false));
// test that the level header column of the first level and the first
// content cell are selected
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(0, 0));
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(1, 0));
// then check that all other cells are NORMAL
for (int i = 2; i < this.treeLayer.getColumnCount(); i++) {
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(i, 0));
}
// select a cell in second level
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
5,
0,
false,
false));
// test that only the second level header is SELECT
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(0, 0));
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(3, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(6, 0));
// test the state of the other columns
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(1, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(2, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(4, 0));
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(5, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(7, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(8, 0));
// select a cell in third level
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
7,
0,
false,
false));
// test that only the third level header is SELECT
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(0, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(3, 0));
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(6, 0));
// test the state of the other columns
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(1, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(2, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(4, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(5, 0));
assertEquals(DisplayMode.SELECT, this.treeLayer.getDisplayModeByPosition(7, 0));
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(8, 0));
// clear selection and test that no SELECT is there anymore
this.selectionLayer.clear();
for (int i = 0; i < this.treeLayer.getColumnCount(); i++) {
assertEquals(DisplayMode.NORMAL, this.treeLayer.getDisplayModeByPosition(i, 0));
}
}
@Test
public void testSelectLevelHeader() {
// select first level header in first row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
0,
0,
false,
false));
// there is no row fully selected
assertFalse(this.selectionLayer.isRowPositionFullySelected(0));
assertFalse(this.selectionLayer.isRowPositionFullySelected(1));
assertFalse(this.selectionLayer.isRowPositionFullySelected(2));
assertFalse(this.selectionLayer.isRowPositionFullySelected(3));
assertFalse(this.selectionLayer.isRowPositionFullySelected(4));
assertFalse(this.selectionLayer.isRowPositionFullySelected(5));
// only the first 5 rows have a selection
assertTrue(this.selectionLayer.isRowPositionSelected(0));
assertTrue(this.selectionLayer.isRowPositionSelected(1));
assertTrue(this.selectionLayer.isRowPositionSelected(2));
assertTrue(this.selectionLayer.isRowPositionSelected(3));
assertTrue(this.selectionLayer.isRowPositionSelected(4));
assertFalse(this.selectionLayer.isRowPositionSelected(5));
// only the first two columns have a selection
assertTrue(this.selectionLayer.isColumnPositionSelected(0));
assertTrue(this.selectionLayer.isColumnPositionSelected(1));
assertFalse(this.selectionLayer.isColumnPositionSelected(2));
assertFalse(this.selectionLayer.isColumnPositionSelected(3));
assertFalse(this.selectionLayer.isColumnPositionSelected(4));
assertFalse(this.selectionLayer.isColumnPositionSelected(5));
// there is a region selection for first level in the first five rows
// start column 0, start row 0, two columns and five rows
assertTrue(this.selectionLayer.allCellsSelectedInRegion(new Rectangle(0, 0, 2, 5)));
// select second level header in first row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
3,
0,
false,
false));
// there is no row fully selected
assertFalse(this.selectionLayer.isRowPositionFullySelected(0));
assertFalse(this.selectionLayer.isRowPositionFullySelected(1));
assertFalse(this.selectionLayer.isRowPositionFullySelected(2));
assertFalse(this.selectionLayer.isRowPositionFullySelected(3));
assertFalse(this.selectionLayer.isRowPositionFullySelected(4));
assertFalse(this.selectionLayer.isRowPositionFullySelected(5));
// there is no selection in row 2 and 3
assertTrue(this.selectionLayer.isRowPositionSelected(0));
assertTrue(this.selectionLayer.isRowPositionSelected(1));
assertFalse(this.selectionLayer.isRowPositionSelected(2));
assertFalse(this.selectionLayer.isRowPositionSelected(3));
assertFalse(this.selectionLayer.isRowPositionSelected(4));
assertFalse(this.selectionLayer.isRowPositionSelected(5));
// there is no selection in the first level
assertFalse(this.selectionLayer.isColumnPositionSelected(0));
assertFalse(this.selectionLayer.isColumnPositionSelected(1));
assertTrue(this.selectionLayer.isColumnPositionSelected(2));
assertTrue(this.selectionLayer.isColumnPositionSelected(3));
assertFalse(this.selectionLayer.isColumnPositionSelected(4));
assertFalse(this.selectionLayer.isColumnPositionSelected(5));
// there is a region selection for second level in the first two rows
// start column 2, start row 0, two columns and two rows
assertTrue(this.selectionLayer.allCellsSelectedInRegion(new Rectangle(2, 0, 2, 2)));
// select third level header in second row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
6,
1,
false,
false));
// there is no row fully selected
assertFalse(this.selectionLayer.isRowPositionFullySelected(0));
assertFalse(this.selectionLayer.isRowPositionFullySelected(1));
assertFalse(this.selectionLayer.isRowPositionFullySelected(2));
assertFalse(this.selectionLayer.isRowPositionFullySelected(3));
assertFalse(this.selectionLayer.isRowPositionFullySelected(4));
assertFalse(this.selectionLayer.isRowPositionFullySelected(5));
// there is no selection in row 0, 2 and 3
assertFalse(this.selectionLayer.isRowPositionSelected(0));
assertTrue(this.selectionLayer.isRowPositionSelected(1));
assertFalse(this.selectionLayer.isRowPositionSelected(2));
assertFalse(this.selectionLayer.isRowPositionSelected(3));
assertFalse(this.selectionLayer.isRowPositionSelected(4));
assertFalse(this.selectionLayer.isRowPositionSelected(5));
// there is no selection in the first and second level
assertFalse(this.selectionLayer.isColumnPositionSelected(0));
assertFalse(this.selectionLayer.isColumnPositionSelected(1));
assertFalse(this.selectionLayer.isColumnPositionSelected(2));
assertFalse(this.selectionLayer.isColumnPositionSelected(3));
assertTrue(this.selectionLayer.isColumnPositionSelected(4));
assertTrue(this.selectionLayer.isColumnPositionSelected(5));
// there is a region selection for third level in the second row
// start column 4, start row 1, two columns and one row
assertTrue(this.selectionLayer.allCellsSelectedInRegion(new Rectangle(4, 1, 2, 1)));
}
@Test
public void testSelectLevelHeaderWithSublevel() {
this.treeLayer.setSelectSubLevels(true);
// select first level header in first row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
0,
0,
false,
false));
// all cells in the first 5 rows should be selected
assertTrue(this.selectionLayer.isRowPositionFullySelected(0));
assertTrue(this.selectionLayer.isRowPositionFullySelected(1));
assertTrue(this.selectionLayer.isRowPositionFullySelected(2));
assertTrue(this.selectionLayer.isRowPositionFullySelected(3));
assertTrue(this.selectionLayer.isRowPositionFullySelected(4));
// last row is a new element, so not selected
assertFalse(this.selectionLayer.isRowPositionFullySelected(5));
// select second level header in first row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
3,
0,
false,
false));
// there is no full row selection at all
assertFalse(this.selectionLayer.isRowPositionFullySelected(0));
assertFalse(this.selectionLayer.isRowPositionFullySelected(1));
assertFalse(this.selectionLayer.isRowPositionFullySelected(2));
assertFalse(this.selectionLayer.isRowPositionFullySelected(3));
assertFalse(this.selectionLayer.isRowPositionFullySelected(4));
assertFalse(this.selectionLayer.isRowPositionFullySelected(5));
// there is no selection in row 2 and 3
assertFalse(this.selectionLayer.isRowPositionSelected(2));
assertFalse(this.selectionLayer.isRowPositionSelected(3));
// there is no selection in the first level
assertFalse(this.selectionLayer.isColumnPositionSelected(0));
assertFalse(this.selectionLayer.isColumnPositionSelected(1));
// there is a region selection for second and third level in the first
// two rows
// start column 2, start row 0, four columns and two rows
assertTrue(this.selectionLayer.allCellsSelectedInRegion(new Rectangle(2, 0, 4, 2)));
// select third level header in second row
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
6,
1,
false,
false));
// there is no full row selection at all
assertFalse(this.selectionLayer.isRowPositionFullySelected(0));
assertFalse(this.selectionLayer.isRowPositionFullySelected(1));
assertFalse(this.selectionLayer.isRowPositionFullySelected(2));
assertFalse(this.selectionLayer.isRowPositionFullySelected(3));
// there is no selection in row 0, 2 and 3
assertFalse(this.selectionLayer.isRowPositionSelected(0));
assertFalse(this.selectionLayer.isRowPositionSelected(2));
assertFalse(this.selectionLayer.isRowPositionSelected(3));
// there is no selection in the first and second level
assertFalse(this.selectionLayer.isColumnPositionSelected(0));
assertFalse(this.selectionLayer.isColumnPositionSelected(1));
assertFalse(this.selectionLayer.isColumnPositionSelected(2));
assertFalse(this.selectionLayer.isColumnPositionSelected(3));
// there is a region selection for third level in the second row
// start column 4, start row 1, two columns and one row
assertTrue(this.selectionLayer.allCellsSelectedInRegion(new Rectangle(4, 1, 2, 1)));
}
@Test
public void testSelectLevelHeaderColumn() {
// select first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
false));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(0));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(1));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(2));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(3));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(4));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(5));
// deselect first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
false));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(0));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(1));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(2));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(3));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(4));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(5));
// deselect second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select third level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
6,
0,
false,
false));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(0));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(1));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(2));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(3));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(4));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(5));
// deselect third level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
6,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
true));
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
true));
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
6,
0,
false,
true));
// deselect second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
true));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(0));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(1));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(2));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(3));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(4));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(5));
}
@Test
public void testSelectLevelHeaderColumnWithSublevel() {
this.treeLayer.setSelectSubLevels(true);
// select first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
false));
assertEquals(6, this.selectionLayer.getFullySelectedColumnPositions().length);
assertEquals(11, this.selectionLayer.getFullySelectedRowPositions().length);
// deselect first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
false));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(0));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(1));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(2));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(3));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(4));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(5));
// deselect second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select third level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
6,
0,
false,
false));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(0));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(1));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(2));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(3));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(4));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(5));
// deselect third level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
6,
0,
false,
true));
assertTrue(this.selectionLayer.getSelectionModel().isEmpty());
// select first level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
0,
0,
false,
false));
// deselect second level header column
this.treeLayer.doCommand(new SelectColumnCommand(
this.treeLayer,
3,
0,
false,
true));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(0));
assertTrue(this.selectionLayer.isColumnPositionFullySelected(1));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(2));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(3));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(4));
assertFalse(this.selectionLayer.isColumnPositionFullySelected(5));
}
@Test
public void testSelectSpannedCellIsOrigin() {
// add the PreserveSelectionModel to avoid that the selection is cleared
// on expand collapse
this.selectionLayer.setSelectionModel(
new PreserveSelectionModel<>(this.selectionLayer,
this.bodyDataProvider,
new IRowIdAccessor<HierarchicalWrapper>() {
@Override
public Serializable getRowId(HierarchicalWrapper rowObject) {
return rowObject.hashCode();
}
}));
assertTrue(this.selectionLayer.getSelectedCells().isEmpty());
// select a cell in first level
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
1,
3,
false,
false));
assertEquals(1, this.selectionLayer.getSelectedCells().size());
ILayerCell cell = this.selectionLayer.getSelectedCells().iterator().next();
assertEquals(0, cell.getColumnPosition());
assertEquals(0, cell.getRowPosition());
}
@Test
public void testgetLevelByColumnIndex() {
assertEquals(-1, this.treeLayer.getLevelByColumnIndex(-1));
assertEquals(0, this.treeLayer.getLevelByColumnIndex(0));
assertEquals(0, this.treeLayer.getLevelByColumnIndex(1));
assertEquals(1, this.treeLayer.getLevelByColumnIndex(2));
assertEquals(1, this.treeLayer.getLevelByColumnIndex(3));
assertEquals(2, this.treeLayer.getLevelByColumnIndex(4));
assertEquals(2, this.treeLayer.getLevelByColumnIndex(5));
assertEquals(-1, this.treeLayer.getLevelByColumnIndex(6));
}
@Test
public void testGetColumnIndexesForLevel() {
List<Integer> columnIndexesForLevel = this.treeLayer.getColumnIndexesForLevel(0);
assertEquals(2, columnIndexesForLevel.size());
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(0)));
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(1)));
columnIndexesForLevel = this.treeLayer.getColumnIndexesForLevel(1);
assertEquals(2, columnIndexesForLevel.size());
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(2)));
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(3)));
columnIndexesForLevel = this.treeLayer.getColumnIndexesForLevel(2);
assertEquals(2, columnIndexesForLevel.size());
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(4)));
assertTrue(columnIndexesForLevel.contains(Integer.valueOf(5)));
}
@Test
public void testColumnCount() {
// we expect 6 content columns and 3 level headers for 3 levels
assertEquals(9, this.treeLayer.getColumnCount());
this.treeLayer.setShowTreeLevelHeader(false);
// now only the content columns should be shown
assertEquals(6, this.treeLayer.getColumnCount());
}
@Test
public void testGetColumnIndexByPosition() {
assertEquals(-13, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(2));
assertEquals(-26, this.treeLayer.getColumnIndexByPosition(3));
assertEquals(2, this.treeLayer.getColumnIndexByPosition(4));
assertEquals(3, this.treeLayer.getColumnIndexByPosition(5));
assertEquals(-39, this.treeLayer.getColumnIndexByPosition(6));
assertEquals(4, this.treeLayer.getColumnIndexByPosition(7));
assertEquals(5, this.treeLayer.getColumnIndexByPosition(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(-1, this.treeLayer.getColumnIndexByPosition(-1));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(2, this.treeLayer.getColumnIndexByPosition(2));
assertEquals(3, this.treeLayer.getColumnIndexByPosition(3));
assertEquals(4, this.treeLayer.getColumnIndexByPosition(4));
assertEquals(5, this.treeLayer.getColumnIndexByPosition(5));
assertEquals(-1, this.treeLayer.getColumnIndexByPosition(6));
}
@Test
public void testGetColumnPositionByIndex() {
assertEquals(0, this.treeLayer.getColumnPositionByIndex(-13));
assertEquals(1, this.treeLayer.getColumnPositionByIndex(0));
assertEquals(2, this.treeLayer.getColumnPositionByIndex(1));
assertEquals(3, this.treeLayer.getColumnPositionByIndex(-26));
assertEquals(4, this.treeLayer.getColumnPositionByIndex(2));
assertEquals(5, this.treeLayer.getColumnPositionByIndex(3));
assertEquals(6, this.treeLayer.getColumnPositionByIndex(-39));
assertEquals(7, this.treeLayer.getColumnPositionByIndex(4));
assertEquals(8, this.treeLayer.getColumnPositionByIndex(5));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.getColumnPositionByIndex(0));
assertEquals(1, this.treeLayer.getColumnPositionByIndex(1));
assertEquals(2, this.treeLayer.getColumnPositionByIndex(2));
assertEquals(3, this.treeLayer.getColumnPositionByIndex(3));
assertEquals(4, this.treeLayer.getColumnPositionByIndex(4));
assertEquals(5, this.treeLayer.getColumnPositionByIndex(5));
}
@Test
public void testUnderlyingToLocalColumnPosition() {
assertEquals(1, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 0));
assertEquals(2, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 1));
assertEquals(4, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 2));
assertEquals(5, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 3));
assertEquals(7, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 4));
assertEquals(8, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 5));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 0));
assertEquals(1, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 1));
assertEquals(2, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 2));
assertEquals(3, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 3));
assertEquals(4, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 4));
assertEquals(5, this.treeLayer.underlyingToLocalColumnPosition(this.selectionLayer, 5));
}
@Test
public void testUnderlyingToLocalColumnPositions() {
ArrayList<Range> positionRanges = new ArrayList<>();
positionRanges.add(new Range(0, 2));
positionRanges.add(new Range(2, 4));
positionRanges.add(new Range(4, 6));
Collection<Range> underlying = this.treeLayer.underlyingToLocalColumnPositions(this.selectionLayer, positionRanges);
ArrayList<Range> list = new ArrayList<>(underlying);
assertEquals(new Range(1, 3), list.get(0));
assertEquals(new Range(4, 6), list.get(1));
assertEquals(new Range(7, 9), list.get(2));
this.treeLayer.setShowTreeLevelHeader(false);
underlying = this.treeLayer.underlyingToLocalColumnPositions(this.selectionLayer, positionRanges);
list = new ArrayList<>(underlying);
assertEquals(new Range(0, 2), list.get(0));
assertEquals(new Range(2, 4), list.get(1));
assertEquals(new Range(4, 6), list.get(2));
}
@Test
public void testReorderInLevel() {
this.treeLayer.doCommand(new ColumnReorderCommand(this.treeLayer, 1, 3));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(2));
}
@Test
public void testReorderInLevelWithoutLevelHeader() {
this.treeLayer.setShowTreeLevelHeader(false);
this.treeLayer.doCommand(new ColumnReorderCommand(this.treeLayer, 0, 2));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(1));
}
@Test
public void testNoReorderBetweenLevels() {
this.treeLayer.doCommand(new ColumnReorderCommand(this.treeLayer, 2, 5));
// nothing should have changed because that reorder is not allowed
assertEquals(0, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(2));
}
@Test
public void testNoReorderBetweenLevelsWithoutLevelHeader() {
this.treeLayer.setShowTreeLevelHeader(false);
this.treeLayer.doCommand(new ColumnReorderCommand(this.treeLayer, 1, 3));
// nothing should have changed because that reorder is not allowed
assertEquals(0, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(1));
}
@Test
public void testLevelHeaderCanNotBeReordered() {
this.treeLayer.doCommand(new ColumnReorderCommand(this.treeLayer, 0, 2));
assertEquals(-13, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(2));
assertEquals(-26, this.treeLayer.getColumnIndexByPosition(3));
}
@Test
public void testNoMultiReorderBetweenLevels() {
List<Integer> fromColumnPositions = Arrays.asList(1, 2);
this.treeLayer.doCommand(new MultiColumnReorderCommand(this.treeLayer, fromColumnPositions, 5));
// nothing should have changed because that reorder is not allowed
assertEquals(-13, this.treeLayer.getColumnIndexByPosition(0));
assertEquals(0, this.treeLayer.getColumnIndexByPosition(1));
assertEquals(1, this.treeLayer.getColumnIndexByPosition(2));
assertEquals(-26, this.treeLayer.getColumnIndexByPosition(3));
}
@Test
public void testGetWidth() {
assertEquals(660, this.treeLayer.getWidth());
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(600, this.treeLayer.getWidth());
}
@Test
public void testGetColumnWidthByPosition() {
assertEquals(20, this.treeLayer.getColumnWidthByPosition(0));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(1));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(2));
assertEquals(20, this.treeLayer.getColumnWidthByPosition(3));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(4));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(5));
assertEquals(20, this.treeLayer.getColumnWidthByPosition(6));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(7));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(100, this.treeLayer.getColumnWidthByPosition(0));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(1));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(2));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(3));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(4));
assertEquals(100, this.treeLayer.getColumnWidthByPosition(5));
}
@Test
public void testGetStartXOfColumnPosition() {
assertEquals(0, this.treeLayer.getStartXOfColumnPosition(0));
assertEquals(20, this.treeLayer.getStartXOfColumnPosition(1));
assertEquals(120, this.treeLayer.getStartXOfColumnPosition(2));
assertEquals(220, this.treeLayer.getStartXOfColumnPosition(3));
assertEquals(240, this.treeLayer.getStartXOfColumnPosition(4));
assertEquals(340, this.treeLayer.getStartXOfColumnPosition(5));
assertEquals(440, this.treeLayer.getStartXOfColumnPosition(6));
assertEquals(460, this.treeLayer.getStartXOfColumnPosition(7));
assertEquals(560, this.treeLayer.getStartXOfColumnPosition(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.getStartXOfColumnPosition(0));
assertEquals(100, this.treeLayer.getStartXOfColumnPosition(1));
assertEquals(200, this.treeLayer.getStartXOfColumnPosition(2));
assertEquals(300, this.treeLayer.getStartXOfColumnPosition(3));
assertEquals(400, this.treeLayer.getStartXOfColumnPosition(4));
assertEquals(500, this.treeLayer.getStartXOfColumnPosition(5));
}
@Test
public void testGetColumnPositionByX() {
assertEquals(0, this.treeLayer.getColumnPositionByX(5));
assertEquals(1, this.treeLayer.getColumnPositionByX(21));
assertEquals(2, this.treeLayer.getColumnPositionByX(180));
assertEquals(3, this.treeLayer.getColumnPositionByX(220));
assertEquals(4, this.treeLayer.getColumnPositionByX(339));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.getColumnPositionByX(5));
assertEquals(0, this.treeLayer.getColumnPositionByX(21));
assertEquals(1, this.treeLayer.getColumnPositionByX(180));
assertEquals(2, this.treeLayer.getColumnPositionByX(220));
assertEquals(3, this.treeLayer.getColumnPositionByX(339));
assertEquals(4, this.treeLayer.getColumnPositionByX(499));
}
private void scaleTo150() {
IDpiConverter dpiConverter = new AbstractDpiConverter() {
@Override
protected void readDpiFromDisplay() {
this.dpi = 144;
}
};
this.treeLayer.doCommand(new ConfigureScalingCommand(dpiConverter, dpiConverter));
}
@Test
public void testGetWidthScaled() {
scaleTo150();
assertEquals(990, this.treeLayer.getWidth());
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(900, this.treeLayer.getWidth());
}
@Test
public void testGetColumnWidthByPositionScaled() {
scaleTo150();
assertEquals(30, this.treeLayer.getColumnWidthByPosition(0));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(1));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(2));
assertEquals(30, this.treeLayer.getColumnWidthByPosition(3));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(4));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(5));
assertEquals(30, this.treeLayer.getColumnWidthByPosition(6));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(7));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(150, this.treeLayer.getColumnWidthByPosition(0));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(1));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(2));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(3));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(4));
assertEquals(150, this.treeLayer.getColumnWidthByPosition(5));
}
@Test
public void testGetStartXOfColumnPositionScaled() {
scaleTo150();
assertEquals(0, this.treeLayer.getStartXOfColumnPosition(0));
assertEquals(30, this.treeLayer.getStartXOfColumnPosition(1));
assertEquals(180, this.treeLayer.getStartXOfColumnPosition(2));
assertEquals(330, this.treeLayer.getStartXOfColumnPosition(3));
assertEquals(360, this.treeLayer.getStartXOfColumnPosition(4));
assertEquals(510, this.treeLayer.getStartXOfColumnPosition(5));
assertEquals(660, this.treeLayer.getStartXOfColumnPosition(6));
assertEquals(690, this.treeLayer.getStartXOfColumnPosition(7));
assertEquals(840, this.treeLayer.getStartXOfColumnPosition(8));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.getStartXOfColumnPosition(0));
assertEquals(150, this.treeLayer.getStartXOfColumnPosition(1));
assertEquals(300, this.treeLayer.getStartXOfColumnPosition(2));
assertEquals(450, this.treeLayer.getStartXOfColumnPosition(3));
assertEquals(600, this.treeLayer.getStartXOfColumnPosition(4));
assertEquals(750, this.treeLayer.getStartXOfColumnPosition(5));
}
@Test
public void testGetColumnPositionByXScaled() {
scaleTo150();
assertEquals(0, this.treeLayer.getColumnPositionByX(7));
assertEquals(1, this.treeLayer.getColumnPositionByX(32));
assertEquals(2, this.treeLayer.getColumnPositionByX(270));
assertEquals(3, this.treeLayer.getColumnPositionByX(330));
assertEquals(4, this.treeLayer.getColumnPositionByX(508));
this.treeLayer.setShowTreeLevelHeader(false);
assertEquals(0, this.treeLayer.getColumnPositionByX(7));
assertEquals(0, this.treeLayer.getColumnPositionByX(32));
assertEquals(1, this.treeLayer.getColumnPositionByX(270));
assertEquals(2, this.treeLayer.getColumnPositionByX(330));
assertEquals(3, this.treeLayer.getColumnPositionByX(508));
assertEquals(4, this.treeLayer.getColumnPositionByX(749));
}
@Test
public void testCollapseExpandSingleItemFirstLevel() {
assertEquals(11, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.collapsedNodes.isEmpty());
assertTrue(this.treeLayer.getHiddenRowIndexes().isEmpty());
// collapse first node in first level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(HideRowPositionsEvent.class));
HideRowPositionsEvent hideEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
Collection<Range> rowPositionRanges = hideEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 5), rowPositionRanges.iterator().next());
// expand first node in first level again
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(11, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.collapsedNodes.isEmpty());
assertTrue(this.treeLayer.getHiddenRowIndexes().isEmpty());
assertEquals(2, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(ShowRowPositionsEvent.class));
ShowRowPositionsEvent showEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
rowPositionRanges = showEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 5), rowPositionRanges.iterator().next());
}
// collapse second - collapse first - expand first - second still collapsed
@Test
public void testCollapseMultipleExpandSingle() {
assertEquals(11, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.collapsedNodes.isEmpty());
assertTrue(this.treeLayer.getHiddenRowIndexes().isEmpty());
// collapse first node in second level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(0, node.rowIndex);
assertEquals(2, node.columnIndex);
assertNotNull(node.rowObject);
assertEquals(1, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(HideRowPositionsEvent.class));
HideRowPositionsEvent hideEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
Collection<Range> rowPositionRanges = hideEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 2), rowPositionRanges.iterator().next());
int[] rowIndexes = hideEvent.getRowIndexes();
assertEquals(1, rowIndexes.length);
assertEquals(1, rowIndexes[0]);
this.layerListener.clearReceivedEvents();
// collapse first node in first level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(2, this.treeLayer.collapsedNodes.size());
assertTrue(this.treeLayer.collapsedNodes.contains(new HierarchicalTreeNode(2, 0, null)));
assertTrue(this.treeLayer.collapsedNodes.contains(new HierarchicalTreeNode(0, 0, null)));
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(HideRowPositionsEvent.class));
hideEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
rowPositionRanges = hideEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
// only range 1 to 4 because one row is already hidden through previous
// collapse
assertEquals(new Range(1, 4), rowPositionRanges.iterator().next());
rowIndexes = hideEvent.getRowIndexes();
assertEquals(3, rowIndexes.length);
assertEquals(2, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
// expand first node in first level again
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(0, node.rowIndex);
assertEquals(2, node.columnIndex);
assertNotNull(node.rowObject);
assertEquals(1, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
assertEquals(2, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(ShowRowPositionsEvent.class));
ShowRowPositionsEvent showEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
rowPositionRanges = showEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 4), rowPositionRanges.iterator().next());
// first sub node is still collapsed, the indexes 2, 3, 4 are shown
// again, 1 stays hidden
rowIndexes = showEvent.getRowIndexes();
assertEquals(3, rowIndexes.length);
assertEquals(2, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
int[] hiddenRowIndexesArray = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(1, hiddenRowIndexesArray.length);
assertEquals(1, hiddenRowIndexesArray[0]);
}
// collapse second - collapse first - expand first to level 1 - second also
// expanded
@Test
public void testCollapseMultipleExpandSingleToLevel() {
// collapse first node in second level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 2));
// collapse first node in first level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(2, this.treeLayer.collapsedNodes.size());
assertTrue(this.treeLayer.collapsedNodes.contains(new HierarchicalTreeNode(2, 0, null)));
assertTrue(this.treeLayer.collapsedNodes.contains(new HierarchicalTreeNode(0, 0, null)));
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
// expand first node in first level to level 1
this.treeLayer.doCommand(new TreeExpandToLevelCommand(0, 1));
assertEquals(11, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.collapsedNodes.isEmpty());
assertTrue(this.treeLayer.getHiddenRowIndexes().isEmpty());
assertEquals(3, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(ShowRowPositionsEvent.class));
ShowRowPositionsEvent showEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
Collection<Range> rowPositionRanges = showEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 5), rowPositionRanges.iterator().next());
}
// collapseAll - expand single item with sub items - sub items are all
// collapsed
@Test
public void testCollapseAll() {
this.treeLayer.doCommand(new TreeCollapseAllCommand());
assertEquals(3, this.treeLayer.getRowCount());
assertEquals(6, this.treeLayer.collapsedNodes.size());
assertEquals(8, this.treeLayer.getHiddenRowIndexes().size());
HideRowPositionsEvent hideEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
Collection<Range> rowPositionRanges = hideEvent.getRowPositionRanges();
assertEquals(2, rowPositionRanges.size());
assertTrue(rowPositionRanges.contains(new Range(1, 5)));
assertTrue(rowPositionRanges.contains(new Range(7, 11)));
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 0));
assertEquals(5, this.treeLayer.getRowCount());
assertEquals(5, this.treeLayer.collapsedNodes.size());
assertEquals(6, this.treeLayer.getHiddenRowIndexes().size());
ShowRowPositionsEvent showEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
rowPositionRanges = showEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
// row positions 1 and 2 are made visible again
assertEquals(new Range(1, 3), rowPositionRanges.iterator().next());
// as sub nodes are still collapsed, the indexes 2 and 3 are shown
// again, 1 and 4 stay hidden
int[] rowIndexes = showEvent.getRowIndexes();
assertEquals(2, rowIndexes.length);
assertEquals(2, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
int[] hiddenRowIndexesArray = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(6, hiddenRowIndexesArray.length);
assertEquals(1, hiddenRowIndexesArray[0]);
assertEquals(4, hiddenRowIndexesArray[1]);
assertEquals(7, hiddenRowIndexesArray[2]);
assertEquals(8, hiddenRowIndexesArray[3]);
assertEquals(9, hiddenRowIndexesArray[4]);
assertEquals(10, hiddenRowIndexesArray[5]);
}
@Test
public void testCollapseAllExpandAll() {
this.treeLayer.doCommand(new TreeCollapseAllCommand());
assertEquals(3, this.treeLayer.getRowCount());
assertEquals(6, this.treeLayer.collapsedNodes.size());
assertEquals(8, this.treeLayer.getHiddenRowIndexes().size());
this.treeLayer.doCommand(new TreeExpandAllCommand());
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(0, this.treeLayer.collapsedNodes.size());
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
// collapseAll - expand to first level - expand one element in second level
// - ensure others in second level are still collapsed
@Test
public void testExpandToLevel() {
// first collapse all
this.treeLayer.doCommand(new TreeCollapseAllCommand());
// expand first level
this.treeLayer.doCommand(new TreeExpandToLevelCommand(0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(4, this.treeLayer.collapsedNodes.size());
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
// expand one single node on second level to ensure the collapsed states
// are correct
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 2));
assertEquals(8, this.treeLayer.getRowCount());
assertEquals(3, this.treeLayer.collapsedNodes.size());
assertEquals(3, this.treeLayer.getHiddenRowIndexes().size());
}
// collapse second level - collapseAll - all nodes collapsed
@Test
public void testConsecutiveCollapse() {
// collapse first node in second level
this.treeLayer.doCommand(new TreeExpandCollapseCommand(0, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(0, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(1, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
this.treeLayer.doCommand(new TreeCollapseAllCommand());
assertEquals(3, this.treeLayer.getRowCount());
assertEquals(6, this.treeLayer.collapsedNodes.size());
assertEquals(8, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testExpandOnSearch() {
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(10, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(0, this.treeLayer.collapsedNodes.size());
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testExpandAllLevelsOnSearch() {
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
this.treeLayer.doCommand(new TreeExpandCollapseCommand(6, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(2, this.treeLayer.collapsedNodes.size());
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(0, this.treeLayer.collapsedNodes.size());
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testUnhideOnSearch() {
this.treeLayer.setExpandOnSearch(false);
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(10, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testExpandOnSearchWithoutLevelHeader() {
this.treeLayer.setShowTreeLevelHeader(false);
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(10, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(0, this.treeLayer.collapsedNodes.size());
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testExpandAllLevelsOnSearchWithoutLevelHeader() {
this.treeLayer.setShowTreeLevelHeader(false);
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
this.treeLayer.doCommand(new TreeExpandCollapseCommand(6, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertEquals(2, this.treeLayer.collapsedNodes.size());
assertEquals(4, this.treeLayer.getHiddenRowIndexes().size());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(0, this.treeLayer.collapsedNodes.size());
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testUnhideOnSearchWithoutLevelHeader() {
this.treeLayer.setShowTreeLevelHeader(false);
this.treeLayer.setExpandOnSearch(false);
this.treeLayer.doCommand(new TreeExpandCollapseCommand(9, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
HierarchicalTreeNode node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(10, this.treeLayer.getHiddenRowIndexes().iterator().next().intValue());
// search for the collapsed row
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, new DefaultDisplayConverter());
GridSearchStrategy gridSearchStrategy = new GridSearchStrategy(configRegistry, false, true);
SearchCommand searchCommand = new SearchCommand(
"sing",
this.selectionLayer,
gridSearchStrategy,
ISearchDirection.SEARCH_FORWARD,
false,
false,
false,
false,
false,
false,
new CellValueAsStringComparator<>());
this.treeLayer.doCommand(searchCommand);
assertEquals(11, this.treeLayer.getRowCount());
assertEquals(1, this.treeLayer.collapsedNodes.size());
node = this.treeLayer.collapsedNodes.iterator().next();
assertEquals(2, node.columnIndex);
assertEquals(9, node.rowIndex);
assertNotNull(node.rowObject);
assertEquals(0, this.treeLayer.getHiddenRowIndexes().size());
}
@Test
public void testGetProvidedLabels() {
Collection<String> providedLabels = this.treeLayer.getProvidedLabels();
assertEquals(19, providedLabels.size());
assertTrue(providedLabels.contains(TreeLayer.TREE_COLUMN_CELL));
assertTrue(providedLabels.contains(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE));
assertTrue(providedLabels.contains(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE));
assertTrue(providedLabels.contains(DefaultTreeLayerConfiguration.TREE_LEAF_CONFIG_TYPE));
assertTrue(providedLabels.contains(DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + "0"));
assertTrue(providedLabels.contains(HierarchicalTreeLayer.COLLAPSED_CHILD));
assertTrue(providedLabels.contains(HierarchicalTreeLayer.LEVEL_HEADER_CELL));
assertTrue(providedLabels.contains(HierarchicalTreeLayer.NO_OBJECT_IN_LEVEL));
}
@Test
public void testNoLevelObject() {
HierarchicalWrapper incomplete = new HierarchicalWrapper(3);
incomplete.setObject(0, new Car("Opel", "Insignia"));
this.data.add(incomplete);
assertEquals(12, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.hasLevelObject(1, 11));
assertFalse(this.treeLayer.hasLevelObject(3, 11));
assertFalse(this.treeLayer.hasLevelObject(4, 11));
assertFalse(this.treeLayer.hasLevelObject(6, 11));
assertFalse(this.treeLayer.hasLevelObject(7, 11));
assertNull(this.treeLayer.getCellByPosition(4, 11).getDataValue());
assertNull(this.treeLayer.getCellByPosition(7, 11).getDataValue());
LabelStack stack = this.treeLayer.getConfigLabelsByPosition(4, 11);
assertTrue(stack.hasLabel(HierarchicalTreeLayer.NO_OBJECT_IN_LEVEL));
stack = this.treeLayer.getConfigLabelsByPosition(7, 11);
assertTrue(stack.hasLabel(HierarchicalTreeLayer.NO_OBJECT_IN_LEVEL));
this.treeLayer.setHandleNoObjectsInLevel(false);
stack = this.treeLayer.getConfigLabelsByPosition(4, 11);
assertFalse(stack.hasLabel(HierarchicalTreeLayer.NO_OBJECT_IN_LEVEL));
}
@Test
public void testColumnHide() {
assertEquals(9, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 4)));
assertEquals(8, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.doCommand(new ColumnHideCommand(this.treeLayer, 3)));
assertEquals(8, this.treeLayer.getColumnCount());
}
@Test
public void testMultiColumnHide() {
assertEquals(9, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.doCommand(new MultiColumnHideCommand(this.treeLayer, 4, 5)));
assertEquals(7, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.isLevelHeaderColumn(4));
this.treeLayer.doCommand(new ShowAllColumnsCommand());
assertTrue(this.treeLayer.doCommand(new MultiColumnHideCommand(this.treeLayer, 2, 3, 4)));
assertEquals(7, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(2));
assertTrue(this.treeLayer.isLevelHeaderColumn(4));
this.treeLayer.doCommand(new ShowAllColumnsCommand());
assertTrue(this.treeLayer.doCommand(
new MultiColumnHideCommand(this.treeLayer, 0, 1, 2, 3, 4, 5, 6, 7, 8)));
assertEquals(3, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.isLevelHeaderColumn(0));
assertTrue(this.treeLayer.isLevelHeaderColumn(1));
assertTrue(this.treeLayer.isLevelHeaderColumn(2));
}
@Test
public void testHideAllColumnsInLastLevel() {
assertEquals(9, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.doCommand(new MultiColumnHideCommand(this.treeLayer, 7, 8)));
assertEquals(7, this.treeLayer.getColumnCount());
assertTrue(this.treeLayer.isLevelHeaderColumn(6));
// check hide indicator
LabelStack labelStack = this.treeLayer.getConfigLabelsByPosition(6, 0);
assertTrue(labelStack.hasLabel(HideIndicatorConstants.COLUMN_RIGHT_HIDDEN));
// check start position
assertEquals(440, this.treeLayer.getStartXOfColumnPosition(6));
}
@Test
public void testRowPositionHide() {
assertEquals(11, this.treeLayer.getRowCount());
// first level first item spans 5 rows
assertTrue(this.treeLayer.doCommand(new RowPositionHideCommand(this.treeLayer, 0, 0)));
assertEquals(6, this.treeLayer.getRowCount());
this.treeLayer.doCommand(new ShowAllRowsCommand());
// second level third item spans 2 rows
assertTrue(this.treeLayer.doCommand(new RowPositionHideCommand(this.treeLayer, 3, 3)));
assertEquals(9, this.treeLayer.getRowCount());
ILayerCell cell = this.treeLayer.getCellByPosition(1, 0);
assertEquals(3, cell.getRowSpan());
this.treeLayer.doCommand(new ShowAllRowsCommand());
// if we do not provide a level header column position, we do a simple
// row hide
assertTrue(this.treeLayer.doCommand(new RowPositionHideCommand(this.treeLayer, 1, 1)));
assertEquals(10, this.treeLayer.getRowCount());
cell = this.treeLayer.getCellByPosition(1, 0);
assertEquals(4, cell.getRowSpan());
cell = this.treeLayer.getCellByPosition(4, 1);
assertEquals(1, cell.getRowSpan());
}
@Test
public void testHideAllSelectedRowPositions() {
assertEquals(11, this.treeLayer.getRowCount());
// select first 5 items and last 5 items
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
0,
0,
false,
false));
this.treeLayer.doCommand(new SelectCellCommand(
this.treeLayer,
0,
7,
false,
true));
assertEquals(10, this.selectionLayer.getSelectedRowCount());
// all selected rows should be hidden
assertTrue(this.treeLayer.doCommand(new RowPositionHideCommand(this.treeLayer, 0, 0)));
assertEquals(1, this.treeLayer.getRowCount());
}
@Test
public void shouldPerformEditChecksOnHierarchicalTreeLayer() {
this.treeLayer.setConfigLabelAccumulator(new IConfigLabelAccumulator() {
@Override
public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) {
// second row in second level is not editable
if (rowPosition == 2 && (columnPosition == 4 || columnPosition == 5)) {
configLabels.addLabel("not_editable");
}
}
});
ConfigRegistry configRegistry = new ConfigRegistry();
configRegistry.registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE,
EditableRule.ALWAYS_EDITABLE);
configRegistry.registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE,
EditableRule.NEVER_EDITABLE,
DisplayMode.EDIT,
"not_editable");
this.treeLayer.doCommand(new SelectCellCommand(this.treeLayer, 4, 1, false, false));
this.treeLayer.doCommand(new SelectCellCommand(this.treeLayer, 5, 3, true, false));
assertEquals(6, this.selectionLayer.getSelectedCells().size());
assertTrue(EditUtils.allCellsEditable(this.selectionLayer, configRegistry));
assertFalse(EditUtils.allCellsEditable(this.selectionLayer, this.treeLayer, configRegistry));
}
@Test
public void shouldHideAndCollapse() {
this.treeLayer.doCommand(new RowHideCommand(this.treeLayer, 2));
assertEquals(10, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.isRowIndexHidden(2));
this.layerListener.clearReceivedEvents();
this.treeLayer.doCommand(new HierarchicalTreeExpandCollapseCommand(0, 0));
assertEquals(7, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.hasHiddenRows());
int[] hiddenRowIndexes = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(4, hiddenRowIndexes.length);
assertEquals(1, hiddenRowIndexes[0]);
assertEquals(2, hiddenRowIndexes[1]);
assertEquals(3, hiddenRowIndexes[2]);
assertEquals(4, hiddenRowIndexes[3]);
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(HideRowPositionsEvent.class));
HideRowPositionsEvent receivedEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
Collection<Range> rowPositionRanges = receivedEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 4), rowPositionRanges.iterator().next());
int[] rowIndexes = receivedEvent.getRowIndexes();
// only 3 indexes hidden as 1 index was already hidden in an underlying
// layer before
assertEquals(3, rowIndexes.length);
assertEquals(1, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
}
@Test
public void shouldCollapseAllWithHidden() {
this.treeLayer.doCommand(new RowHideCommand(this.treeLayer, 2));
assertEquals(10, this.treeLayer.getRowCount());
this.layerListener.clearReceivedEvents();
this.treeLayer.doCommand(new TreeCollapseAllCommand());
assertEquals(3, this.treeLayer.getRowCount());
int[] hiddenRowIndexes = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(8, hiddenRowIndexes.length);
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(HideRowPositionsEvent.class));
HideRowPositionsEvent receivedEvent = (HideRowPositionsEvent) this.layerListener.getReceivedEvent(HideRowPositionsEvent.class);
Collection<Range> rowPositionRanges = receivedEvent.getRowPositionRanges();
assertEquals(2, rowPositionRanges.size());
Iterator<Range> iterator = rowPositionRanges.iterator();
assertEquals(new Range(1, 4), iterator.next());
assertEquals(new Range(6, 10), iterator.next());
int[] rowIndexes = receivedEvent.getRowIndexes();
// 7 because 1 row was already hidden
assertEquals(7, rowIndexes.length);
assertEquals(1, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
assertEquals(7, rowIndexes[3]);
assertEquals(8, rowIndexes[4]);
assertEquals(9, rowIndexes[5]);
assertEquals(10, rowIndexes[6]);
}
@Test
public void shouldExpandWithHidden() {
this.treeLayer.doCommand(new RowHideCommand(this.treeLayer, 2));
// collapse
this.treeLayer.doCommand(new HierarchicalTreeExpandCollapseCommand(0, 0));
this.layerListener.clearReceivedEvents();
// expand again
this.treeLayer.doCommand(new HierarchicalTreeExpandCollapseCommand(0, 0));
assertEquals(10, this.treeLayer.getRowCount());
assertFalse(this.treeLayer.hasHiddenRows());
assertTrue(this.treeLayer.isRowIndexHidden(2));
int[] hiddenRowIndexes = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(0, hiddenRowIndexes.length);
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(ShowRowPositionsEvent.class));
ShowRowPositionsEvent receivedEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
Collection<Range> rowPositionRanges = receivedEvent.getRowPositionRanges();
assertEquals(1, rowPositionRanges.size());
assertEquals(new Range(1, 4), rowPositionRanges.iterator().next());
int[] rowIndexes = receivedEvent.getRowIndexes();
// only 3 indexes shown again as 1 index is still hidden in an
// underlying layer
assertEquals(3, rowIndexes.length);
assertEquals(1, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
}
@Test
public void shouldExpandAllWithHidden() {
this.treeLayer.doCommand(new RowHideCommand(this.treeLayer, 2));
// collapse
this.treeLayer.doCommand(new TreeCollapseAllCommand());
this.layerListener.clearReceivedEvents();
// expand again
this.treeLayer.doCommand(new TreeExpandAllCommand());
assertEquals(10, this.treeLayer.getRowCount());
assertTrue(this.treeLayer.isRowIndexHidden(2));
assertFalse(this.treeLayer.hasHiddenRows());
int[] hiddenRowIndexes = this.treeLayer.getHiddenRowIndexesArray();
assertEquals(0, hiddenRowIndexes.length);
assertEquals(1, this.layerListener.getEventsCount());
assertTrue(this.layerListener.containsInstanceOf(ShowRowPositionsEvent.class));
ShowRowPositionsEvent receivedEvent = (ShowRowPositionsEvent) this.layerListener.getReceivedEvent(ShowRowPositionsEvent.class);
Collection<Range> rowPositionRanges = receivedEvent.getRowPositionRanges();
Iterator<Range> iterator = rowPositionRanges.iterator();
assertEquals(new Range(1, 4), iterator.next());
assertEquals(new Range(6, 10), iterator.next());
int[] rowIndexes = receivedEvent.getRowIndexes();
// 7 because 1 row was already hidden
assertEquals(7, rowIndexes.length);
assertEquals(1, rowIndexes[0]);
assertEquals(3, rowIndexes[1]);
assertEquals(4, rowIndexes[2]);
assertEquals(7, rowIndexes[3]);
assertEquals(8, rowIndexes[4]);
assertEquals(9, rowIndexes[5]);
assertEquals(10, rowIndexes[6]);
}
}