/* * 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.dtablexls.backend.server.conversion; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.drools.decisiontable.parser.xls.ExcelParser; import org.drools.template.model.Global; import org.drools.template.model.Import; import org.drools.template.parser.DataListener; import org.drools.workbench.models.datamodel.oracle.DataType; import org.drools.workbench.models.datamodel.oracle.FieldAccessorsAndMutators; import org.drools.workbench.models.datamodel.oracle.ModelField; import org.drools.workbench.models.datamodel.oracle.PackageDataModelOracle; import org.drools.workbench.models.datamodel.rule.ActionFieldValue; import org.drools.workbench.models.datamodel.rule.ActionInsertFact; import org.drools.workbench.models.datamodel.rule.ActionRetractFact; import org.drools.workbench.models.datamodel.rule.ActionSetField; import org.drools.workbench.models.datamodel.rule.CompositeFactPattern; import org.drools.workbench.models.datamodel.rule.FactPattern; import org.drools.workbench.models.datamodel.rule.FieldNatureType; import org.drools.workbench.models.datamodel.rule.FreeFormLine; import org.drools.workbench.models.datamodel.rule.IAction; import org.drools.workbench.models.datamodel.rule.IPattern; import org.drools.workbench.models.datamodel.rule.SingleFieldConstraint; import org.drools.workbench.models.guided.dtable.shared.conversion.ConversionMessageType; import org.drools.workbench.models.guided.dtable.shared.conversion.ConversionResult; import org.drools.workbench.models.guided.dtable.shared.model.AttributeCol52; import org.drools.workbench.models.guided.dtable.shared.model.BRLActionColumn; import org.drools.workbench.models.guided.dtable.shared.model.BRLActionVariableColumn; import org.drools.workbench.models.guided.dtable.shared.model.BRLConditionColumn; import org.drools.workbench.models.guided.dtable.shared.model.BRLConditionVariableColumn; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumn; import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52; import org.drools.workbench.models.guided.dtable.shared.model.DescriptionCol52; import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52; import org.drools.workbench.models.guided.dtable.shared.model.MetadataCol52; import org.drools.workbench.models.guided.dtable.shared.model.RowNumberCol52; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.services.shared.preferences.ApplicationPreferences; import org.mockito.runners.MockitoJUnitRunner; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * Tests for the conversion of XLS Decision Tables to Guided Decision Tables */ @RunWith(MockitoJUnitRunner.class) public class GuidedDecisionTableGeneratorListenerTest { private PackageDataModelOracle dmo; private Map<String, ModelField[]> packageModelFields = new HashMap<String, ModelField[]>(); @BeforeClass public static void setup() { setupPreferences(); setupSystemProperties(); } private static void setupPreferences() { final Map<String, String> preferences = new HashMap<String, String>() {{ put(ApplicationPreferences.DATE_FORMAT, "dd/mm/yyyy"); }}; ApplicationPreferences.setUp(preferences); } private static void setupSystemProperties() { System.setProperty("org.uberfire.nio.git.daemon.enabled", "false"); System.setProperty("org.uberfire.nio.git.ssh.enabled", "false"); System.setProperty("org.uberfire.sys.repo.monitor.disabled", "true"); } @Before public void setupMocks() throws Exception { dmo = mock(PackageDataModelOracle.class); when(dmo.getPackageName()).thenReturn("org.test"); when(dmo.getProjectModelFields()).thenReturn(packageModelFields); } @After public void cleanUp() throws Exception { packageModelFields.clear(); } @Test public void testAttributes() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("Attributes.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("AttributesTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(12, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof AttributeCol52); assertTrue(columns.get(3) instanceof AttributeCol52); assertTrue(columns.get(4) instanceof AttributeCol52); assertTrue(columns.get(5) instanceof AttributeCol52); assertTrue(columns.get(6) instanceof AttributeCol52); assertTrue(columns.get(7) instanceof AttributeCol52); assertTrue(columns.get(8) instanceof AttributeCol52); assertTrue(columns.get(9) instanceof AttributeCol52); assertTrue(columns.get(10) instanceof AttributeCol52); assertTrue(columns.get(11) instanceof AttributeCol52); //Check individual attributes AttributeCol52 attrCol2 = ((AttributeCol52) columns.get(2)); assertEquals(GuidedDecisionTable52.SALIENCE_ATTR, attrCol2.getAttribute()); assertFalse(attrCol2.isUseRowNumber()); assertFalse(attrCol2.isReverseOrder()); AttributeCol52 attrCol3 = ((AttributeCol52) columns.get(3)); assertEquals(GuidedDecisionTable52.ACTIVATION_GROUP_ATTR, attrCol3.getAttribute()); AttributeCol52 attrCol4 = ((AttributeCol52) columns.get(4)); assertEquals(GuidedDecisionTable52.DURATION_ATTR, attrCol4.getAttribute()); AttributeCol52 attrCol5 = ((AttributeCol52) columns.get(5)); assertEquals(GuidedDecisionTable52.TIMER_ATTR, attrCol5.getAttribute()); AttributeCol52 attrCol6 = ((AttributeCol52) columns.get(6)); assertEquals(GuidedDecisionTable52.CALENDARS_ATTR, attrCol6.getAttribute()); AttributeCol52 attrCol7 = ((AttributeCol52) columns.get(7)); assertEquals(GuidedDecisionTable52.NO_LOOP_ATTR, attrCol7.getAttribute()); AttributeCol52 attrCol8 = ((AttributeCol52) columns.get(8)); assertEquals(GuidedDecisionTable52.LOCK_ON_ACTIVE_ATTR, attrCol8.getAttribute()); AttributeCol52 attrCol9 = ((AttributeCol52) columns.get(9)); assertEquals(GuidedDecisionTable52.AUTO_FOCUS_ATTR, attrCol9.getAttribute()); AttributeCol52 attrCol10 = ((AttributeCol52) columns.get(10)); assertEquals(GuidedDecisionTable52.AGENDA_GROUP_ATTR, attrCol10.getAttribute()); AttributeCol52 attrCol11 = ((AttributeCol52) columns.get(11)); assertEquals(GuidedDecisionTable52.RULEFLOW_GROUP_ATTR, attrCol11.getAttribute()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Specific rule 1", 1, "g1", 100l, "T1", "CAL1", true, true, true, "AG1", "RFG1"}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Specific rule 2", 2, "g2", 200l, "T2", "CAL2", false, false, false, "AG2", "RFG2"}, dtable.getData().get(1))); } @Test public void testSequentialSalience() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("SequentialSalience.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("SequentialSalienceTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(3, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof AttributeCol52); //Check attribute column AttributeCol52 attrCol2 = ((AttributeCol52) columns.get(2)); assertEquals(GuidedDecisionTable52.SALIENCE_ATTR, attrCol2.getAttribute()); assertTrue(attrCol2.isUseRowNumber()); assertTrue(attrCol2.isReverseOrder()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Rule 1", 2}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Rule 2", 1}, dtable.getData().get(1))); } @Test public void testSalienceWarnings() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("SalienceWarnings.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(2, result.getMessages().size()); assertEquals(ConversionMessageType.WARNING, result.getMessages().get(0).getMessageType()); assertFalse(result.getMessages().get(0).getMessage().indexOf("Priority is not an integer literal, in cell C7") == -1); assertEquals(ConversionMessageType.WARNING, result.getMessages().get(1).getMessageType()); assertFalse(result.getMessages().get(1).getMessage().indexOf("Priority is not an integer literal, in cell C8") == -1); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("SalienceWarningsTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(3, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof AttributeCol52); //Check attribute column AttributeCol52 attrCol2 = ((AttributeCol52) columns.get(2)); assertEquals(GuidedDecisionTable52.SALIENCE_ATTR, attrCol2.getAttribute()); assertFalse(attrCol2.isUseRowNumber()); assertFalse(attrCol2.isReverseOrder()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Rule 1", 0}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Rule 2", 0}, dtable.getData().get(1))); } @Test public void testDurationWarnings() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("DurationWarnings.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(2, result.getMessages().size()); assertEquals(ConversionMessageType.WARNING, result.getMessages().get(0).getMessageType()); assertFalse(result.getMessages().get(0).getMessage().indexOf("Duration is not an long literal, in cell C7") == -1); assertEquals(ConversionMessageType.WARNING, result.getMessages().get(1).getMessageType()); assertFalse(result.getMessages().get(1).getMessage().indexOf("Duration is not an long literal, in cell C8") == -1); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("DurationWarningsTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(3, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof AttributeCol52); //Check attribute column AttributeCol52 attrCol2 = ((AttributeCol52) columns.get(2)); assertEquals(GuidedDecisionTable52.DURATION_ATTR, attrCol2.getAttribute()); assertFalse(attrCol2.isUseRowNumber()); assertFalse(attrCol2.isReverseOrder()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Rule 1", 0}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Rule 2", 0}, dtable.getData().get(1))); } @Test public void testMetadata() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("Metadata.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("MetadataTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(3, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof MetadataCol52); //Check metadata column MetadataCol52 mdCol2 = ((MetadataCol52) columns.get(2)); assertEquals("cheese", mdCol2.getMetadata()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Rule 1", "cheddar"}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Rule 2", "edam"}, dtable.getData().get(1))); } @Test //https://bugzilla.redhat.com/show_bug.cgi?id=1310208 public void testGlobalsConversion() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("BZ1310208.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<Global> globals = listener.getGlobals(); assertNotNull(globals); assertEquals(1, globals.size()); final Global global = globals.get(0); assertEquals("list", global.getIdentifier()); assertEquals("List", global.getClassName()); } @Test public void testActions() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("Actions.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("ActionsTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(7, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLActionVariableColumn); assertTrue(columns.get(3) instanceof BRLActionVariableColumn); assertTrue(columns.get(4) instanceof BRLActionVariableColumn); assertTrue(columns.get(5) instanceof BRLActionVariableColumn); assertTrue(columns.get(6) instanceof BRLActionVariableColumn); //Check individual action columns assertEquals(4, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); assertTrue(dtable.getActionCols().get(1) instanceof BRLActionColumn); assertTrue(dtable.getActionCols().get(2) instanceof BRLActionColumn); assertTrue(dtable.getActionCols().get(3) instanceof BRLActionColumn); //Column 1 BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Multi-parameters', 'Multi-parameters']", actionCol0.getHeader()); assertEquals(2, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0ffl = (FreeFormLine) actionCol0definition.get(0); assertEquals("policy.setBasePrice(@{param1}, @{param2});", actionCol0ffl.getText()); //Column 1 - Variable 1 BRLActionVariableColumn actionCol0param0 = actionCol0.getChildColumns().get(0); assertEquals("param1", actionCol0param0.getVarName()); assertEquals("Multi-parameters", actionCol0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol0param0.getFieldType()); assertNull(actionCol0param0.getFactType()); assertNull(actionCol0param0.getFactField()); //Column 1 - Variable 2 BRLActionVariableColumn actionCol0param1 = actionCol0.getChildColumns().get(1); assertEquals("param2", actionCol0param1.getVarName()); assertEquals("Multi-parameters", actionCol0param1.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol0param1.getFieldType()); assertNull(actionCol0param1.getFactType()); assertNull(actionCol0param1.getFactField()); //Column 2 BRLActionColumn actionCol1 = ((BRLActionColumn) dtable.getActionCols().get(1)); assertEquals("Converted from ['Single-parameter']", actionCol1.getHeader()); assertEquals(1, actionCol1.getChildColumns().size()); List<IAction> actionCol1definition = actionCol1.getDefinition(); assertEquals(1, actionCol1definition.size()); assertTrue(actionCol1definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol1ffl = (FreeFormLine) actionCol1definition.get(0); assertEquals("policy.setSmurf(@{param3});", actionCol1ffl.getText()); //Column 2 - Variable 1 BRLActionVariableColumn actionCol1param0 = actionCol1.getChildColumns().get(0); assertEquals("param3", actionCol1param0.getVarName()); assertEquals("Single-parameter", actionCol1param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol1param0.getFieldType()); assertNull(actionCol1param0.getFactType()); assertNull(actionCol1param0.getFactField()); //Column 3 BRLActionColumn actionCol2 = ((BRLActionColumn) dtable.getActionCols().get(2)); assertEquals("Converted from ['Log-single-parameter']", actionCol2.getHeader()); assertEquals(1, actionCol2.getChildColumns().size()); List<IAction> actionCol2definition = actionCol2.getDefinition(); assertEquals(1, actionCol2definition.size()); assertTrue(actionCol2definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol2ffl = (FreeFormLine) actionCol2definition.get(0); assertEquals("System.out.println(\"@{param4}\");", actionCol2ffl.getText()); //Column 3 - Variable 1 BRLActionVariableColumn actionCol2param0 = actionCol2.getChildColumns().get(0); assertEquals("param4", actionCol2param0.getVarName()); assertEquals("Log-single-parameter", actionCol2param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol2param0.getFieldType()); assertNull(actionCol2param0.getFactType()); assertNull(actionCol2param0.getFactField()); //Column 4 BRLActionColumn actionCol3 = ((BRLActionColumn) dtable.getActionCols().get(3)); assertEquals("Converted from ['Zero-parameters']", actionCol3.getHeader()); assertEquals(1, actionCol3.getChildColumns().size()); List<IAction> actionCol3definition = actionCol3.getDefinition(); assertEquals(1, actionCol3definition.size()); assertTrue(actionCol3definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol3ffl = (FreeFormLine) actionCol3definition.get(0); assertEquals("System.out.println(\"Woot\");", actionCol3ffl.getText()); //Column 3 - Variable 1 BRLActionVariableColumn actionCol3param0 = actionCol3.getChildColumns().get(0); assertEquals("", actionCol3param0.getVarName()); assertEquals("Zero-parameters", actionCol3param0.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, actionCol3param0.getFieldType()); assertNull(actionCol3param0.getFactType()); assertNull(actionCol3param0.getFactField()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Row 1", "10", "20", "30", "hello", true}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Row 2", "50", "60", "70", "goodbye", false}, dtable.getData().get(1))); } @Test public void testConditions() { final List<Object[]> expectedRows = new ArrayList<Object[]>(2); expectedRows.add(new Object[]{1, "Row 1", 20, "Mike", "Brown", "BMW", "M3"}); expectedRows.add(new Object[]{2, "Row 2", 30, "Jason", "Grey", "Audi", "S4"}); conditionsTest("Conditions.xls", expectedRows); } @Test public void testConditionsIndexedParameters() { final List<Object[]> expectedRows = new ArrayList<Object[]>(2); expectedRows.add(new Object[]{1, "Row 1", 20, "Mike", "Brown", "BMW", "M3"}); expectedRows.add(new Object[]{2, "Row 2", 30, "Jason", "Grey", "", ""}); conditionsTest("Conditions-indexedParameters.xls", expectedRows); } private void conditionsTest(final String xlsFileName, final List<Object[]> expectedRows) { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); addModelField("org.test.Driver", "this", "org.test.Driver", DataType.TYPE_THIS); addModelField("org.test.Driver", "age", Integer.class.getName(), DataType.TYPE_NUMERIC_INTEGER); addModelField("org.test.Driver", "firstName", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Driver", "surname", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "this", "org.test.Vehicle", DataType.TYPE_THIS); addModelField("org.test.Vehicle", "make", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "model", String.class.getName(), DataType.TYPE_STRING); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream(xlsFileName); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("ConditionsTest", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(7, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLConditionVariableColumn); assertTrue(columns.get(6) instanceof BRLConditionVariableColumn); //Check individual condition columns assertEquals(2, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); assertTrue(dtable.getConditions().get(1) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Age of driver', 'First name', 'Surname']", conditionCol0.getHeader()); assertEquals(3, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Driver", conditionCol0fp.getFactType()); assertEquals(3, conditionCol0fp.getNumberOfConstraints()); assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("age", conditionCol0fpsfc0.getFieldName()); assertEquals(">", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc0.getFieldType()); assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("firstName", conditionCol0fpsfc1.getFieldName()); assertEquals("==", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc1.getFieldType()); assertTrue(conditionCol0fp.getConstraint(2) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc2 = (SingleFieldConstraint) conditionCol0fp.getConstraint(2); assertEquals("surname", conditionCol0fpsfc2.getFieldName()); assertEquals("==", conditionCol0fpsfc2.getOperator()); assertEquals("param3", conditionCol0fpsfc2.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc2.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc2.getFieldType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Age of driver", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param0.getFieldType()); assertEquals("Driver", conditionCol0param0.getFactType()); assertEquals("age", conditionCol0param0.getFactField()); //Column 1 - Variable 2 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("First name", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param1.getFieldType()); assertEquals("Driver", conditionCol0param1.getFactType()); assertEquals("firstName", conditionCol0param1.getFactField()); //Column 1 - Variable 3 BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get(2); assertEquals("param3", conditionCol0param2.getVarName()); assertEquals("Surname", conditionCol0param2.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param2.getFieldType()); assertEquals("Driver", conditionCol0param2.getFactType()); assertEquals("surname", conditionCol0param2.getFactField()); //Column 2 BRLConditionColumn conditionCol1 = ((BRLConditionColumn) dtable.getConditions().get(1)); assertEquals("Converted from ['something', 'something']", conditionCol1.getHeader()); assertEquals(2, conditionCol1.getChildColumns().size()); List<IPattern> conditionCol1definition = conditionCol1.getDefinition(); assertEquals(1, conditionCol1definition.size()); assertTrue(conditionCol1definition.get(0) instanceof FactPattern); FactPattern conditionCol1fp = (FactPattern) conditionCol1definition.get(0); assertEquals("Vehicle", conditionCol1fp.getFactType()); assertEquals(2, conditionCol1fp.getNumberOfConstraints()); assertTrue(conditionCol1fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol1fpsfc0 = (SingleFieldConstraint) conditionCol1fp.getConstraint(0); assertEquals("make", conditionCol1fpsfc0.getFieldName()); assertEquals("==", conditionCol1fpsfc0.getOperator()); assertEquals("param4", conditionCol1fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol1fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol1fpsfc0.getFieldType()); assertTrue(conditionCol1fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol1fpsfc1 = (SingleFieldConstraint) conditionCol1fp.getConstraint(1); assertEquals("model", conditionCol1fpsfc1.getFieldName()); assertEquals("==", conditionCol1fpsfc1.getOperator()); assertEquals("param5", conditionCol1fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol1fpsfc1.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol1fpsfc1.getFieldType()); //Column 2 - Variable 1 BRLConditionVariableColumn conditionCol1param0 = conditionCol1.getChildColumns().get(0); assertEquals("param4", conditionCol1param0.getVarName()); assertEquals("something", conditionCol1param0.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol1param0.getFieldType()); assertEquals("Vehicle", conditionCol1param0.getFactType()); assertEquals("make", conditionCol1param0.getFactField()); //Column 2 - Variable 2 BRLConditionVariableColumn conditionCol1param1 = conditionCol1.getChildColumns().get(1); assertEquals("param5", conditionCol1param1.getVarName()); assertEquals("something", conditionCol1param1.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol1param1.getFieldType()); assertEquals("Vehicle", conditionCol1param1.getFactType()); assertEquals("model", conditionCol1param1.getFactField()); //Check data assertEquals(2, dtable.getData().size()); assertNotNull(expectedRows); assertTrue(expectedRows.size() == 2); for (int i = 0; i < 2; i++) { assertTrue(isRowEquivalent(expectedRows.get(i), dtable.getData().get(i))); } } @Test public void testMultipleRuleTables() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("MultipleRuleTables.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(2, dtables.size()); GuidedDecisionTable52 dtable0 = dtables.get(0); assertEquals("Table1", dtable0.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable0.getTableFormat()); GuidedDecisionTable52 dtable1 = dtables.get(1); assertEquals("Table2", dtable1.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable1.getTableFormat()); //Check expanded columns List<BaseColumn> columns0 = dtable0.getExpandedColumns(); assertNotNull(columns0); assertEquals(5, columns0.size()); assertTrue(columns0.get(0) instanceof RowNumberCol52); assertTrue(columns0.get(1) instanceof DescriptionCol52); assertTrue(columns0.get(2) instanceof AttributeCol52); assertTrue(columns0.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns0.get(4) instanceof BRLActionVariableColumn); AttributeCol52 attrCol0_2 = ((AttributeCol52) columns0.get(2)); assertEquals(GuidedDecisionTable52.AGENDA_GROUP_ATTR, attrCol0_2.getAttribute()); //Check individual condition columns assertEquals(1, dtable0.getConditions().size()); assertTrue(dtable0.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0_0 = ((BRLConditionColumn) dtable0.getConditions().get(0)); assertEquals("Converted from ['Person's name']", conditionCol0_0.getHeader()); assertEquals(1, conditionCol0_0.getChildColumns().size()); List<IPattern> conditionCol0_0definition = conditionCol0_0.getDefinition(); assertEquals(1, conditionCol0_0definition.size()); assertTrue(conditionCol0_0definition.get(0) instanceof FactPattern); FactPattern conditionCol0_0fp = (FactPattern) conditionCol0_0definition.get(0); assertEquals("Person", conditionCol0_0fp.getFactType()); assertEquals(1, conditionCol0_0fp.getNumberOfConstraints()); assertTrue(conditionCol0_0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0_0fpsfc0 = (SingleFieldConstraint) conditionCol0_0fp.getConstraint(0); assertEquals("name", conditionCol0_0fpsfc0.getFieldName()); assertEquals("==", conditionCol0_0fpsfc0.getOperator()); assertEquals("param1", conditionCol0_0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0_0fpsfc0.getConstraintValueType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0_0param0 = conditionCol0_0.getChildColumns().get(0); assertEquals("param1", conditionCol0_0param0.getVarName()); assertEquals("Person's name", conditionCol0_0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol0_0param0.getFieldType()); assertEquals("Person", conditionCol0_0param0.getFactType()); assertEquals("name", conditionCol0_0param0.getFactField()); //Column 2 BRLActionColumn actionCol0_0 = ((BRLActionColumn) dtable0.getActionCols().get(0)); assertEquals("Converted from ['Salutation']", actionCol0_0.getHeader()); assertEquals(1, actionCol0_0.getChildColumns().size()); List<IAction> actionCol0_0definition = actionCol0_0.getDefinition(); assertEquals(1, actionCol0_0definition.size()); assertTrue(actionCol0_0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0_0ffl = (FreeFormLine) actionCol0_0definition.get(0); assertEquals("System.out.println(\"@{param2}\");", actionCol0_0ffl.getText()); //Column 1 - Variable 1 BRLActionVariableColumn actionCol0_0param0 = actionCol0_0.getChildColumns().get(0); assertEquals("param2", actionCol0_0param0.getVarName()); assertEquals("Salutation", actionCol0_0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol0_0param0.getFieldType()); assertNull(actionCol0_0param0.getFactType()); assertNull(actionCol0_0param0.getFactField()); //Check data assertEquals(2, dtable0.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Created from row 7", "AG1", "John", "Hello Sir"}, dtable0.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Row 2", "AG2", "Jane", "Hello Madam"}, dtable0.getData().get(1))); //Check expanded columns List<BaseColumn> columns1 = dtable1.getExpandedColumns(); assertNotNull(columns1); assertEquals(4, columns1.size()); assertTrue(columns1.get(0) instanceof RowNumberCol52); assertTrue(columns1.get(1) instanceof DescriptionCol52); assertTrue(columns1.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns1.get(3) instanceof BRLConditionVariableColumn); //Check individual condition columns assertEquals(1, dtable0.getConditions().size()); assertTrue(dtable0.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol1_0 = ((BRLConditionColumn) dtable1.getConditions().get(0)); assertEquals("Converted from ['Person’s name', 'Person’s age']", conditionCol1_0.getHeader()); assertEquals(2, conditionCol1_0.getChildColumns().size()); List<IPattern> conditionCol1_0definition = conditionCol1_0.getDefinition(); assertEquals(1, conditionCol1_0definition.size()); assertTrue(conditionCol1_0definition.get(0) instanceof FactPattern); FactPattern conditionCol1_0fp = (FactPattern) conditionCol1_0definition.get(0); assertEquals("Person", conditionCol1_0fp.getFactType()); assertEquals(2, conditionCol1_0fp.getNumberOfConstraints()); assertTrue(conditionCol1_0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol1_0fpsfc0 = (SingleFieldConstraint) conditionCol1_0fp.getConstraint(0); assertEquals("name", conditionCol1_0fpsfc0.getFieldName()); assertEquals("==", conditionCol1_0fpsfc0.getOperator()); assertEquals("param1", conditionCol1_0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol1_0fpsfc0.getConstraintValueType()); assertTrue(conditionCol1_0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol1_0fpsfc1 = (SingleFieldConstraint) conditionCol1_0fp.getConstraint(1); assertEquals("age", conditionCol1_0fpsfc1.getFieldName()); assertEquals("==", conditionCol1_0fpsfc1.getOperator()); assertEquals("param2", conditionCol1_0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol1_0fpsfc1.getConstraintValueType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol1_0param0 = conditionCol1_0.getChildColumns().get(0); assertEquals("param1", conditionCol1_0param0.getVarName()); assertEquals("Person’s name", conditionCol1_0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol1_0param0.getFieldType()); assertEquals("Person", conditionCol1_0param0.getFactType()); assertEquals("name", conditionCol1_0param0.getFactField()); //Column 1 - Variable 2 BRLConditionVariableColumn conditionCol1_0param1 = conditionCol1_0.getChildColumns().get(1); assertEquals("param2", conditionCol1_0param1.getVarName()); assertEquals("Person’s age", conditionCol1_0param1.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol1_0param1.getFieldType()); assertEquals("Person", conditionCol1_0param1.getFactType()); assertEquals("age", conditionCol1_0param1.getFactField()); //Check data assertEquals(2, dtable1.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Row 1", "John", "25"}, dtable1.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Created from row 16", "Jane", "29"}, dtable1.getData().get(1))); } @Test public void testMultipleSingleParameters() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("MultipleSingleParameters.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("MultipleSingleParameters", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(3, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Re-using single parameter']", conditionCol0.getHeader()); assertEquals(1, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine conditionCol0ffl = (FreeFormLine) conditionCol0definition.get(0); assertEquals("Driver(@{param1} != null, @{param1} == true)", conditionCol0ffl.getText()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Re-using single parameter", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol0param0.getFieldType()); assertNull(conditionCol0param0.getFactType()); assertNull(conditionCol0param0.getFactField()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Row 1", "isQualified"}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Row 2", "isLicensed"}, dtable.getData().get(1))); } @Test public void testProperties() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("Properties.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check properties List<String> functions = listener.getFunctions(); assertNotNull(functions); assertEquals(1, functions.size()); assertEquals("function a() { }", functions.get(0)); List<Global> globals = listener.getGlobals(); assertNotNull(globals); assertEquals(1, globals.size()); assertEquals("java.util.List", globals.get(0).getClassName()); assertEquals("list", globals.get(0).getIdentifier()); List<Import> imports = listener.getImports(); assertNotNull(imports); assertEquals(2, imports.size()); assertEquals("org.yourco.model.*", imports.get(0).getClassName()); assertEquals("java.util.Date", imports.get(1).getClassName()); List<String> queries = listener.getQueries(); assertNotNull(queries); assertEquals(1, queries.size()); assertEquals("A query", queries.get(0)); List<String> types = listener.getTypeDeclarations(); assertNotNull(types); assertEquals(1, types.size()); assertEquals("declare Smurf name : String end", types.get(0)); } @Test //https://issues.jboss.org/browse/GUVNOR-2188 public void testTestNonExistentCellsFromPOI() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("GUVNOR-2188.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); final GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("IdentifyMetadataRules", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(6, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Ingest Path', 'Court Id', 'Artifact Metadata Identified']", conditionCol0.getHeader()); assertEquals(3, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("IdentifyMetadataArtifact", conditionCol0fp.getFactType()); assertEquals(3, conditionCol0fp.getNumberOfConstraints()); assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("ingestPath", conditionCol0fpsfc0.getFieldName()); assertEquals("==", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertNull(conditionCol0fpsfc0.getFieldType()); assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("courtId", conditionCol0fpsfc1.getFieldName()); assertEquals("==", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertNull(conditionCol0fpsfc1.getFieldType()); assertTrue(conditionCol0fp.getConstraint(2) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc2 = (SingleFieldConstraint) conditionCol0fp.getConstraint(2); assertEquals("artifactMetadataIdentified", conditionCol0fpsfc2.getFieldName()); assertEquals("==", conditionCol0fpsfc2.getOperator()); assertEquals("param3", conditionCol0fpsfc2.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc2.getConstraintValueType()); assertNull(conditionCol0fpsfc2.getFieldType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Ingest Path", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol0param0.getFieldType()); assertEquals("IdentifyMetadataArtifact", conditionCol0param0.getFactType()); assertEquals("ingestPath", conditionCol0param0.getFactField()); //Column 1 - Variable 2 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("Court Id", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol0param1.getFieldType()); assertEquals("IdentifyMetadataArtifact", conditionCol0param1.getFactType()); assertEquals("courtId", conditionCol0param1.getFactField()); //Column 1 - Variable 3 BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get(2); assertEquals("param3", conditionCol0param2.getVarName()); assertEquals("Artifact Metadata Identified", conditionCol0param2.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol0param2.getFieldType()); assertEquals("IdentifyMetadataArtifact", conditionCol0param2.getFactType()); assertEquals("artifactMetadataIdentified", conditionCol0param2.getFactField()); //Check individual action columns assertEquals(1, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); //Column 2 BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Identify Metadata Required']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof ActionSetField); ActionSetField actionCol0asf = (ActionSetField) actionCol0definition.get(0); assertEquals("fact1", actionCol0asf.getVariable()); assertEquals(1, actionCol0asf.getFieldValues().length); ActionFieldValue actionCol0asf_afv0 = actionCol0asf.getFieldValues()[0]; assertEquals("identifiedMetadataRequired", actionCol0asf_afv0.getField()); assertEquals("param4", actionCol0asf_afv0.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol0asf_afv0.getNature()); assertEquals(DataType.TYPE_STRING, actionCol0asf_afv0.getType()); } @Test //https://issues.jboss.org/browse/GUVNOR-2030 public void testMissingTemplateKeyValues_StringFields() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("GUVNOR-2030.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("asd", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(6, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Rule disabler', 'CovenanteeId', 'blah']", conditionCol0.getHeader()); assertEquals(3, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Transaction", conditionCol0fp.getFactType()); assertEquals(3, conditionCol0fp.getNumberOfConstraints()); assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("isDisabled(\"asd\")", conditionCol0fpsfc0.getFieldName()); assertEquals("==", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals("java.lang.String", conditionCol0fpsfc0.getFieldType()); assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("getClientCovenanteeId()", conditionCol0fpsfc1.getFieldName()); assertEquals("==", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertEquals("java.lang.String", conditionCol0fpsfc1.getFieldType()); assertTrue(conditionCol0fp.getConstraint(2) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc2 = (SingleFieldConstraint) conditionCol0fp.getConstraint(2); assertEquals("isBlacklisted(\"asd\")", conditionCol0fpsfc2.getFieldName()); assertEquals("==", conditionCol0fpsfc2.getOperator()); assertEquals("param3", conditionCol0fpsfc2.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc2.getConstraintValueType()); assertEquals("java.lang.String", conditionCol0fpsfc2.getFieldType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Rule disabler", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param0.getFieldType()); assertEquals("java.lang.String", conditionCol0param0.getFactType()); assertEquals("isDisabled(\"asd\")", conditionCol0param0.getFactField()); //Column 1 - Variable 2 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("CovenanteeId", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param1.getFieldType()); assertEquals("java.lang.String", conditionCol0param1.getFactType()); assertEquals("getClientCovenanteeId()", conditionCol0param1.getFactField()); //Column 1 - Variable 3 BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get(2); assertEquals("param3", conditionCol0param2.getVarName()); assertEquals("blah", conditionCol0param2.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param2.getFieldType()); assertEquals("java.lang.String", conditionCol0param2.getFactType()); assertEquals("isBlacklisted(\"asd\")", conditionCol0param2.getFactField()); //Check individual action columns assertEquals(1, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); //Column 2 BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Risk level']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0ffl = (FreeFormLine) actionCol0definition.get(0); assertEquals("riskIndex.setRisk(\"asd\", @{param4});", actionCol0ffl.getText()); //Check data assertEquals(1, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "asd", "false", "", "true", "0"}, dtable.getData().get(0))); } @Test public void testRowDescriptions() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("MultipleRuleTables.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(2, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals(2, dtable.getData().size()); assertEquals("Created from row 7", dtable.getData().get(0).get(1).getStringValue()); assertEquals("Row 2", dtable.getData().get(1).get(1).getStringValue()); dtable = dtables.get(1); assertEquals(2, dtable.getData().size()); assertEquals("Row 1", dtable.getData().get(0).get(1).getStringValue()); assertEquals("Created from row 16", dtable.getData().get(1).get(1).getStringValue()); } @Test //https://issues.jboss.org/browse/GUVNOR-2030 public void testMissingTemplateKeyValues_NonStringFields() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); addModelField("org.test.Client", "this", "org.test.Client", DataType.TYPE_THIS); addModelField("org.test.Client", "monthlyTransactions", Integer.class.getName(), DataType.TYPE_NUMERIC_INTEGER); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("GUVNOR-2030 (DecisionTable).xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("Steps", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(5, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['From', 'To']", conditionCol0.getHeader()); assertEquals(2, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Client", conditionCol0fp.getFactType()); assertEquals(2, conditionCol0fp.getNumberOfConstraints()); assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("monthlyTransactions", conditionCol0fpsfc0.getFieldName()); assertEquals(">=", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc0.getFieldType()); assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("monthlyTransactions", conditionCol0fpsfc1.getFieldName()); assertEquals("<=", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc1.getFieldType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("From", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param0.getFieldType()); assertEquals("Client", conditionCol0param0.getFactType()); assertEquals("monthlyTransactions", conditionCol0param0.getFactField()); //Column 1 - Variable 2 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("To", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param1.getFieldType()); assertEquals("Client", conditionCol0param1.getFactType()); assertEquals("monthlyTransactions", conditionCol0param1.getFactField()); //Check individual action columns assertEquals(1, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); //Column 2 BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Step']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0ffl = (FreeFormLine) actionCol0definition.get(0); assertEquals("if (!$c.isPricingStepCustom() && ($c.getPricingStep() == null || $c.getPricingStep().compareTo(\"@{param3}\") < 0)) { modify($c) { setPricingStep(\"@{param3}\"); } };", actionCol0ffl.getText()); //Check data assertEquals(1, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Created from row 12", 0, 100, "A1"}, dtable.getData().get(0))); } @Test //https://issues.jboss.org/browse/GUVNOR-2030 public void testMissingTemplateKeyValues_RHSInsertThenUpdate() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); addModelField("org.test.Transaction", "this", "org.test.Transaction", DataType.TYPE_THIS); addModelField("org.test.Transaction", "enabled", Boolean.class.getName(), DataType.TYPE_BOOLEAN); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("GUVNOR-2030 (RHS insert then update).xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("asd", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(6, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLActionVariableColumn); assertTrue(columns.get(4) instanceof BRLActionVariableColumn); assertTrue(columns.get(5) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); //Column 1 BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Disabled']", conditionCol0.getHeader()); assertEquals(1, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Transaction", conditionCol0fp.getFactType()); assertEquals(1, conditionCol0fp.getNumberOfConstraints()); assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("enabled", conditionCol0fpsfc0.getFieldName()); assertEquals("==", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_BOOLEAN, conditionCol0fpsfc0.getFieldType()); //Column 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Disabled", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, conditionCol0param0.getFieldType()); assertEquals("Transaction", conditionCol0param0.getFactType()); assertEquals("enabled", conditionCol0param0.getFactField()); //Check individual action columns assertEquals(3, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); //Column 2 BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Enable']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof ActionSetField); ActionSetField actionCol0asf0 = (ActionSetField) actionCol0definition.get(0); assertEquals("$t", actionCol0asf0.getVariable()); ActionFieldValue[] actionCol0asf0afvs = actionCol0asf0.getFieldValues(); assertEquals(1, actionCol0asf0afvs.length); ActionFieldValue actionCol0asf0afv0 = actionCol0asf0afvs[0]; assertEquals("enabled", actionCol0asf0afv0.getField()); assertEquals("param2", actionCol0asf0afv0.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol0asf0afv0.getNature()); assertEquals(DataType.TYPE_BOOLEAN, actionCol0asf0afv0.getType()); //Column 3 BRLActionColumn actionCol1 = ((BRLActionColumn) dtable.getActionCols().get(1)); assertEquals("Converted from ['New']", actionCol1.getHeader()); assertEquals(1, actionCol1.getChildColumns().size()); List<IAction> actionCol1definition = actionCol1.getDefinition(); assertEquals(1, actionCol1definition.size()); assertTrue(actionCol1definition.get(0) instanceof ActionInsertFact); ActionInsertFact actionCol1aif0 = (ActionInsertFact) actionCol1definition.get(0); assertEquals("$t2", actionCol1aif0.getBoundName()); assertEquals("Transaction", actionCol1aif0.getFactType()); ActionFieldValue[] actionCol1aif0afvs = actionCol1aif0.getFieldValues(); assertEquals(0, actionCol1aif0afvs.length); //Column 4 BRLActionColumn actionCol2 = ((BRLActionColumn) dtable.getActionCols().get(2)); assertEquals("Converted from ['Disable']", actionCol2.getHeader()); assertEquals(1, actionCol2.getChildColumns().size()); List<IAction> actionCol2definition = actionCol2.getDefinition(); assertEquals(1, actionCol2definition.size()); assertTrue(actionCol2definition.get(0) instanceof ActionSetField); ActionSetField actionCol2asf0 = (ActionSetField) actionCol2definition.get(0); assertEquals("$t2", actionCol2asf0.getVariable()); ActionFieldValue[] actionCol2asf0afvs = actionCol2asf0.getFieldValues(); assertEquals(1, actionCol2asf0afvs.length); ActionFieldValue actionCol2asf0afv0 = actionCol2asf0afvs[0]; assertEquals("enabled", actionCol2asf0afv0.getField()); assertEquals("param3", actionCol2asf0afv0.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol2asf0afv0.getNature()); assertEquals(DataType.TYPE_BOOLEAN, actionCol2asf0afv0.getType()); //Check data assertEquals(1, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "asd", false, true, false, false}, dtable.getData().get(0))); } @Test //https://bugzilla.redhat.com/show_bug.cgi?id=1256623 public void testEmptyCells() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<DataListener>(); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("EmptySpreadsheetCells.xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); final GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("ExceptionPrivateCar", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(20, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof AttributeCol52); assertTrue(columns.get(3) instanceof AttributeCol52); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLConditionVariableColumn); assertTrue(columns.get(6) instanceof BRLConditionVariableColumn); assertTrue(columns.get(7) instanceof BRLConditionVariableColumn); assertTrue(columns.get(8) instanceof BRLConditionVariableColumn); assertTrue(columns.get(9) instanceof BRLConditionVariableColumn); assertTrue(columns.get(10) instanceof BRLConditionVariableColumn); assertTrue(columns.get(11) instanceof BRLConditionVariableColumn); assertTrue(columns.get(12) instanceof BRLConditionVariableColumn); assertTrue(columns.get(13) instanceof BRLConditionVariableColumn); assertTrue(columns.get(14) instanceof BRLConditionVariableColumn); assertTrue(columns.get(15) instanceof BRLConditionVariableColumn); assertTrue(columns.get(16) instanceof BRLConditionVariableColumn); assertTrue(columns.get(17) instanceof BRLConditionVariableColumn); assertTrue(columns.get(18) instanceof BRLConditionVariableColumn); assertTrue(columns.get(19) instanceof BRLActionVariableColumn); } @Test //https://issues.jboss.org/browse/RHBPMS-856 public void correctMergedConditionColumnHeaders() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<>(); addModelField("org.test.Vehicle", "this", "org.test.Vehicle", DataType.TYPE_THIS); addModelField("org.test.Vehicle", "subRTO", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "manufacturer", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "model", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "vehicleSegment", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Vehicle", "vehicleAge", Integer.class.getName(), DataType.TYPE_NUMERIC_INTEGER); addModelField("org.test.Vehicle", "discount", Double.class.getName(), DataType.TYPE_NUMERIC_DOUBLE); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("RHBPMS-856 (Merged condition columns).xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(0, result.getMessages().size()); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("VehiclePremiumDiscount", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(9, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLConditionVariableColumn); assertTrue(columns.get(6) instanceof BRLConditionVariableColumn); assertTrue(columns.get(7) instanceof BRLConditionVariableColumn); assertTrue(columns.get(8) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['RTO', 'Manufacturer', 'Model', 'Segment', 'Age Min', 'Age Max']", conditionCol0.getHeader()); assertEquals(6, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Vehicle", conditionCol0fp.getFactType()); assertEquals(6, conditionCol0fp.getNumberOfConstraints()); //Field Constraint 1 assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("subRTO", conditionCol0fpsfc0.getFieldName()); assertEquals("==", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc0.getFieldType()); //Field Constraint 2 assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("manufacturer", conditionCol0fpsfc1.getFieldName()); assertEquals("==", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc1.getFieldType()); //Field Constraint 3 assertTrue(conditionCol0fp.getConstraint(2) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc2 = (SingleFieldConstraint) conditionCol0fp.getConstraint(2); assertEquals("model", conditionCol0fpsfc2.getFieldName()); assertEquals("==", conditionCol0fpsfc2.getOperator()); assertEquals("param3", conditionCol0fpsfc2.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc2.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc2.getFieldType()); //Field Constraint 4 assertTrue(conditionCol0fp.getConstraint(3) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc3 = (SingleFieldConstraint) conditionCol0fp.getConstraint(3); assertEquals("vehicleSegment", conditionCol0fpsfc3.getFieldName()); assertEquals("==", conditionCol0fpsfc3.getOperator()); assertEquals("param4", conditionCol0fpsfc3.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc3.getConstraintValueType()); assertEquals(DataType.TYPE_STRING, conditionCol0fpsfc3.getFieldType()); //Field Constraint 5 assertTrue(conditionCol0fp.getConstraint(4) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc4 = (SingleFieldConstraint) conditionCol0fp.getConstraint(4); assertEquals("vehicleAge", conditionCol0fpsfc4.getFieldName()); assertEquals("<=", conditionCol0fpsfc4.getOperator()); assertEquals("param5", conditionCol0fpsfc4.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc4.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc4.getFieldType()); //Field Constraint 6 assertTrue(conditionCol0fp.getConstraint(5) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc5 = (SingleFieldConstraint) conditionCol0fp.getConstraint(5); assertEquals("vehicleAge", conditionCol0fpsfc5.getFieldName()); assertEquals(">", conditionCol0fpsfc5.getOperator()); assertEquals("param6", conditionCol0fpsfc5.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc5.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc5.getFieldType()); //Field Constraint 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("RTO", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param0.getFieldType()); assertEquals("Vehicle", conditionCol0param0.getFactType()); assertEquals("subRTO", conditionCol0param0.getFactField()); //Field Constraint 2 - Variable 2 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("Manufacturer", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param1.getFieldType()); assertEquals("Vehicle", conditionCol0param1.getFactType()); assertEquals("manufacturer", conditionCol0param1.getFactField()); //Field Constraint 3 - Variable 3 BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get(2); assertEquals("param3", conditionCol0param2.getVarName()); assertEquals("Model", conditionCol0param2.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param2.getFieldType()); assertEquals("Vehicle", conditionCol0param2.getFactType()); assertEquals("model", conditionCol0param2.getFactField()); //Field Constraint 4 - Variable 4 BRLConditionVariableColumn conditionCol0param3 = conditionCol0.getChildColumns().get(3); assertEquals("param4", conditionCol0param3.getVarName()); assertEquals("Segment", conditionCol0param3.getHeader()); assertEquals(DataType.TYPE_STRING, conditionCol0param3.getFieldType()); assertEquals("Vehicle", conditionCol0param3.getFactType()); assertEquals("vehicleSegment", conditionCol0param3.getFactField()); //Field Constraint 5 - Variable 5 BRLConditionVariableColumn conditionCol0param4 = conditionCol0.getChildColumns().get(4); assertEquals("param5", conditionCol0param4.getVarName()); assertEquals("Age Min", conditionCol0param4.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param4.getFieldType()); assertEquals("Vehicle", conditionCol0param4.getFactType()); assertEquals("vehicleAge", conditionCol0param4.getFactField()); //Field Constraint 6 - Variable 6 BRLConditionVariableColumn conditionCol0param5 = conditionCol0.getChildColumns().get(5); assertEquals("param6", conditionCol0param5.getVarName()); assertEquals("Age Max", conditionCol0param5.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param5.getFieldType()); assertEquals("Vehicle", conditionCol0param5.getFactType()); assertEquals("vehicleAge", conditionCol0param5.getFactField()); //Check individual action columns assertEquals(1, dtable.getActionCols().size()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Discount(%)']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof ActionSetField); ActionSetField actionCol0asf0 = (ActionSetField) actionCol0definition.get(0); assertEquals("v", actionCol0asf0.getVariable()); ActionFieldValue[] actionCol0asf0afvs = actionCol0asf0.getFieldValues(); assertEquals(1, actionCol0asf0afvs.length); ActionFieldValue actionCol0asf0afv0 = actionCol0asf0afvs[0]; assertEquals("discount", actionCol0asf0afv0.getField()); assertEquals("param7", actionCol0asf0afv0.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol0asf0afv0.getNature()); assertEquals(DataType.TYPE_NUMERIC_DOUBLE, actionCol0asf0afv0.getType()); //Action 1 - Variable 1 BRLActionVariableColumn actionCol0param0 = actionCol0.getChildColumns().get(0); assertEquals("param7", actionCol0param0.getVarName()); assertEquals("Discount(%)", actionCol0param0.getHeader()); assertEquals(DataType.TYPE_NUMERIC_DOUBLE, actionCol0param0.getFieldType()); assertEquals("Vehicle", actionCol0param0.getFactType()); assertEquals("discount", actionCol0param0.getFactField()); //Check data assertEquals(4, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "1", "ALL", "XYZ", "EL", "HighEnd", 1, 0, 1.75d}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "2", "ALL", "XYZ", "EL", "HighEnd", 5, 1, 2.00d}, dtable.getData().get(1))); assertTrue(isRowEquivalent(new Object[]{3, "3", "ALL", "XYZ", "EL", "HighEnd", 7, 5, 2.00d}, dtable.getData().get(2))); assertTrue(isRowEquivalent(new Object[]{4, "4", "ALL", "XYZ", "EL", "HighEnd", 10, 7, 1.00d}, dtable.getData().get(3))); } @Test //https://issues.jboss.org/browse/RHBRMS-2055 public void conversionWithEnumerationsInCells() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<>(); addModelField("org.test.Message", "this", "org.test.Message", DataType.TYPE_THIS); addModelField("org.test.Message", "status", Integer.class.getName(), DataType.TYPE_NUMERIC_INTEGER); addModelField("org.test.Message", "message", String.class.getName(), DataType.TYPE_STRING); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("RHBRMS-2055 (Decision table with enums).xls"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(3, result.getMessages().size()); assertTrue(result.getMessages().get(0).getMessage().contains("C11")); assertTrue(result.getMessages().get(1).getMessage().contains("C12")); assertTrue(result.getMessages().get(2).getMessage().contains("F11")); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("HelloWorld1", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(6, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLActionVariableColumn); assertTrue(columns.get(4) instanceof BRLActionVariableColumn); assertTrue(columns.get(5) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(1, dtable.getConditions().size()); assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Status']", conditionCol0.getHeader()); assertEquals(1, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Message", conditionCol0fp.getFactType()); assertEquals(1, conditionCol0fp.getNumberOfConstraints()); //Field Constraint 1 assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("status", conditionCol0fpsfc0.getFieldName()); assertEquals("==", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc0.getFieldType()); //Field Constraint 1 - Variable 1 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Status", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param0.getFieldType()); assertEquals("Message", conditionCol0param0.getFactType()); assertEquals("status", conditionCol0param0.getFactField()); //Check individual action columns assertEquals(2, dtable.getActionCols().size()); //Action 1 assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Print out message?']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0ffl0 = (FreeFormLine) actionCol0definition.get(0); assertEquals("System.out.println(m.getMessage());", actionCol0ffl0.getText()); //Action 2 BRLActionColumn actionCol1 = ((BRLActionColumn) dtable.getActionCols().get(1)); assertEquals("Converted from ['Set message', 'Set status']", actionCol1.getHeader()); assertEquals(2, actionCol1.getChildColumns().size()); List<IAction> actionCol1definition = actionCol1.getDefinition(); assertEquals(1, actionCol1definition.size()); assertTrue(actionCol1definition.get(0) instanceof ActionSetField); ActionSetField actionCol1asf0 = (ActionSetField) actionCol1definition.get(0); assertEquals("m", actionCol1asf0.getVariable()); ActionFieldValue[] actionCol1asf0afvs = actionCol1asf0.getFieldValues(); assertEquals(2, actionCol1asf0afvs.length); ActionFieldValue actionCol1asf0afv0 = actionCol1asf0afvs[0]; assertEquals("message", actionCol1asf0afv0.getField()); assertEquals("param2", actionCol1asf0afv0.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol1asf0afv0.getNature()); assertEquals(DataType.TYPE_STRING, actionCol1asf0afv0.getType()); ActionFieldValue actionCol1asf0afv1 = actionCol1asf0afvs[1]; assertEquals("status", actionCol1asf0afv1.getField()); assertEquals("param3", actionCol1asf0afv1.getValue()); assertEquals(FieldNatureType.TYPE_TEMPLATE, actionCol1asf0afv1.getNature()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, actionCol1asf0afv1.getType()); //Action 1 - Variable 1 BRLActionVariableColumn actionCol0param0 = actionCol0.getChildColumns().get(0); assertEquals("", actionCol0param0.getVarName()); assertEquals("Print out message?", actionCol0param0.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, actionCol0param0.getFieldType()); assertNull(actionCol0param0.getFactType()); assertNull(actionCol0param0.getFactField()); assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); //Action 2 - Variable 1 BRLActionVariableColumn actionCol1param0 = actionCol1.getChildColumns().get(0); assertEquals("param2", actionCol1param0.getVarName()); assertEquals("Set message", actionCol1param0.getHeader()); assertEquals(DataType.TYPE_STRING, actionCol1param0.getFieldType()); assertEquals("Message", actionCol1param0.getFactType()); assertEquals("message", actionCol1param0.getFactField()); //Action 2 - Variable 2 BRLActionVariableColumn actionCol1param1 = actionCol1.getChildColumns().get(1); assertEquals("param3", actionCol1param1.getVarName()); assertEquals("Set status", actionCol1param1.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, actionCol1param1.getFieldType()); assertEquals("Message", actionCol1param1.getFactType()); assertEquals("status", actionCol1param1.getFactField()); //Check data assertEquals(2, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Hello World", null, false, "Goodbye cruel world", null}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Goodbye", null, false, "", null}, dtable.getData().get(1))); } @Test //https://issues.jboss.org/browse/GUVNOR-2888 public void conversionWithRetract() { final ConversionResult result = new ConversionResult(); final List<DataListener> listeners = new ArrayList<>(); addModelField("org.test.Employee", "this", "org.test.Employee", DataType.TYPE_THIS); addModelField("org.test.Employee", "yearsOfService", Integer.class.getName(), DataType.TYPE_NUMERIC_INTEGER); addModelField("org.test.Employee", "name", String.class.getName(), DataType.TYPE_STRING); addModelField("org.test.Employee", "bigAbsence", Boolean.class.getName(), DataType.TYPE_BOOLEAN); addModelField("org.test.Bonus", "this", "org.test.Bonus", DataType.TYPE_THIS); addModelField("org.test.Bonus", "amount", Double.class.getName(), DataType.TYPE_NUMERIC_DOUBLE); addModelField("org.test.Bonus", "employee", "org.test.Employee", DataType.TYPE_OBJECT); final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener(result, dmo); listeners.add(listener); //Convert final ExcelParser parser = new ExcelParser(listeners); final InputStream is = this.getClass().getResourceAsStream("GUVNOR-2888.xlsx"); try { parser.parseFile(is); } finally { try { is.close(); } catch (IOException ioe) { fail(ioe.getMessage()); } } //Check conversion results assertEquals(1, result.getMessages().size()); assertTrue(result.getMessages().get(0).getMessage().contains("I13")); //Check basics final List<GuidedDecisionTable52> dtables = listener.getGuidedDecisionTables(); assertNotNull(dtables); assertEquals(1, dtables.size()); GuidedDecisionTable52 dtable = dtables.get(0); assertEquals("bonus_program", dtable.getTableName()); assertEquals(GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY, dtable.getTableFormat()); //Check expanded columns List<BaseColumn> columns = dtable.getExpandedColumns(); assertNotNull(columns); assertEquals(11, columns.size()); assertTrue(columns.get(0) instanceof RowNumberCol52); assertTrue(columns.get(1) instanceof DescriptionCol52); assertTrue(columns.get(2) instanceof BRLConditionVariableColumn); assertTrue(columns.get(3) instanceof BRLConditionVariableColumn); assertTrue(columns.get(4) instanceof BRLConditionVariableColumn); assertTrue(columns.get(5) instanceof BRLConditionVariableColumn); assertTrue(columns.get(6) instanceof BRLConditionVariableColumn); assertTrue(columns.get(7) instanceof BRLConditionVariableColumn); assertTrue(columns.get(8) instanceof BRLActionVariableColumn); assertTrue(columns.get(9) instanceof BRLActionVariableColumn); assertTrue(columns.get(10) instanceof BRLActionVariableColumn); //Check individual condition columns assertEquals(3, dtable.getConditions().size()); //Pattern 0 assertTrue(dtable.getConditions().get(0) instanceof BRLConditionColumn); BRLConditionColumn conditionCol0 = ((BRLConditionColumn) dtable.getConditions().get(0)); assertEquals("Converted from ['Served between', 'Served between', 'Served more', 'absence']", conditionCol0.getHeader()); assertEquals(4, conditionCol0.getChildColumns().size()); List<IPattern> conditionCol0definition = conditionCol0.getDefinition(); assertEquals(1, conditionCol0definition.size()); assertTrue(conditionCol0definition.get(0) instanceof FactPattern); FactPattern conditionCol0fp = (FactPattern) conditionCol0definition.get(0); assertEquals("Employee", conditionCol0fp.getFactType()); assertEquals(4, conditionCol0fp.getNumberOfConstraints()); //Pattern 0 - Field Constraint 0 assertTrue(conditionCol0fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc0 = (SingleFieldConstraint) conditionCol0fp.getConstraint(0); assertEquals("yearsOfService", conditionCol0fpsfc0.getFieldName()); assertEquals(">=", conditionCol0fpsfc0.getOperator()); assertEquals("param1", conditionCol0fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc0.getFieldType()); //Pattern 0 - Field Constraint 0 - Variable 0 BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get(0); assertEquals("param1", conditionCol0param0.getVarName()); assertEquals("Served between", conditionCol0param0.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param0.getFieldType()); assertEquals("Employee", conditionCol0param0.getFactType()); assertEquals("yearsOfService", conditionCol0param0.getFactField()); //Pattern 0 - Field Constraint 1 assertTrue(conditionCol0fp.getConstraint(1) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc1 = (SingleFieldConstraint) conditionCol0fp.getConstraint(1); assertEquals("yearsOfService", conditionCol0fpsfc1.getFieldName()); assertEquals("<", conditionCol0fpsfc1.getOperator()); assertEquals("param2", conditionCol0fpsfc1.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc1.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc1.getFieldType()); //Pattern 0 - Field Constraint 1 - Variable 0 BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get(1); assertEquals("param2", conditionCol0param1.getVarName()); assertEquals("Served between", conditionCol0param1.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param1.getFieldType()); assertEquals("Employee", conditionCol0param1.getFactType()); assertEquals("yearsOfService", conditionCol0param1.getFactField()); //Pattern 0 - Field Constraint 2 assertTrue(conditionCol0fp.getConstraint(2) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc2 = (SingleFieldConstraint) conditionCol0fp.getConstraint(2); assertEquals("yearsOfService", conditionCol0fpsfc2.getFieldName()); assertEquals(">", conditionCol0fpsfc2.getOperator()); assertEquals("param3", conditionCol0fpsfc2.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc2.getConstraintValueType()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0fpsfc2.getFieldType()); //Pattern 0 - Field Constraint 2 - Variable 0 BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get(2); assertEquals("param3", conditionCol0param2.getVarName()); assertEquals("Served more", conditionCol0param2.getHeader()); assertEquals(DataType.TYPE_NUMERIC_INTEGER, conditionCol0param2.getFieldType()); assertEquals("Employee", conditionCol0param2.getFactType()); assertEquals("yearsOfService", conditionCol0param2.getFactField()); //Pattern 0 - Field Constraint 3 assertTrue(conditionCol0fp.getConstraint(3) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol0fpsfc3 = (SingleFieldConstraint) conditionCol0fp.getConstraint(3); assertEquals("bigAbsence", conditionCol0fpsfc3.getFieldName()); assertEquals("==", conditionCol0fpsfc3.getOperator()); assertEquals("param4", conditionCol0fpsfc3.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol0fpsfc3.getConstraintValueType()); assertEquals(DataType.TYPE_BOOLEAN, conditionCol0fpsfc3.getFieldType()); //Pattern 0 - Field Constraint 3 - Variable 0 BRLConditionVariableColumn conditionCol0param3 = conditionCol0.getChildColumns().get(3); assertEquals("param4", conditionCol0param3.getVarName()); assertEquals("absence", conditionCol0param3.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, conditionCol0param3.getFieldType()); assertEquals("Employee", conditionCol0param3.getFactType()); assertEquals("bigAbsence", conditionCol0param3.getFactField()); //Pattern 1 assertTrue(dtable.getConditions().get(1) instanceof BRLConditionColumn); BRLConditionColumn conditionCol1 = ((BRLConditionColumn) dtable.getConditions().get(1)); assertEquals("Converted from ['bonus for employee']", conditionCol1.getHeader()); assertEquals(1, conditionCol1.getChildColumns().size()); List<IPattern> conditionCol1definition = conditionCol1.getDefinition(); assertEquals(1, conditionCol1definition.size()); assertTrue(conditionCol1definition.get(0) instanceof FactPattern); FactPattern conditionCol1fp = (FactPattern) conditionCol1definition.get(0); assertEquals("Bonus", conditionCol1fp.getFactType()); assertEquals(1, conditionCol1fp.getNumberOfConstraints()); //Pattern 1 - Field Constraint 0 assertTrue(conditionCol1fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol1fpsfc0 = (SingleFieldConstraint) conditionCol1fp.getConstraint(0); assertEquals("employee", conditionCol1fpsfc0.getFieldName()); assertEquals("==", conditionCol1fpsfc0.getOperator()); assertEquals("param5", conditionCol1fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol1fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_OBJECT, conditionCol1fpsfc0.getFieldType()); //Pattern 1 - Field Constraint 0 - Variable 0 BRLConditionVariableColumn conditionCol1param0 = conditionCol1.getChildColumns().get(0); assertEquals("param5", conditionCol1param0.getVarName()); assertEquals("bonus for employee", conditionCol1param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol1param0.getFieldType()); assertEquals("Bonus", conditionCol1param0.getFactType()); assertEquals("employee", conditionCol1param0.getFactField()); //Pattern 2 assertTrue(dtable.getConditions().get(2) instanceof BRLConditionColumn); BRLConditionColumn conditionCol2 = ((BRLConditionColumn) dtable.getConditions().get(2)); assertEquals("Converted from ['no bonus for employee']", conditionCol2.getHeader()); assertEquals(1, conditionCol2.getChildColumns().size()); List<IPattern> conditionCol2definition = conditionCol2.getDefinition(); assertEquals(1, conditionCol2definition.size()); assertTrue(conditionCol2definition.get(0) instanceof CompositeFactPattern); CompositeFactPattern conditionCol2cfp = (CompositeFactPattern) conditionCol2definition.get(0); assertEquals(CompositeFactPattern.COMPOSITE_TYPE_NOT, conditionCol2cfp.getType()); assertEquals(1, conditionCol2cfp.getPatterns().length); assertTrue(conditionCol2cfp.getPatterns()[0] instanceof FactPattern); FactPattern conditionCol2fp = (FactPattern) conditionCol2cfp.getPatterns()[0]; assertEquals("Bonus", conditionCol2fp.getFactType()); assertEquals(1, conditionCol2fp.getNumberOfConstraints()); //Pattern 2 - Field Constraint 0 assertTrue(conditionCol2fp.getConstraint(0) instanceof SingleFieldConstraint); final SingleFieldConstraint conditionCol2fpsfc0 = (SingleFieldConstraint) conditionCol2fp.getConstraint(0); assertEquals("employee", conditionCol2fpsfc0.getFieldName()); assertEquals("==", conditionCol2fpsfc0.getOperator()); assertEquals("param6", conditionCol2fpsfc0.getValue()); assertEquals(SingleFieldConstraint.TYPE_TEMPLATE, conditionCol2fpsfc0.getConstraintValueType()); assertEquals(DataType.TYPE_OBJECT, conditionCol2fpsfc0.getFieldType()); //Pattern 2 - Field Constraint 0 - Variable 0 BRLConditionVariableColumn conditionCol2param0 = conditionCol2.getChildColumns().get(0); assertEquals("param6", conditionCol2param0.getVarName()); assertEquals("no bonus for employee", conditionCol2param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, conditionCol2param0.getFieldType()); assertEquals("Bonus", conditionCol2param0.getFactType()); assertEquals("employee", conditionCol2param0.getFactField()); //Check individual action columns assertEquals(3, dtable.getActionCols().size()); //Action 0 assertTrue(dtable.getActionCols().get(0) instanceof BRLActionColumn); BRLActionColumn actionCol0 = ((BRLActionColumn) dtable.getActionCols().get(0)); assertEquals("Converted from ['Inser bonus of amount']", actionCol0.getHeader()); assertEquals(1, actionCol0.getChildColumns().size()); List<IAction> actionCol0definition = actionCol0.getDefinition(); assertEquals(1, actionCol0definition.size()); assertTrue(actionCol0definition.get(0) instanceof FreeFormLine); FreeFormLine actionCol0ffl0 = (FreeFormLine) actionCol0definition.get(0); assertEquals("Bonus $b = new Bonus(); $b.setAmount((double)@{param7}); $b.setEmployee($e); insert($b);", actionCol0ffl0.getText()); //Action 0 - Variable 0 BRLActionVariableColumn actionCol0param0 = actionCol0.getChildColumns().get(0); assertEquals("param7", actionCol0param0.getVarName()); assertEquals("Inser bonus of amount", actionCol0param0.getHeader()); assertEquals(DataType.TYPE_OBJECT, actionCol0param0.getFieldType()); //Action 1 BRLActionColumn actionCol1 = ((BRLActionColumn) dtable.getActionCols().get(1)); assertEquals("Converted from ['retract']", actionCol1.getHeader()); assertEquals(1, actionCol1.getChildColumns().size()); List<IAction> actionCol1definition = actionCol1.getDefinition(); assertEquals(1, actionCol1definition.size()); assertTrue(actionCol1definition.get(0) instanceof ActionRetractFact); ActionRetractFact actionCol1arf = (ActionRetractFact) actionCol1definition.get(0); assertEquals("$bonus", actionCol1arf.getVariableName()); assertTrue(dtable.getActionCols().get(1) instanceof BRLActionColumn); //Action 1 - Variable 0 BRLActionVariableColumn actionCol1param0 = actionCol1.getChildColumns().get(0); assertEquals("param8", actionCol1param0.getVarName()); assertEquals("retract", actionCol1param0.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, actionCol1param0.getFieldType()); //Action 2 BRLActionColumn actionCol2 = ((BRLActionColumn) dtable.getActionCols().get(2)); assertEquals("Converted from ['retract2']", actionCol2.getHeader()); assertEquals(1, actionCol2.getChildColumns().size()); List<IAction> actionCol2definition = actionCol2.getDefinition(); assertEquals(1, actionCol2definition.size()); assertTrue(actionCol2definition.get(0) instanceof ActionRetractFact); ActionRetractFact actionCol2arf = (ActionRetractFact) actionCol2definition.get(0); assertEquals("$b", actionCol2arf.getVariableName()); assertTrue(dtable.getActionCols().get(2) instanceof BRLActionColumn); //Action 2 - Variable 1 BRLActionVariableColumn actionCol2param0 = actionCol2.getChildColumns().get(0); assertEquals("", actionCol2param0.getVarName()); assertEquals("retract2", actionCol2param0.getHeader()); assertEquals(DataType.TYPE_BOOLEAN, actionCol2param0.getFieldType()); //Check data assertEquals(4, dtable.getData().size()); assertTrue(isRowEquivalent(new Object[]{1, "Lowest bonus", 0, 2, null, false, "", "$e", "400", false, false}, dtable.getData().get(0))); assertTrue(isRowEquivalent(new Object[]{2, "Middle bonus", 2, 6, null, false, "", "$e", "800", false, false}, dtable.getData().get(1))); assertTrue(isRowEquivalent(new Object[]{3, "High bonus", null, null, 6, false, "", "", "1000", false, false}, dtable.getData().get(2))); assertTrue(isRowEquivalent(new Object[]{4, "Big absence", null, null, null, true, "$e", "", "", true, true}, dtable.getData().get(3))); } private boolean isRowEquivalent(Object[] expected, List<DTCellValue52> actual) { //Sizes should match if (expected.length != actual.size()) { return false; } //Column values for (int i = 0; i < expected.length; i++) { DTCellValue52 dcv = actual.get(i); switch (dcv.getDataType()) { case NUMERIC: final BigDecimal numeric = (BigDecimal) dcv.getNumericValue(); if (!assertValues(expected[i], numeric)) { return false; } break; case NUMERIC_BIGDECIMAL: final BigDecimal numericBigDecimal = (BigDecimal) dcv.getNumericValue(); if (!assertValues(expected[i], numericBigDecimal)) { return false; } break; case NUMERIC_BIGINTEGER: final BigInteger numericBigInteger = (BigInteger) dcv.getNumericValue(); if (!assertValues(expected[i], numericBigInteger)) { return false; } break; case NUMERIC_BYTE: final Byte numericByte = (Byte) dcv.getNumericValue(); if (!assertValues(expected[i], numericByte)) { return false; } break; case NUMERIC_DOUBLE: final Double numericDouble = (Double) dcv.getNumericValue(); if (!assertValues(expected[i], numericDouble)) { return false; } break; case NUMERIC_FLOAT: final Float numericFloat = (Float) dcv.getNumericValue(); if (!assertValues(expected[i], numericFloat)) { return false; } break; case NUMERIC_INTEGER: final Integer numericInteger = (Integer) dcv.getNumericValue(); if (!assertValues(expected[i], numericInteger)) { return false; } break; case NUMERIC_LONG: final Long numericLong = (Long) dcv.getNumericValue(); if (!assertValues(expected[i], numericLong)) { return false; } break; case NUMERIC_SHORT: final Short numericShort = (Short) dcv.getNumericValue(); if (!assertValues(expected[i], numericShort)) { return false; } break; case BOOLEAN: if (!assertValues(expected[i], dcv.getBooleanValue())) { return false; } break; default: if (!assertValues(expected[i], dcv.getStringValue())) { return false; } } } return true; } private boolean assertValues(final Object expected, final Object actual) { if (expected == null) { return actual == null; } return expected.equals(actual); } private void addModelField(final String factName, final String fieldName, final String clazz, final String type) { ModelField[] modelFields = new ModelField[1]; modelFields[0] = new ModelField(fieldName, clazz, ModelField.FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, type); if (packageModelFields.containsKey(factName)) { final List<ModelField> existingModelFields = new ArrayList<ModelField>(Arrays.asList(packageModelFields.get(factName))); existingModelFields.add(modelFields[0]); modelFields = existingModelFields.toArray(modelFields); } packageModelFields.put(factName, modelFields); } }