/*
* Copyright 2017 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.Arrays;
import java.util.List;
import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.models.guided.dtable.shared.model.MetadataCol52;
import org.drools.workbench.screens.guided.dtable.client.widget.table.model.GuidedDecisionTableUiCell;
import org.drools.workbench.screens.guided.rule.client.editor.RuleAttributeWidget;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class SystemControlledColumnValuesSynchronizerTest extends BaseSynchronizerTest {
private MetadataCol52 resolvedHitMetadata;
private AttributeCol52 salienceAttribute;
private int rowsCount;
@Before
public void setUp() throws Exception {
salienceAttribute = new AttributeCol52();
salienceAttribute.setAttribute(RuleAttributeWidget.SALIENCE_ATTR);
resolvedHitMetadata = new MetadataCol52();
resolvedHitMetadata.setMetadata(GuidedDecisionTable52.HitPolicy.RESOLVED_HIT_METADATA_NAME);
model.setHitPolicy(GuidedDecisionTable52.HitPolicy.RESOLVED_HIT);
modelSynchronizer.appendColumn(salienceAttribute);
modelSynchronizer.appendColumn(resolvedHitMetadata);
rowsCount = 0;
}
@Test
public void testPrioritiesOverSameRowMoveUp() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("2");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(1)));
assertPriorities(Arrays.asList("",
"",
"1",
"1"));
}
@Test
public void testPrioritiesOverSameRowMoveDown() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("1");
addRowWithPriorityOver("");
uiModel.moveRowsTo(3,
Arrays.asList(uiModel.getRow(0)));
assertPriorities(Arrays.asList("",
"",
"",
""));
}
@Test
public void testTransitivePrioritiesMoveUp() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
addRowWithPriorityOver("");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(4)));
assertPriorities(Arrays.asList("",
"",
"2",
"3",
"4"));
}
@Test
public void testTransitivePrioritiesMoveDown() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
addRowWithPriorityOver("");
uiModel.moveRowsTo(4,
Arrays.asList(uiModel.getRow(0)));
assertPriorities(Arrays.asList("",
"",
"",
"",
""));
}
@Test
public void testTransitivePrioritiesMoveFirstUp() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(1)));
assertPriorities(Arrays.asList("",
"",
"1",
"3"));
}
@Test
public void testTransitivePrioritiesMoveFirstDown() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
uiModel.moveRowsTo(2,
Arrays.asList(uiModel.getRow(1)));
assertPriorities(Arrays.asList("",
"",
"",
"2"));
}
@Test
public void testTransitivePrioritiesMoveMiddleUp() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(2)));
assertPriorities(Arrays.asList("",
"",
"",
"1"));
}
@Test
public void testTransitivePrioritiesMoveMiddleDown() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
uiModel.moveRowsTo(2,
Arrays.asList(uiModel.getRow(1)));
assertPriorities(Arrays.asList("",
"",
"1",
"3"));
}
@Test
public void testTransitivePrioritiesMoveLastUp() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(3)));
assertPriorities(Arrays.asList("",
"",
"",
"3"));
}
@Test
public void testTransitivePrioritiesMoveLastDown() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("");
uiModel.moveRowsTo(3,
Arrays.asList(uiModel.getRow(2)));
assertPriorities(Arrays.asList("",
"1",
"",
"2"));
}
@Test
public void testDeletionOfRow() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("4");
modelSynchronizer.deleteRow(2);
assertPriorities(Arrays.asList("",
"1",
"2",
"3"));
}
@Test
public void testDeletionOfExplicitlyUsedRow() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("4");
modelSynchronizer.deleteRow(0);
assertPriorities(Arrays.asList("0",
"0",
"1",
"3"));
}
@Test
public void testInsertionAtBeginning() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("4");
modelSynchronizer.insertRow(0);
uiModel.setCell(0,
2,
new GuidedDecisionTableUiCell<>(""));
assertPriorities(Arrays.asList("",
"",
"2",
"2",
"3",
"5"));
}
@Test
public void testInsertionIntoMiddle() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("4");
modelSynchronizer.insertRow(3);
uiModel.setCell(3,
2,
new GuidedDecisionTableUiCell<>(""));
assertPriorities(Arrays.asList("",
"1",
"1",
"",
"2",
"5"));
}
@Test
public void testInsertionOnPlaceOfUsedRows() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("4");
modelSynchronizer.insertRow(4);
uiModel.setCell(4,
2,
new GuidedDecisionTableUiCell<>(""));
assertPriorities(Arrays.asList("",
"1",
"1",
"2",
"",
"5"));
}
@Test
public void testMoveIntoGroup() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("3");
uiModel.moveRowsTo(2,
Arrays.asList(uiModel.getRow(0)));
assertPriorities(Arrays.asList("",
"",
"",
"2"));
}
@Test
public void testMoveRowWithPriority() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("");
addRowWithPriorityOver("2");
addRowWithPriorityOver("2");
uiModel.moveRowsTo(0,
Arrays.asList(uiModel.getRow(2)));
assertPriorities(Arrays.asList("",
"",
"",
"3"));
}
@Test
public void testMoveMultipleRows() throws Exception {
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("2");
addRowWithPriorityOver("");
addRowWithPriorityOver("1");
addRowWithPriorityOver("5");
uiModel.moveRowsTo(3,
Arrays.asList(uiModel.getRow(0)));
assertPriorities(Arrays.asList("",
"",
"",
"",
"4",
"5"));
uiModel.moveRowsTo(2,
Arrays.asList(uiModel.getRow(3)));
assertPriorities(Arrays.asList("",
"",
"",
"",
"3",
"5"));
uiModel.moveRowsTo(1,
Arrays.asList(uiModel.getRow(4)));
assertPriorities(Arrays.asList("",
"",
"",
"",
"",
"2"));
}
private void addRowWithPriorityOver(String priorityOverRow) throws Exception {
modelSynchronizer.appendRow();
uiModel.setCell(rowsCount,
0,
new GuidedDecisionTableUiCell<>(rowsCount + 1));
uiModel.setCell(rowsCount,
2,
new GuidedDecisionTableUiCell<>(priorityOverRow));
rowsCount++;
}
private void assertPriorities(List<String> priorities) {
for (int rowIndex = 0; rowIndex < priorities.size(); rowIndex++) {
assertEquals(priorities.get(rowIndex),
uiModel.getCell(rowIndex,
2).getValue().getValue());
}
}
}