@Override public Range deleteRow(final int rowIndex) { //Find row that is the "lead" in a merged collapsed block GridRow row; int minRowIndex = rowIndex; int maxRowIndex = rowIndex; while ((row = rows.get(minRowIndex)).isMerged() && row.isCollapsed() && minRowIndex > 0) { minRowIndex--; } //Find last row in a merged collapsed block do { maxRowIndex++; } while (maxRowIndex < rows.size() && rows.get(maxRowIndex).isCollapsed()); maxRowIndex--; final Range range = new Range(minRowIndex, maxRowIndex); for (int _rowIndex = minRowIndex; _rowIndex <= maxRowIndex; _rowIndex++) { rows.remove(minRowIndex); } indexManager.onDeleteRow(range); selectionsManager.onDeleteRow(range); return range; }
protected static boolean isCollapsedRowMultiValue(final GridData model, final GridColumn<?> column, final GridCell<?> cell, final int rowIndex) { GridRow row; int rowOffset = 1; final int columnIndex = column.getIndex(); //Iterate collapsed rows checking if the values differ while ((row = model.getRow(rowIndex - rowOffset)).isCollapsed()) { final GridCell<?> nc = row.getCells().get(columnIndex); if (!Objects.equals(nc, cell)) { return true; } rowOffset++; } //Check "lead" row as well - since this is not marked as collapsed final GridCell<?> nc = row.getCells().get(columnIndex); if (!Objects.equals(nc, cell)) { return true; } return false; }
@Test public void testIsCollapsedCellMixedValue() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isFalse(); }
@Test public void testIsCollapsedRowMixedValueOneDifferentValue_2() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedRowMixedValueOneDifferentValue_1() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("two", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_3() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("two", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedRowMixedValueThreeDifferentValues() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("three", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedRowMixedValueOneDifferentValue_3() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("two", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_2() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("two", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedRowMixedValueOneDifferentValue_3() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("two", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_2() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("two", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_3() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("two", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedCellMixedValue() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isFalse(); }
@Test public void testIsCollapsedRowMixedValueThreeDifferentValues() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("three", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isTrue(); }
@Test public void testIsCollapsedRowMixedValue() throws Exception { final GridColumn<String> gridColumn = mock(GridColumn.class); final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("one", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); final GridRow gridRowOne = mock(GridRow.class); final GridRow gridRowTwo = mock(GridRow.class); final GridRow gridRowThree = mock(GridRow.class); doReturn(gridRowOne).when(gridData).getRow(0); doReturn(gridRowTwo).when(gridData).getRow(1); doReturn(gridRowThree).when(gridData).getRow(2); doReturn(false).when(gridRowOne).isCollapsed(); doReturn(true).when(gridRowTwo).isCollapsed(); doReturn(true).when(gridRowThree).isCollapsed(); doReturn(Collections.singletonMap(0, cellOne)).when(gridRowOne).getCells(); doReturn(Collections.singletonMap(0, cellTwo)).when(gridRowTwo).getCells(); doReturn(Collections.singletonMap(0, cellThree)).when(gridRowThree).getCells(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedRowMultiValue(gridData, gridColumn, cellThree, 2)).isFalse(); }
@Test public void testIsCollapsedCellMixedValueThreeDifferentValues() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("three", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_1() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueThreeDifferentValues() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("three", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testIsCollapsedCellMixedValueOneDifferentValue_1() throws Exception { final GridCell<String> cellOne = gridCellWithMockedMergedCellCount("one", 3); final GridCell<String> cellTwo = gridCellWithMockedMergedCellCount("two", 0); final GridCell<String> cellThree = gridCellWithMockedMergedCellCount("one", 0); doReturn(3).when(gridData).getRowCount(); doReturn(cellOne).when(gridData).getCell(0, 0); doReturn(cellTwo).when(gridData).getCell(1, 0); doReturn(cellThree).when(gridData).getCell(2, 0); doReturn(true).when(gridRow).isCollapsed(); Assertions.assertThat(ColumnRenderingStrategyMerged.isCollapsedCellMixedValue(gridData, 2, 0)).isTrue(); }
@Test public void testInitialSetup() { constructGridData(2, 3); for (int rowIndex = 0; rowIndex < gridData.getRowCount(); rowIndex++) { for (int columnIndex = 0; columnIndex < gridData.getColumnCount(); columnIndex++) { gridData.setCellValue(rowIndex, columnIndex, new BaseGridCellValue<String>("(" + columnIndex + ", " + rowIndex + ")")); } } for (int rowIndex = 0; rowIndex < gridData.getRowCount(); rowIndex++) { final GridRow row = gridData.getRow(rowIndex); assertFalse(row.isMerged()); assertFalse(row.isCollapsed()); for (int columnIndex = 0; columnIndex < gridData.getColumnCount(); columnIndex++) { final GridCell<?> cell = gridData.getCell(rowIndex, columnIndex); assertFalse(cell.isMerged()); } } assertEquals(3, gridData.getRowCount()); }