/*
* Copyright 2012 JBoss Inc
*
* 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.guvnor.server.converters.decisiontable;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import org.drools.decisiontable.parser.xls.ExcelParser;
import org.drools.guvnor.client.rpc.ConversionResult;
import org.drools.guvnor.client.rpc.ConversionResult.ConversionMessageType;
import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine;
import org.drools.ide.common.client.modeldriven.brl.FreeFormLine;
import org.drools.ide.common.client.modeldriven.brl.IAction;
import org.drools.ide.common.client.modeldriven.brl.IPattern;
import org.drools.ide.common.client.modeldriven.dt52.AnalysisCol52;
import org.drools.ide.common.client.modeldriven.dt52.AttributeCol52;
import org.drools.ide.common.client.modeldriven.dt52.BRLActionColumn;
import org.drools.ide.common.client.modeldriven.dt52.BRLActionVariableColumn;
import org.drools.ide.common.client.modeldriven.dt52.BRLConditionColumn;
import org.drools.ide.common.client.modeldriven.dt52.BRLConditionVariableColumn;
import org.drools.ide.common.client.modeldriven.dt52.BaseColumn;
import org.drools.ide.common.client.modeldriven.dt52.DTCellValue52;
import org.drools.ide.common.client.modeldriven.dt52.DescriptionCol52;
import org.drools.ide.common.client.modeldriven.dt52.GuidedDecisionTable52;
import org.drools.ide.common.client.modeldriven.dt52.MetadataCol52;
import org.drools.ide.common.client.modeldriven.dt52.RowNumberCol52;
import org.drools.template.model.Global;
import org.drools.template.model.Import;
import org.drools.template.parser.DataListener;
import org.junit.Test;
/**
* Tests for the conversion of XLS Decision Tables to Guided Decision Tables
*/
public class DecisionTableXLSToDecisionTableGuidedConverterTests {
@Test
public void testAttributes() {
final ConversionResult result = new ConversionResult();
final List<DataListener> listeners = new ArrayList<DataListener>();
final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener( result );
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( 13,
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 );
assertTrue( columns.get( 12 ) instanceof AnalysisCol52 );
//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 String[]{"1", "Specific rule 1", "1", "g1", "100", "T1", "CAL1", "TRUE", "TRUE", "TRUE", "AG1", "RFG1"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Specific rule 2", "2", "g2", "200", "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 );
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( 4,
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 AnalysisCol52 );
//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 String[]{"1", "Created from row 8", "2"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 9", "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 );
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( 4,
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 AnalysisCol52 );
//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 String[]{"1", "Created from row 7", ""},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", ""},
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 );
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( 4,
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 AnalysisCol52 );
//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 String[]{"1", "Created from row 7", ""},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", ""},
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 );
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( 4,
columns.size() );
assertTrue( columns.get( 0 ) instanceof RowNumberCol52 );
assertTrue( columns.get( 1 ) instanceof DescriptionCol52 );
assertTrue( columns.get( 2 ) instanceof MetadataCol52 );
assertTrue( columns.get( 3 ) instanceof AnalysisCol52 );
//Check metadata column
MetadataCol52 mdCol2 = ((MetadataCol52) columns.get( 2 ));
assertEquals( "cheese",
mdCol2.getMetadata() );
//Check data
assertEquals( 2,
dtable.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 7", "cheddar"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", "edam"},
dtable.getData().get( 1 ) ) );
}
@Test
public void testActions() {
final ConversionResult result = new ConversionResult();
final List<DataListener> listeners = new ArrayList<DataListener>();
final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener( result );
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( 8,
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 );
assertTrue( columns.get( 7 ) instanceof AnalysisCol52 );
//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( "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.text );
//Column 1 - Variable 1
BRLActionVariableColumn actionCol0param0 = actionCol0.getChildColumns().get( 0 );
assertEquals( "param1",
actionCol0param0.getVarName() );
assertEquals( "Multi-parameters",
actionCol0param0.getHeader() );
assertEquals( SuggestionCompletionEngine.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( SuggestionCompletionEngine.TYPE_OBJECT,
actionCol0param1.getFieldType() );
assertNull( actionCol0param1.getFactType() );
assertNull( actionCol0param1.getFactField() );
//Column 2
BRLActionColumn actionCol1 = ((BRLActionColumn) dtable.getActionCols().get( 1 ));
assertEquals( "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.text );
//Column 2 - Variable 1
BRLActionVariableColumn actionCol1param0 = actionCol1.getChildColumns().get( 0 );
assertEquals( "param3",
actionCol1param0.getVarName() );
assertEquals( "Single-parameter",
actionCol1param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
actionCol1param0.getFieldType() );
assertNull( actionCol1param0.getFactType() );
assertNull( actionCol1param0.getFactField() );
//Column 3
BRLActionColumn actionCol2 = ((BRLActionColumn) dtable.getActionCols().get( 2 ));
assertEquals( "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.text );
//Column 3 - Variable 1
BRLActionVariableColumn actionCol2param0 = actionCol2.getChildColumns().get( 0 );
assertEquals( "param4",
actionCol2param0.getVarName() );
assertEquals( "Log-single-parameter",
actionCol2param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
actionCol2param0.getFieldType() );
assertNull( actionCol2param0.getFactType() );
assertNull( actionCol2param0.getFactField() );
//Column 4
BRLActionColumn actionCol3 = ((BRLActionColumn) dtable.getActionCols().get( 3 ));
assertEquals( "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.text );
//Column 3 - Variable 1
BRLActionVariableColumn actionCol3param0 = actionCol3.getChildColumns().get( 0 );
assertEquals( "",
actionCol3param0.getVarName() );
assertEquals( "Zero-parameters",
actionCol3param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_BOOLEAN,
actionCol3param0.getFieldType() );
assertNull( actionCol3param0.getFactType() );
assertNull( actionCol3param0.getFactField() );
//Check data
assertEquals( 2,
dtable.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 7", "10", "20", "30", "hello", "TRUE"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", "50", "60", "70", "goodbye", "FALSE"},
dtable.getData().get( 1 ) ) );
}
@Test
public void testConditions() {
final ConversionResult result = new ConversionResult();
final List<DataListener> listeners = new ArrayList<DataListener>();
final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener( result );
listeners.add( listener );
//Convert
final ExcelParser parser = new ExcelParser( listeners );
final InputStream is = this.getClass().getResourceAsStream( "Conditions.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( "ConditionsTest",
dtable.getTableName() );
assertEquals( GuidedDecisionTable52.TableFormat.EXTENDED_ENTRY,
dtable.getTableFormat() );
//Check expanded columns
List<BaseColumn> columns = dtable.getExpandedColumns();
assertNotNull( columns );
assertEquals( 8,
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 AnalysisCol52 );
//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 cell [C4]",
conditionCol0.getHeader() );
assertEquals( 3,
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(age > \"@{param1}\", firstName == \"@{param2}\", surname == \"@{param3}\")",
conditionCol0ffl.text );
//Column 1 - Variable 1
BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get( 0 );
assertEquals( "param1",
conditionCol0param0.getVarName() );
assertEquals( "Converted from cell [C4]",
conditionCol0param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol0param0.getFieldType() );
assertNull( conditionCol0param0.getFactType() );
assertNull( conditionCol0param0.getFactField() );
//Column 1 - Variable 2
BRLConditionVariableColumn conditionCol0param1 = conditionCol0.getChildColumns().get( 1 );
assertEquals( "param2",
conditionCol0param1.getVarName() );
assertEquals( "Converted from cell [C4]",
conditionCol0param1.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol0param1.getFieldType() );
assertNull( conditionCol0param1.getFactType() );
assertNull( conditionCol0param1.getFactField() );
//Column 1 - Variable 3
BRLConditionVariableColumn conditionCol0param2 = conditionCol0.getChildColumns().get( 2 );
assertEquals( "param3",
conditionCol0param2.getVarName() );
assertEquals( "Converted from cell [C4]",
conditionCol0param2.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol0param2.getFieldType() );
assertNull( conditionCol0param2.getFactType() );
assertNull( conditionCol0param2.getFactField() );
//Column 2
BRLConditionColumn conditionCol1 = ((BRLConditionColumn) dtable.getConditions().get( 1 ));
assertEquals( "something",
conditionCol1.getHeader() );
assertEquals( 2,
conditionCol1.getChildColumns().size() );
List<IPattern> conditionCol1definition = conditionCol1.getDefinition();
assertEquals( 1,
conditionCol1definition.size() );
assertTrue( conditionCol1definition.get( 0 ) instanceof FreeFormLine );
FreeFormLine conditionCol1ffl = (FreeFormLine) conditionCol1definition.get( 0 );
assertEquals( "Vehicle(make == \"@{param4}\", model == \"@{param5}\")",
conditionCol1ffl.text );
//Column 2 - Variable 1
BRLConditionVariableColumn conditionCol1param0 = conditionCol1.getChildColumns().get( 0 );
assertEquals( "param4",
conditionCol1param0.getVarName() );
assertEquals( "something",
conditionCol1param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol1param0.getFieldType() );
assertNull( conditionCol1param0.getFactType() );
assertNull( conditionCol1param0.getFactField() );
//Column 2 - Variable 2
BRLConditionVariableColumn conditionCol1param1 = conditionCol1.getChildColumns().get( 1 );
assertEquals( "param5",
conditionCol1param1.getVarName() );
assertEquals( "something",
conditionCol1param1.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol1param1.getFieldType() );
assertNull( conditionCol1param1.getFactType() );
assertNull( conditionCol1param1.getFactField() );
//Check data
assertEquals( 2,
dtable.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 7", "20", "Mike", "Brown", "BMW", "M3"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", "30", "Jason", "Grey", "Audi", "S4"},
dtable.getData().get( 1 ) ) );
}
@Test
public void testMultipleRuleTables() {
final ConversionResult result = new ConversionResult();
final List<DataListener> listeners = new ArrayList<DataListener>();
final GuidedDecisionTableGeneratorListener listener = new GuidedDecisionTableGeneratorListener( result );
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( 6,
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 );
assertTrue( columns0.get( 5 ) instanceof AnalysisCol52 );
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( "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 FreeFormLine );
FreeFormLine conditionCol0_0ffl = (FreeFormLine) conditionCol0_0definition.get( 0 );
assertEquals( "Person(name == \"@{param1}\")",
conditionCol0_0ffl.text );
//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( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol0_0param0.getFieldType() );
assertNull( conditionCol0_0param0.getFactType() );
assertNull( conditionCol0_0param0.getFactField() );
//Column 2
BRLActionColumn actionCol0_0 = ((BRLActionColumn) dtable0.getActionCols().get( 0 ));
assertEquals( "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.text );
//Column 1 - Variable 1
BRLActionVariableColumn actionCol0_0param0 = actionCol0_0.getChildColumns().get( 0 );
assertEquals( "param2",
actionCol0_0param0.getVarName() );
assertEquals( "Salutation",
actionCol0_0param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
actionCol0_0param0.getFieldType() );
assertNull( actionCol0_0param0.getFactType() );
assertNull( actionCol0_0param0.getFactField() );
//Check data
assertEquals( 2,
dtable0.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 7", "AG1", "John", "Hello Sir"},
dtable0.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", "AG2", "Jane", "Hello Madam"},
dtable0.getData().get( 1 ) ) );
//Check expanded columns
List<BaseColumn> columns1 = dtable1.getExpandedColumns();
assertNotNull( columns1 );
assertEquals( 5,
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 );
assertTrue( columns1.get( 4 ) instanceof AnalysisCol52 );
//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 cell [C12]",
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 FreeFormLine );
FreeFormLine conditionCol1_0ffl = (FreeFormLine) conditionCol1_0definition.get( 0 );
assertEquals( "Person(name == \"@{param1}\", age == \"@{param2}\")",
conditionCol1_0ffl.text );
//Column 1 - Variable 1
BRLConditionVariableColumn conditionCol1_0param0 = conditionCol1_0.getChildColumns().get( 0 );
assertEquals( "param1",
conditionCol1_0param0.getVarName() );
assertEquals( "Converted from cell [C12]",
conditionCol1_0param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol1_0param0.getFieldType() );
assertNull( conditionCol1_0param0.getFactType() );
assertNull( conditionCol1_0param0.getFactField() );
//Column 1 - Variable 2
BRLConditionVariableColumn conditionCol1_0param1 = conditionCol1_0.getChildColumns().get( 1 );
assertEquals( "param2",
conditionCol1_0param1.getVarName() );
assertEquals( "Converted from cell [C12]",
conditionCol1_0param1.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol1_0param1.getFieldType() );
assertNull( conditionCol1_0param1.getFactType() );
assertNull( conditionCol1_0param1.getFactField() );
//Check data
assertEquals( 2,
dtable1.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 15", "John", "25"},
dtable1.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"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 );
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( 4,
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 AnalysisCol52 );
//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( "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.text );
//Column 1 - Variable 1
BRLConditionVariableColumn conditionCol0param0 = conditionCol0.getChildColumns().get( 0 );
assertEquals( "param1",
conditionCol0param0.getVarName() );
assertEquals( "Re-using single parameter",
conditionCol0param0.getHeader() );
assertEquals( SuggestionCompletionEngine.TYPE_OBJECT,
conditionCol0param0.getFieldType() );
assertNull( conditionCol0param0.getFactType() );
assertNull( conditionCol0param0.getFactField() );
//Check data
assertEquals( 2,
dtable.getData().size() );
assertTrue( isRowEquivalent( new String[]{"1", "Created from row 7", "isQualified"},
dtable.getData().get( 0 ) ) );
assertTrue( isRowEquivalent( new String[]{"2", "Created from row 8", "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 );
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 ) );
}
private boolean isRowEquivalent(String[] 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 ( !expected[i].equals( numeric.toPlainString() ) ) {
return false;
}
break;
case NUMERIC_BIGDECIMAL :
final BigDecimal numericBigDecimal = (BigDecimal) dcv.getNumericValue();
if ( !expected[i].equals( numericBigDecimal.toPlainString() ) ) {
return false;
}
break;
case NUMERIC_BIGINTEGER :
final BigInteger numericBigInteger = (BigInteger) dcv.getNumericValue();
if ( !expected[i].equals( numericBigInteger.toString() ) ) {
return false;
}
break;
case NUMERIC_BYTE :
final Byte numericByte = (Byte) dcv.getNumericValue();
if ( !expected[i].equals( numericByte.toString() ) ) {
return false;
}
break;
case NUMERIC_DOUBLE :
final Double numericDouble = (Double) dcv.getNumericValue();
if ( !expected[i].equals( numericDouble.toString() ) ) {
return false;
}
break;
case NUMERIC_FLOAT :
final Float numericFloat = (Float) dcv.getNumericValue();
if ( !expected[i].equals( numericFloat.toString() ) ) {
return false;
}
break;
case NUMERIC_INTEGER :
final Integer numericInteger = (Integer) dcv.getNumericValue();
if ( !expected[i].equals( numericInteger.toString() ) ) {
return false;
}
break;
case NUMERIC_LONG :
final Long numericLong = (Long) dcv.getNumericValue();
if ( !expected[i].equals( numericLong.toString() ) ) {
return false;
}
break;
case NUMERIC_SHORT :
final Short numericShort = (Short) dcv.getNumericValue();
if ( !expected[i].equals( numericShort.toString() ) ) {
return false;
}
break;
case BOOLEAN :
if ( Boolean.parseBoolean( expected[i] ) != dcv.getBooleanValue() ) {
return false;
}
break;
default :
if ( !expected[i].equals( dcv.getStringValue() ) ) {
return false;
}
}
}
return true;
}
}