/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.impl; import java.util.ArrayList; import java.util.List; import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumnFieldDiff; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.BaseSingletonDOMElementUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.BooleanUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.IntegerUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.SalienceUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.StringUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer; import org.drools.workbench.screens.guided.rule.client.editor.RuleAttributeWidget; import org.junit.Test; import org.uberfire.ext.wires.core.grids.client.model.GridColumn; import org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridCellValue; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class AttributeColumnSynchronizerTest extends BaseSynchronizerTest { @Test public void testAppend() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = new AttributeCol52(); column.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); modelSynchronizer.appendColumn(column); assertEquals(1, model.getAttributeCols().size()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, model.getAttributeCols().get(0).getAttribute()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof IntegerUiColumn); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); assertEquals(true, ((BaseSingletonDOMElementUiColumn) uiModel.getColumns().get(2)).isEditable()); } @Test public void testUpdate1() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = spy(new AttributeCol52()); column.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); modelSynchronizer.appendColumn(column); final AttributeCol52 edited = new AttributeCol52(); edited.setWidth(column.getWidth()); edited.setAttribute(RuleAttributeWidget.ENABLED_ATTR); List<BaseColumnFieldDiff> diffs = modelSynchronizer.updateColumn(column, edited); assertEquals(1, diffs.size()); verify(column).diff(edited); assertEquals(1, model.getAttributeCols().size()); assertEquals(RuleAttributeWidget.ENABLED_ATTR, model.getAttributeCols().get(0).getAttribute()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof BooleanUiColumn); assertEquals(RuleAttributeWidget.ENABLED_ATTR, uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); } @Test public void testUpdate2() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = spy(new AttributeCol52()); column.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); modelSynchronizer.appendColumn(column); final AttributeCol52 edited = new AttributeCol52(); edited.setWidth(column.getWidth()); edited.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); edited.setHideColumn(true); List<BaseColumnFieldDiff> diffs = modelSynchronizer.updateColumn(column, edited); assertEquals(1, diffs.size()); verify(column).diff(edited); assertEquals(1, model.getAttributeCols().size()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, model.getAttributeCols().get(0).getAttribute()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof IntegerUiColumn); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); assertEquals(false, uiModel.getColumns().get(2).isVisible()); } @Test public void testUpdateSalienceRowNumber() throws ModelSynchronizer.MoveColumnVetoException { modelSynchronizer.appendRow(); modelSynchronizer.appendRow(); final AttributeCol52 column = new AttributeCol52(); column.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); modelSynchronizer.appendColumn(column); final AttributeCol52 edited1 = new AttributeCol52(); edited1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); edited1.setUseRowNumber(true); modelSynchronizer.updateColumn(column, edited1); assertEquals(1, model.getAttributeCols().size()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, model.getAttributeCols().get(0).getAttribute()); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals(2, model.getData().get(1).get(2).getNumericValue()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof SalienceUiColumn); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); assertEquals(true, ((SalienceUiColumn) uiModel.getColumns().get(2)).isUseRowNumber()); assertEquals(1, uiModel.getRow(0).getCells().get(2).getValue().getValue()); assertEquals(2, uiModel.getRow(1).getCells().get(2).getValue().getValue()); final AttributeCol52 edited2 = new AttributeCol52(); edited2.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); edited2.setUseRowNumber(true); edited2.setReverseOrder(true); modelSynchronizer.updateColumn(column, edited2); assertEquals(1, model.getAttributeCols().size()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, model.getAttributeCols().get(0).getAttribute()); assertEquals(2, model.getData().get(0).get(2).getNumericValue()); assertEquals(1, model.getData().get(1).get(2).getNumericValue()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof SalienceUiColumn); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); assertEquals(true, ((SalienceUiColumn) uiModel.getColumns().get(2)).isUseRowNumber()); assertEquals(2, uiModel.getRow(0).getCells().get(2).getValue().getValue()); assertEquals(1, uiModel.getRow(1).getCells().get(2).getValue().getValue()); } @Test public void testDelete() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column = new AttributeCol52(); column.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); modelSynchronizer.appendColumn(column); assertEquals(1, model.getAttributeCols().size()); assertEquals(3, uiModel.getColumns().size()); modelSynchronizer.deleteColumn(column); assertEquals(0, model.getAttributeCols().size()); assertEquals(2, uiModel.getColumns().size()); } @Test public void testMoveColumnTo_MoveLeft() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column1 = new AttributeCol52(); column1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); final AttributeCol52 column2 = new AttributeCol52(); column2.setAttribute(RuleAttributeWidget.AGENDA_GROUP_ATTR); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 2, new BaseGridCellValue<Integer>(1)); uiModel.setCell(0, 3, new BaseGridCellValue<String>("smurf")); assertEquals(2, model.getAttributeCols().size()); assertEquals(column1, model.getAttributeCols().get(0)); assertEquals(column2, model.getAttributeCols().get(1)); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals("smurf", model.getData().get(0).get(3).getStringValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof IntegerUiColumn); assertTrue(uiModelColumn2_1 instanceof StringUiColumn); assertEquals(2, uiModelColumn1_1.getIndex()); assertEquals(3, uiModelColumn2_1.getIndex()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(2, uiModelColumn2_1); assertEquals(2, model.getAttributeCols().size()); assertEquals(column2, model.getAttributeCols().get(0)); assertEquals(column1, model.getAttributeCols().get(1)); assertEquals("smurf", model.getData().get(0).get(2).getStringValue()); assertEquals(1, model.getData().get(0).get(3).getNumericValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof StringUiColumn); assertTrue(uiModelColumn2_2 instanceof IntegerUiColumn); assertEquals(3, uiModelColumn1_2.getIndex()); assertEquals(2, uiModelColumn2_2.getIndex()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } @Test public void testMoveColumnTo_MoveRight() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column1 = new AttributeCol52(); column1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); final AttributeCol52 column2 = new AttributeCol52(); column2.setAttribute(RuleAttributeWidget.AGENDA_GROUP_ATTR); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 2, new BaseGridCellValue<Integer>(1)); uiModel.setCell(0, 3, new BaseGridCellValue<String>("smurf")); assertEquals(2, model.getAttributeCols().size()); assertEquals(column1, model.getAttributeCols().get(0)); assertEquals(column2, model.getAttributeCols().get(1)); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals("smurf", model.getData().get(0).get(3).getStringValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof IntegerUiColumn); assertTrue(uiModelColumn2_1 instanceof StringUiColumn); assertEquals(2, uiModelColumn1_1.getIndex()); assertEquals(3, uiModelColumn2_1.getIndex()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(3, uiModelColumn1_1); assertEquals(2, model.getAttributeCols().size()); assertEquals(column2, model.getAttributeCols().get(0)); assertEquals(column1, model.getAttributeCols().get(1)); assertEquals("smurf", model.getData().get(0).get(2).getStringValue()); assertEquals(1, model.getData().get(0).get(3).getNumericValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof StringUiColumn); assertTrue(uiModelColumn2_2 instanceof IntegerUiColumn); assertEquals(3, uiModelColumn1_2.getIndex()); assertEquals(2, uiModelColumn2_2.getIndex()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } @Test public void testMoveColumnTo_OutOfBounds() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column1 = new AttributeCol52(); column1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); final AttributeCol52 column2 = new AttributeCol52(); column2.setAttribute(RuleAttributeWidget.AGENDA_GROUP_ATTR); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 2, new BaseGridCellValue<Integer>(1)); uiModel.setCell(0, 3, new BaseGridCellValue<String>("smurf")); assertEquals(2, model.getAttributeCols().size()); assertEquals(column1, model.getAttributeCols().get(0)); assertEquals(column2, model.getAttributeCols().get(1)); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals("smurf", model.getData().get(0).get(3).getStringValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof IntegerUiColumn); assertTrue(uiModelColumn2_1 instanceof StringUiColumn); assertEquals(2, uiModelColumn1_1.getIndex()); assertEquals(3, uiModelColumn2_1.getIndex()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(0, uiModelColumn1_1); assertEquals(2, model.getAttributeCols().size()); assertEquals(column1, model.getAttributeCols().get(0)); assertEquals(column2, model.getAttributeCols().get(1)); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals("smurf", model.getData().get(0).get(3).getStringValue()); assertEquals(4, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(3); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof IntegerUiColumn); assertTrue(uiModelColumn2_2 instanceof StringUiColumn); assertEquals(2, uiModelColumn1_2.getIndex()); assertEquals(3, uiModelColumn2_2.getIndex()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } @Test public void testMoveColumnsTo_MoveLeft() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column1 = new AttributeCol52(); column1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); final AttributeCol52 column2 = new AttributeCol52(); column2.setAttribute(RuleAttributeWidget.AGENDA_GROUP_ATTR); final AttributeCol52 column3 = new AttributeCol52(); column3.setAttribute(RuleAttributeWidget.AUTO_FOCUS_ATTR); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendColumn(column3); modelSynchronizer.appendRow(); uiModel.setCell(0, 2, new BaseGridCellValue<Integer>(1)); uiModel.setCell(0, 3, new BaseGridCellValue<String>("smurf")); uiModel.setCell(0, 4, new BaseGridCellValue<Boolean>(true)); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn3_1 = uiModel.getColumns().get(4); assertTestMoveColumnsTo(column1, column2, column3, uiModelColumn1_1, uiModelColumn2_1, uiModelColumn3_1); //Moving multiple Attribute columns as an unsupported operation as it's impossible via the UI uiModel.moveColumnsTo(2, new ArrayList<GridColumn<?>>() {{ add(uiModelColumn2_1); add(uiModelColumn3_1); }}); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn3_2 = uiModel.getColumns().get(4); assertTestMoveColumnsTo(column1, column2, column3, uiModelColumn1_2, uiModelColumn2_2, uiModelColumn3_2); } @Test public void testMoveColumnsTo_MoveRight() throws ModelSynchronizer.MoveColumnVetoException { final AttributeCol52 column1 = new AttributeCol52(); column1.setAttribute(RuleAttributeWidget.SALIENCE_ATTR); final AttributeCol52 column2 = new AttributeCol52(); column2.setAttribute(RuleAttributeWidget.AGENDA_GROUP_ATTR); final AttributeCol52 column3 = new AttributeCol52(); column3.setAttribute(RuleAttributeWidget.AUTO_FOCUS_ATTR); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendColumn(column3); modelSynchronizer.appendRow(); uiModel.setCell(0, 2, new BaseGridCellValue<Integer>(1)); uiModel.setCell(0, 3, new BaseGridCellValue<String>("smurf")); uiModel.setCell(0, 4, new BaseGridCellValue<Boolean>(true)); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn3_1 = uiModel.getColumns().get(4); assertTestMoveColumnsTo(column1, column2, column3, uiModelColumn1_1, uiModelColumn2_1, uiModelColumn3_1); uiModel.moveColumnsTo(4, new ArrayList<GridColumn<?>>() {{ add(uiModelColumn1_1); add(uiModelColumn2_1); }}); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(2); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn3_2 = uiModel.getColumns().get(4); assertTestMoveColumnsTo(column1, column2, column3, uiModelColumn1_2, uiModelColumn2_2, uiModelColumn3_2); } private void assertTestMoveColumnsTo(final AttributeCol52 column1, final AttributeCol52 column2, final AttributeCol52 column3, final GridColumn<?> uiModelColumn1, final GridColumn<?> uiModelColumn2, final GridColumn<?> uiModelColumn3) { assertEquals(3, model.getAttributeCols().size()); assertEquals(column1, model.getAttributeCols().get(0)); assertEquals(column2, model.getAttributeCols().get(1)); assertEquals(column3, model.getAttributeCols().get(2)); assertEquals(1, model.getData().get(0).get(2).getNumericValue()); assertEquals("smurf", model.getData().get(0).get(3).getStringValue()); assertEquals(true, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); assertEquals(RuleAttributeWidget.SALIENCE_ATTR, uiModelColumn1.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AGENDA_GROUP_ATTR, uiModelColumn2.getHeaderMetaData().get(0).getTitle()); assertEquals(RuleAttributeWidget.AUTO_FOCUS_ATTR, uiModelColumn3.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1 instanceof IntegerUiColumn); assertTrue(uiModelColumn2 instanceof StringUiColumn); assertTrue(uiModelColumn3 instanceof BooleanUiColumn); assertEquals(2, uiModelColumn1.getIndex()); assertEquals(3, uiModelColumn2.getIndex()); assertEquals(4, uiModelColumn3.getIndex()); assertEquals(1, uiModel.getRow(0).getCells().get(uiModelColumn1.getIndex()).getValue().getValue()); assertEquals("smurf", uiModel.getRow(0).getCells().get(uiModelColumn2.getIndex()).getValue().getValue()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn3.getIndex()).getValue().getValue()); } }