[jboss-svn-commits] JBL Code SVN: r15482 - in labs/jbossrules/trunk/drools-decisiontables/src: test/java/org/drools/decisiontable and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 1 10:32:06 EDT 2007


Author: stevearoonie
Date: 2007-10-01 10:32:06 -0400 (Mon, 01 Oct 2007)
New Revision: 15482

Added:
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/AbstractColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayCell.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongCell.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringCell.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_conditions.drl
Removed:
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ArrayColumnTest.java
Modified:
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayColumn.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Cell.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Column.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ColumnFactory.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateRuleBase.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ExternalSheetListener.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Row.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/RuleTemplate.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateContainer.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetCompilerUnitTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ColumnFactoryTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultGeneratorTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateRuleBaseTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/RuleTemplateTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_integration.drl
Log:
Add support for Array and Long types in rule templates. Also add condition rule generation based on cell values.

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/AbstractColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/AbstractColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/AbstractColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,51 @@
+package org.drools.decisiontable.parser;
+
+import org.drools.util.StringUtils;
+
+/*
+ * Copyright 2005 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.
+ */
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * Base column of in a decision table
+ */
+public abstract class AbstractColumn implements Column {
+	private String name;
+
+	public AbstractColumn(String n) {
+		this.name = n;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getCondition(String condition, int index) {
+		StringBuffer conditionString = new StringBuffer(getCellType());
+		conditionString.append("(row == r, column == $param");
+		if (index != -1) {
+			conditionString.append(", index == ").append(index);
+		}
+		if (!StringUtils.isEmpty(condition)) {
+			conditionString.append(", value ").append(condition);
+		}
+		conditionString.append(")");
+		return conditionString.toString();
+	}
+	
+	
+}

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayCell.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayCell.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayCell.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2005 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.
+ */
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * Cell containing an array of values
+ */
+package org.drools.decisiontable.parser;
+
+import java.util.Map;
+
+import org.drools.StatefulSession;
+import org.drools.util.StringUtils;
+
+public class ArrayCell implements Cell {
+	Row row;
+
+	String value;
+
+	ArrayColumn column;
+
+	private String[] values;
+	
+	public ArrayCell(final Row r, final ArrayColumn c) {
+		row = r;
+		column = c;
+	}
+
+	public void addValue(Map vars) {
+		for (int i = 0; i < values.length; i++) {
+			vars.put(column.getName() + i, values[i]);
+		}		
+	}
+
+	public Column getColumn() {
+		return column;
+	}
+
+	public Row getRow() {
+		return row;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+
+	public void insert(StatefulSession session) {
+		session.insert(this);
+		for (int i = 0; i < values.length; i++) {
+			Cell cell = column.getType().createCell(row);
+			cell.setValue(values[i]);
+			cell.setIndex(i);
+			cell.insert(session);
+		}				
+	}
+
+	public void setIndex(int i) {
+		throw new RuntimeException("You cannot call setIndex on an ArrayCell");
+	}
+
+	public int getIndex() {
+		return -1;
+	}
+
+	public void setValue(String v) {
+		value = v;
+		values = StringUtils.splitPreserveAllTokens(value, ",");
+	}
+
+	public boolean isEmpty() {
+		return StringUtils.isEmpty(value);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayColumn.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ArrayColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -16,8 +16,6 @@
  * limitations under the License.
  */
 
-import java.util.Map;
-
 import org.drools.util.StringUtils;
 /**
  * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
@@ -25,22 +23,41 @@
  * A column in a decision table that represents an array (comma-delimited)
  * of values.
  */
-public class ArrayColumn extends Column {
+public class ArrayColumn extends AbstractColumn {
 
-	public void addValue(Map vars, Object value) {
+	private Column type;
 
-		String[] values = ((String[]) value);
-		for (int i = 0; i < values.length; i++) {
-			vars.put(getName() + i, values[i]);
-		}
+	public ArrayColumn(String n, Column typeColumn) {
+		super(n);
+		this.type = typeColumn;
 	}
 
-	public ArrayColumn(String n) {
-		super(n);
+	public Cell createCell(Row row) {
+		return new ArrayCell(row, this);
 	}
 
-	public Object getValue(String cellValue) {
-		return StringUtils.splitPreserveAllTokens(cellValue, ",");
+	public String getCellType() {
+		return type.getCellType();
 	}
+	
+	public Column getType() {
+		return type;
+	}
 
+	public String getCondition(String condition, int index) {
+		if (index == -1) {
+			StringBuffer conditionString = new StringBuffer("ArrayCell(row == r, column == $param");
+			if (!StringUtils.isEmpty(condition)) {
+				conditionString.append(", value ").append(condition);
+			}
+			conditionString.append(")");
+			return conditionString.toString();
+		}
+		else
+		{
+			return type.getCondition(condition, index);
+		}
+		
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Cell.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Cell.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Cell.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -2,6 +2,8 @@
 
 import java.util.Map;
 
+import org.drools.StatefulSession;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -23,42 +25,20 @@
  * 
  * A cell in a decision table
  */
-public class Cell {
-	Row row;
+public interface Cell {
+	public Row getRow();
 
-	Object value;
+	public Column getColumn();
+	
+	public void setValue(String value);
 
-	Column column;
+	public void addValue(Map vars);
+	
+	public void insert(StatefulSession session);
 
-	public Cell() {
-		
-	}
-	Cell(Row r, Column c) {
-		row = r;
-		column = c;
-	}
+	public void setIndex(int i);
 	
-	public void setValue(String v) {
-		value = column.getValue(v);
-	}
+	public int getIndex();
 
-	public String toString() {
-		return "Cell[" + column + ": " + value + "]";
-	}
-
-	public Row getRow() {
-		return row;
-	}
-
-	public String getColumn() {
-		return column.getName();
-	}
-
-	public Object getValue() {
-		return value;
-	}
-
-	public void addValue(Map vars) {
-		column.addValue(vars, value);
-	}
+	public boolean isEmpty();
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Column.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Column.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Column.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -15,30 +15,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import java.util.Map;
 
 /**
  * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
  * 
  * A column in a decision table
  */
-public class Column {
-	private String name;
+public interface Column {
+	String getName();
 
-	public Column(String n) {
-		this.name = n;
-	}
+	Cell createCell(Row row);
 
-	public String getName() {
-		return name;
-	}
+	String getCellType();
 
-	public Object getValue(String cellValue) {
-		return cellValue;
-	}
+	String getCondition(String condition, int index);
 
-	public void addValue(Map vars, Object value) {
-		vars.put(name, value);
-	}
-
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ColumnFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ColumnFactory.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ColumnFactory.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -1,5 +1,10 @@
 package org.drools.decisiontable.parser;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -22,11 +27,51 @@
  * [] indicates a column that represents an array (comma-delimited) of values.
  */
 public class ColumnFactory {
+    private final static Pattern PATTERN = Pattern.compile( "([a-zA-Z0-9_]*)(\\[\\])?(:\\s*([a-zA-Z]*)(\\[\\])?)?" );
 
-	public Column getColumn(String value) {
-		if (value.endsWith("[]")) {
-			return new ArrayColumn(value.substring(0, value.length() - 2));
-		}
-		return new Column(value);
-	}
+    public Column getColumn(String value) {
+        Matcher m = PATTERN.matcher( value );
+        if ( !m.matches() ) throw new IllegalArgumentException( "value " + value + " is not a valid column definition" );
+        String name = m.group( 1 );
+        String type = m.group( 4 );
+        type = type == null ? "String" : type;
+        boolean array = (m.group( 2 ) != null) || (m.group( 5 ) != null);
+        if ( array ) {
+            return new ArrayColumn( name,
+                                    createColumn( name,
+                                                  type ) );
+        }
+        return createColumn( name,
+                             type );
+    }
+
+    private Column createColumn(String name,
+                                String type) {
+        try {
+            Class klass = Class.forName( this.getClass().getPackage().getName() + "." + type + "Column" );
+            Constructor constructor = klass.getConstructor( new Class[]{String.class} );
+            return (Column) constructor.newInstance( new Object[]{name} );
+        } catch ( SecurityException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( NoSuchMethodException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( ClassNotFoundException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( IllegalArgumentException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( InstantiationException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( IllegalAccessException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        } catch ( InvocationTargetException e ) {
+            e.printStackTrace();
+            throw new RuntimeException( e );
+        }
+    }
 }

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,105 @@
+package org.drools.decisiontable.parser;
+
+/*
+ * Copyright 2005 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.
+ */
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.drools.decisiontable.model.Condition;
+import org.drools.decisiontable.model.Rule;
+import org.drools.decisiontable.model.SnippetBuilder;
+import org.drools.util.StringUtils;
+
+/**
+ * 
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * The default column condition for a rule template to be generated. If the
+ * conditon starts with "!" then the template will only be generated if the
+ * column condition does not exist. If there is no condition string then the
+ * template will be generated only if the column contains a value. The condition
+ * can be any valid rule condition.
+ */
+class DefaultTemplateColumn implements TemplateColumn {
+	private static final Pattern COLUMN_PATTERN = Pattern
+			.compile("^(!?)([a-zA-Z0-9_]*)(\\[([0-9]+)\\])?\\s*(.*)");
+
+	private boolean notCondition;
+
+	private String columnName;
+
+	private String condition;
+
+	private TemplateContainer templateContainer;
+
+	private int index = -1;
+
+	DefaultTemplateColumn(TemplateContainer tc, String columnString) {
+		templateContainer = tc;
+		Matcher matcher = COLUMN_PATTERN.matcher(columnString);
+		if (!matcher.matches())
+			throw new IllegalArgumentException("column " + columnString
+					+ " is not valid");
+		notCondition = !StringUtils.isEmpty(matcher.group(1));
+		columnName = matcher.group(2);
+		String indexString = matcher.group(4);
+		condition = matcher.group(5);
+		if (!StringUtils.isEmpty(indexString)) {
+			index = Integer.parseInt(indexString);
+		}
+	}
+
+	private void createCellCondition(final Rule rule) {
+		StringBuffer conditionString = new StringBuffer();
+		Column column = templateContainer.getColumn(columnName);
+		column.getCondition(condition, index);
+		
+		if (notCondition) {
+			conditionString.append("not ");
+		}
+		conditionString.append("exists ");
+		conditionString.append(column.getCondition(condition, index));
+		SnippetBuilder snip = new SnippetBuilder(conditionString.toString());
+		Condition condition = new Condition();
+		condition.setSnippet(snip.build(columnName));
+		rule.addCondition(condition);
+	}
+
+	private void createColumnCondition(final Rule rule, final String value) {
+		SnippetBuilder colSnip = new SnippetBuilder(
+				"$param : Column(name == \"$param\")");
+		Condition colCondition = new Condition();
+		colCondition.setSnippet(colSnip.build(value));
+		rule.addCondition(colCondition);
+	}
+
+	public void addCondition(Rule rule) {
+		createColumnCondition(rule, columnName);
+		createCellCondition(rule);
+	}
+
+	public String getName() {
+		return columnName;
+	}
+
+	public boolean isNotCondition() {
+		return notCondition;
+	}
+
+	public String getCondition() {
+		return condition;
+	}
+}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateContainer.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -28,13 +28,15 @@
  * 
  * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
  * 
- * Container for a set of templates (residing in one file).
- * This class will parse the template file. 
- *
+ * Container for a set of templates (residing in one file). This class will
+ * parse the template file.
+ * 
  */
 public class DefaultTemplateContainer implements TemplateContainer {
 	private String header;
 
+	private Map columnMap = new HashMap();
+
 	private List columns = new ArrayList();
 
 	private Map templates = new HashMap();
@@ -55,7 +57,7 @@
 		if (templates.size() == 0) {
 			throw new DecisionTableParseException("Missing templates");
 		}
-		
+
 	}
 
 	private void parseTemplate(final InputStream templateStream) {
@@ -79,7 +81,7 @@
 						String quotedName = line.substring(8).trim();
 						quotedName = quotedName.substring(1, quotedName
 								.length() - 1);
-						template = new RuleTemplate(quotedName);
+						template = new RuleTemplate(quotedName, this);
 						addTemplate(template);
 
 					} else if (line.startsWith("package")) {
@@ -137,6 +139,7 @@
 
 	private void addColumn(Column c) {
 		columns.add(c);
+		columnMap.put(c.getName(), c);
 	}
 
 	/*
@@ -166,4 +169,8 @@
 					+ e.getMessage());
 		}
 	}
+
+	public Column getColumn(final String name) {
+		return (Column) columnMap.get(name);
+	}
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateRuleBase.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultTemplateRuleBase.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -32,7 +32,6 @@
 import org.drools.decisiontable.model.Global;
 import org.drools.decisiontable.model.Import;
 import org.drools.decisiontable.model.Rule;
-import org.drools.decisiontable.model.SnippetBuilder;
 import org.drools.rule.Package;
 
 /**
@@ -51,8 +50,10 @@
  * rule "template1"
  *   when
  *     r : Row()
- *     Cell(row == r, column == "column1")
- *     Cell(row == r, column == "column2")
+ *     column1 : Column(name == "column1")
+ *     Cell(row == r, column == column1)
+ *     column2 : Column(name == "column2")
+ *     Cell(row == r, column == column2, value == "xyz")
  *   then
  *     generator.generate( "template1", r);
  *   end
@@ -99,23 +100,15 @@
 		condition.setSnippet("r : Row()");
 		rule.addCondition(condition);
 		createColumnConditions(template, rule);
-		createNotColumnConditions(template, rule);
 		rule.addConsequence(createConsequence(template));
 		p.addRule(rule);
 	}
 
-	private void createNotColumnConditions(RuleTemplate template, Rule rule) {
-		String[] templateNotColumns = template.getNotColumns();
-		for (int j = 0; j < templateNotColumns.length; j++) {
-			rule.addCondition(createNotCondition(templateNotColumns[j]));
-		}
-	}
-
 	private void createColumnConditions(RuleTemplate template, Rule rule) {
 		List templateColumns = template.getColumns();
-		for (Iterator it1 = templateColumns.iterator(); it1.hasNext();) {
-			String column = (String) it1.next();
-			rule.addCondition(createCondition(column));
+		for (Iterator it = templateColumns.iterator(); it.hasNext();) {
+			TemplateColumn column = (TemplateColumn) it.next();
+			column.addCondition(rule);
 		}
 	}
 
@@ -145,26 +138,9 @@
 		return consequence;
 	}
 
-	private Condition createCondition(final String value) {
-		SnippetBuilder snip = new SnippetBuilder(
-				"Cell(row == r, column == \"$param\")");
-		String result = snip.build(value);
-		Condition condition = new Condition();
-		condition.setSnippet(result);
-		return condition;
-	}
-
-	private Condition createNotCondition(final String value) {
-		SnippetBuilder snip = new SnippetBuilder(
-				"not Cell(row == r, column == \"$param\")");
-		String result = snip.build(value);
-		Condition condition = new Condition();
-		condition.setSnippet(result);
-		return condition;
-	}
 	private RuleBase readRule(String drl) {
 		try {
-			System.out.println(drl);
+//			System.out.println(drl);
 			// read in the source
 			Reader source = new StringReader(drl);
 			PackageBuilder builder = new PackageBuilder();

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ExternalSheetListener.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ExternalSheetListener.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ExternalSheetListener.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -19,6 +19,7 @@
 import java.util.Properties;
 
 import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.decisiontable.model.DRLOutput;
 
 /**
@@ -44,6 +45,8 @@
 
 	private Generator generator;
 
+	private WorkingMemoryFileLogger logger;
+
 	public ExternalSheetListener(final int startRow, final int startCol,
 			final String template) {
 		this(startRow, startCol, new DefaultTemplateContainer(template));
@@ -68,10 +71,19 @@
 		columns = tc.getColumns();
 		this.templateContainer = tc;
 		session = ruleBase.newStatefulSession();
+		logger = new WorkingMemoryFileLogger(session);
+		logger.setFileName("log/event");
 		this.generator = generator;
 		session.setGlobal("generator", generator);
+		assertColumns();
 	}
 
+	private void assertColumns() {
+		for (int i = 0; i < columns.length; i++) {
+			session.insert(columns[i]);			
+		}
+	}
+
 	public Properties getProperties() {
 		return null;
 	}
@@ -85,6 +97,7 @@
 			session.insert(currentRow);
 		}
 		session.fireAllRules();
+		logger.writeToDisk();
 		session.dispose();
 	}
 
@@ -95,13 +108,9 @@
 			int columnIndex = column - startCol;
 			// System.out.println("asserting cell " + row + ", " + column + ": "
 			// + value);
-			//Column col = columns[columnIndex];
-			//Cell cell = new Cell(currentRow, col, value);
-			//currentRow.addCell(cell);
 			Cell cell = currentRow.getCell(columnIndex);
 			cell.setValue(value);
-			session.insert(cell);
-
+			cell.insert(session);
 		}
 	}
 

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongCell.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongCell.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongCell.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,79 @@
+package org.drools.decisiontable.parser;
+
+import java.util.Map;
+
+import org.drools.StatefulSession;
+
+/*
+ * Copyright 2005 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.
+ */
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * A cell in a decision table containing a long value
+ */
+public class LongCell implements Cell {
+	Row row;
+
+	Long value;
+
+	Column column;
+
+	private int index;
+
+	public LongCell() {
+		
+	}
+	LongCell(Row r, Column c) {
+		row = r;
+		column = c;
+	}
+
+	public String toString() {
+		return "Cell[" + column + ": " + value + "]";
+	}
+
+	public Row getRow() {
+		return row;
+	}
+
+	public Column getColumn() {
+		return column;
+	}
+
+	public Long getValue() {
+		return value;
+	}
+
+	public void addValue(Map vars) {
+		vars.put(column.getName(), value);
+	}
+	public void insert(StatefulSession session) {
+		session.insert(this);
+	}
+	public void setIndex(int i) {
+		index = i;
+	}
+	public int getIndex() {
+		return index;
+	}
+	public void setValue(String v) {
+		value = new Long(v);
+	}
+	public boolean isEmpty() {
+		return value == null;
+	}
+}

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LongColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,43 @@
+package org.drools.decisiontable.parser;
+
+/*
+ * Copyright 2005 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.
+ */
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * A column of type Long in a decision table
+ */
+public class LongColumn extends AbstractColumn {
+
+	public LongColumn(String n) {
+		super(n);
+	}
+
+	public void addValue(Map vars, Object value) {
+		vars.put(getName(), value);
+	}
+
+	public Cell createCell(Row row) {
+		return new LongCell(row, this);
+	}
+
+	public String getCellType() {
+		return "LongCell";
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Row.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Row.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/Row.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -34,7 +34,7 @@
     Row(int r, Column[] columns) {
         rowNum = r;
         for (int i = 0; i < columns.length; i++) {
-			cells.add(new Cell(this, columns[i]));
+			cells.add(columns[i].createCell(this));
 		}
     }
     
@@ -50,7 +50,7 @@
     boolean isEmpty() {
     	for (Iterator it = cells.iterator(); it.hasNext();) {
 			Cell cell = (Cell) it.next();
-			if (cell.getValue() != null)
+			if (!cell.isEmpty())
 			{
 				return false;
 			}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/RuleTemplate.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/RuleTemplate.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/RuleTemplate.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -19,6 +19,8 @@
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -28,67 +30,53 @@
 /**
  * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
  * 
- * A rule template made up of a name, the decision table columns required, 
- * the decision table columns that must be empty and the contents of the
- * rule.
+ * A rule template made up of a name, the decision table columns required, the
+ * decision table columns that must be empty and the contents of the rule.
  */
-public class RuleTemplate
-{
-    private String name;
-    private String contents;
-    private List columns;
-    private List notColumns;
+public class RuleTemplate {
+	private String name;
 
-    public RuleTemplate(final String n)
-    {
-        name = n;
-        columns = new ArrayList();
-        notColumns = new ArrayList();
-    }
+	private String contents;
 
-    public String getName()
-    {
-        return name;
-    }
+	private List columns;
 
-    public List getColumns()
-    {
-        return columns;
-    }
+	private TemplateContainer templateContainer;
 
-    public String[] getNotColumns()
-    {
-        return (String[]) notColumns.toArray(new String[notColumns.size()]);
-    }
-    
-    public String getContents()
-    {
-        return contents;
-    }
+	public RuleTemplate(final String n, final TemplateContainer tc) {
+		name = n;
+		columns = new ArrayList();
+		templateContainer = tc;
+	}
 
-    public void addColumn(String column)
-    {
-        if (column.startsWith("!"))
-        {
-            this.notColumns.add(column.substring(1));
-        }
-        else
-        {
-            this.columns.add(column);
-        }
-    }
+	public String getName() {
+		return name;
+	}
 
-    public void setContents(String contents)
-    {
-        this.contents = replaceOptionals(contents);
-    }
+	public List getColumns() {
+		return columns;
+	}
 
+	public String getContents() {
+		return contents;
+	}
+
+	public void addColumn(String columnString) {
+		TemplateColumn column = new DefaultTemplateColumn(templateContainer, columnString);
+		this.columns.add(column);
+	}
+
+	public void setContents(String contents) {
+		this.contents = replaceOptionals(contents);
+	}
+
 	/**
 	 * @see java.lang.Object#toString()
 	 */
 	public String toString() {
-	       return "RuleTemplate[name,"+this.name+"notColumns,"+this.notColumns+"contents,"+this.columns+"columns";
+		return "RuleTemplate[name," + this.name + "contents," + this.columns
+				+ "columns";
 	}
+
 	/*
 	 * Replace the optional columns in the rule contents with an if statement.
 	 * if (column is empty) do not show the line.
@@ -96,7 +84,7 @@
 	private String replaceOptionals(String contents) {
 		try {
 			final Pattern pattern = Pattern.compile("@\\{(.[^}]*)\\}");
-			final List columns = new ArrayList(getColumns());
+			final Collection columns = getColumnNames();
 			columns.add("row.rowNumber");
 			final BufferedReader reader = new BufferedReader(new StringReader(
 					contents));
@@ -109,12 +97,12 @@
 					final String c = matcher.group(1);
 					if (!columns.contains(c)) {
 						newLine.append("@if{").append(matcher.group(1)).append(
-								" != null} ");
+								" != null}");
 						optCols++;
 					}
 				}
 				newLine.append(line);
-				newLine.append(StringUtils.repeat(" @end{}", optCols));
+				newLine.append(StringUtils.repeat("@end{}", optCols));
 				newLine.append("\n");
 			}
 //			System.out.println("newLine: " + newLine);
@@ -124,5 +112,14 @@
 			throw new RuntimeException(e);
 		}
 	}
-    
+
+	private Collection getColumnNames() {
+		Collection columnNames = new ArrayList();
+		for (Iterator it = getColumns().iterator(); it.hasNext();) {
+			TemplateColumn column = (TemplateColumn) it.next();
+			columnNames.add(column.getName());
+		}
+		return columnNames;
+	}
+
 }

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringCell.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringCell.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringCell.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,80 @@
+package org.drools.decisiontable.parser;
+
+import java.util.Map;
+
+import org.drools.StatefulSession;
+import org.drools.util.StringUtils;
+
+/*
+ * Copyright 2005 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.
+ */
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * A cell in a decision table containing a String value
+ */
+public class StringCell implements Cell {
+	Row row;
+
+	String value;
+
+	Column column;
+
+	private int index;
+
+	public StringCell() {
+		
+	}
+	StringCell(Row r, Column c) {
+		row = r;
+		column = c;
+	}
+
+	public String toString() {
+		return "Cell[" + column + ": " + value + "]";
+	}
+
+	public Row getRow() {
+		return row;
+	}
+
+	public Column getColumn() {
+		return column;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void addValue(Map vars) {
+		vars.put(column.getName(), value);
+	}
+	public int getIndex() {
+		return index;
+	}
+	public void insert(StatefulSession session) {
+		session.insert(this);
+	}
+	public void setIndex(int i) {
+		index = i;
+	}
+	public void setValue(String v) {
+		value = v;
+	}
+	public boolean isEmpty() {
+		return StringUtils.isEmpty(value);
+	}
+}

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/StringColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,43 @@
+package org.drools.decisiontable.parser;
+
+/*
+ * Copyright 2005 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.
+ */
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * A column of type String in a decision table
+ */
+public class StringColumn extends AbstractColumn {
+
+	public StringColumn(String n) {
+		super(n);
+	}
+
+	public void addValue(Map vars, Object value) {
+		vars.put(getName(), value);
+	}
+
+	public Cell createCell(Row row) {
+		return new StringCell(row, this);
+	}
+
+	public String getCellType() {
+		return "StringCell";
+	}
+
+}

Added: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateColumn.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateColumn.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateColumn.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,32 @@
+package org.drools.decisiontable.parser;
+/*
+ * Copyright 2005 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.
+ */
+import org.drools.decisiontable.model.Rule;
+/**
+ * 
+ * @author <a href="mailto:stevearoonie at gmail.com">Steven Williams</a>
+ * 
+ * A column condition for a rule template to be generated.
+ */
+interface TemplateColumn {
+	void addCondition(final Rule rule);
+
+	String getName();
+
+	boolean isNotCondition();
+
+	String getCondition();
+}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateContainer.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/TemplateContainer.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -22,6 +22,8 @@
 	Map getTemplates();
 
 	Column[] getColumns();
+	
+	Column getColumn(String name);
 
 	String getHeader();
 

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetCompilerUnitTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetCompilerUnitTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/SpreadsheetCompilerUnitTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -74,7 +74,7 @@
                                               InputType.CSV );
         assertNotNull( drl );
 
-        System.out.println( drl );
+//        System.out.println( drl );
 
         assertTrue( drl.indexOf( "myObject.setIsValid(1, 2)" ) > 0 );
         assertTrue( drl.indexOf( "myObject.size () > 50" ) > 0 );

Deleted: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ArrayColumnTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ArrayColumnTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ArrayColumnTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -1,58 +0,0 @@
-package org.drools.decisiontable.parser;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-public class ArrayColumnTest extends TestCase {
-
-	public void testGetValueSingle() {
-		ArrayColumn ac = new ArrayColumn("array column");
-		String[] value = (String[]) ac.getValue("value1");
-		assertEquals(1, value.length);
-		assertEquals("value1", value[0]);
-	}
-	
-	public void testGetValueTrailingComma() {
-		ArrayColumn ac = new ArrayColumn("array column");
-		String[] value = (String[]) ac.getValue("value1,");
-		assertEquals(2, value.length);
-		assertEquals("value1", value[0]);
-		assertEquals("", value[1]);
-	}
-	
-	public void testGetValueLeadingComma() {
-		ArrayColumn ac = new ArrayColumn("array column");
-		String[] value = (String[]) ac.getValue(",value2");
-		assertEquals(2, value.length);
-		assertEquals("value2", value[1]);
-	}
-	
-	public void testGetValueMultiple() {
-		ArrayColumn ac = new ArrayColumn("array column");
-		String[] value = (String[]) ac.getValue("value1,value2,value3");
-		assertEquals(3, value.length);
-		assertEquals("value1", value[0]);
-		assertEquals("value2", value[1]);
-		assertEquals("value3", value[2]);
-	}
-	
-	public void testAddValueSingle() {
-		ArrayColumn ac = new ArrayColumn("array");
-		String[] value = new String[] { "value" };
-        Map vars = new HashMap();
-		ac.addValue(vars, value);
-		assertEquals("value", vars.get("array0"));
-	}
-
-	public void testAddValueMultiple() {
-		ArrayColumn ac = new ArrayColumn("array");
-		String[] value = new String[] { "value1", "value2" };
-        Map vars = new HashMap();
-		ac.addValue(vars, value);
-		assertEquals("value1", vars.get("array0"));
-		assertEquals("value2", vars.get("array1"));
-	}
-	
-}

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ColumnFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ColumnFactoryTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ColumnFactoryTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -7,15 +7,50 @@
 	public void testGetColumn() {
 		ColumnFactory f = new ColumnFactory();
 		Column column = f.getColumn("column");
-		assertTrue(!(column instanceof ArrayColumn));
+		assertTrue(column instanceof StringColumn);
 		assertEquals("column", column.getName());
 	}
+
+	public void testGetStringArrayColumn() {
+		ColumnFactory f = new ColumnFactory();
+		Column column = f.getColumn("column: String[]");
+		assertTrue(column instanceof ArrayColumn);
+		assertEquals("column", column.getName());
+		assertEquals("StringCell", ((ArrayColumn)column).getCellType());
+	}
 	
-	public void testGetArrayColumn() {
+	public void testGetLongArrayColumn() {
 		ColumnFactory f = new ColumnFactory();
+		Column column = f.getColumn("column: Long[]");
+		assertTrue(column instanceof ArrayColumn);
+		assertEquals("column", column.getName());
+		assertEquals("LongCell", ((ArrayColumn)column).getCellType());
+	}
+	
+	public void testGetArrayColumnSimple() {
+		ColumnFactory f = new ColumnFactory();
 		Column column = f.getColumn("column[]");
 		assertTrue(column instanceof ArrayColumn);
 		assertEquals("column", column.getName());
+		assertEquals("StringCell", ((ArrayColumn)column).getCellType());
+		
 	}
 
+	public void testGetLongColumn() {
+		ColumnFactory f = new ColumnFactory();
+		Column column = f.getColumn("column: Long");
+		assertTrue(column instanceof LongColumn);
+		assertEquals("column", column.getName());
+	}
+
+	public void testInvalidGetColumn() {
+		try {
+			ColumnFactory f = new ColumnFactory();
+			f.getColumn("column$");
+			fail("IllegalArgumentException expected");
+		} catch (IllegalArgumentException expected) {
+
+		}
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultGeneratorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultGeneratorTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultGeneratorTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -10,11 +10,34 @@
 
     protected void setUp() throws Exception {
         Map t = new HashMap();
-        RuleTemplate rt1 = new RuleTemplate("rt1");
+        TemplateContainer tc = new TemplateContainer() {
+
+			public Column getColumn(String name) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public Column[] getColumns() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public String getHeader() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public Map getTemplates() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+        	
+        };
+        RuleTemplate rt1 = new RuleTemplate("rt1", tc);
         rt1.setContents("Test template 1");
-        RuleTemplate rt2 = new RuleTemplate("rt2");
+        RuleTemplate rt2 = new RuleTemplate("rt2", tc);
         rt2.setContents("Test template 2");
-        RuleTemplate rt3 = new RuleTemplate("rt3");
+        RuleTemplate rt3 = new RuleTemplate("rt3", tc);
         rt3.addColumn("col1");
         rt3.addColumn("col2");
         rt3.setContents("@{row.rowNumber} @{col1} @{col2}");
@@ -38,12 +61,13 @@
 	}
 	
 	public void testAddColumns() {
-		Column[] columns = {new Column("col1"), new Column("col2")};
+		Column[] columns = {new StringColumn("col1"), new StringColumn("col2")};
 		Row r = new Row(1, columns);
 		r.getCell(0).setValue("value1");
 		r.getCell(1).setValue("value2");
-//		r.addCell(new Cell(r, new Column("col1"), "value1"));
-//		r.addCell(new Cell(r, new Column("col2"), "value2"));
+//		Row r = new Row(1);
+//		r.addCell(new StringCell(r, new StringColumn("col1"), "value1"));
+//		r.addCell(new StringCell(r, new StringColumn("col2"), "value2"));
 		g.generate("rt3", r);
 		String drl = g.getDrl();
 		assertEquals("1 value1 value2\n\n", drl);

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateContainerTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -7,135 +7,150 @@
 import junit.framework.TestCase;
 
 public class DefaultTemplateContainerTest extends TestCase {
-    public void testParseTemplate() {
-        InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_simple.drl" );
-        DefaultTemplateContainer t = new DefaultTemplateContainer( is );
-        assertEquals( "package This_is_a_ruleset;\n",
-                      t.getHeader() );
-        assertEquals( 1,
-                      t.getColumns().length );
-        assertEquals( "name",
-                      t.getColumns()[0].getName() );
-        Map templates = t.getTemplates();
-        assertEquals( 1,
-                      templates.size() );
-        RuleTemplate template = (RuleTemplate) templates.get( "template1" );
-        assertNotNull( template );
-        List columns = template.getColumns();
-        assertEquals( 1,
-                      columns.size() );
-        assertEquals( "name",
-                      columns.get( 0 ) );
-        String contents = template.getContents();
-        assertTrue( contents.startsWith( "rule \"How cool is @{name} @{row.rowNumber}\"" ) );
-        assertTrue( contents.endsWith( "then\nend\n" ) );
-    }
+	public void testParseTemplate() {
+		InputStream is = DefaultTemplateContainerTest.class
+				.getResourceAsStream("/templates/test_template_simple.drl");
+		DefaultTemplateContainer t = new DefaultTemplateContainer(is);
+		assertEquals("package This_is_a_ruleset;\n", t.getHeader());
+		assertEquals(1, t.getColumns().length);
+		assertEquals("name", t.getColumns()[0].getName());
+		Map templates = t.getTemplates();
+		assertEquals(1, templates.size());
+		RuleTemplate template = (RuleTemplate) templates.get("template1");
+		assertNotNull(template);
+		List columns = template.getColumns();
+		assertEquals(1, columns.size());
+		TemplateColumn column = (TemplateColumn) columns.get(0);
+		assertEquals("name", column.getName());
+		String contents = template.getContents();
+		assertTrue(contents
+				.startsWith("rule \"How cool is @{name} @{row.rowNumber}\""));
+		assertTrue(contents.endsWith("then\nend\n"));
+	}
 
-    public void testParseTemplateNoHeader() {
-        try {
-            InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_invalid1.drl" );
-            new DefaultTemplateContainer( is );
-            fail( "DecisionTableParseException expected" );
-        } catch ( DecisionTableParseException expected ) {
-            assertEquals( "Missing header",
-                          expected.getMessage() );
-        }
-    }
+	public void testParseTemplateConditions() {
+		InputStream is = DefaultTemplateContainerTest.class
+				.getResourceAsStream("/templates/test_template_conditions.drl");
+		DefaultTemplateContainer t = new DefaultTemplateContainer(is);
+		assertEquals("package This_is_a_ruleset;\n", t.getHeader());
+		assertEquals(1, t.getColumns().length);
+		assertEquals("name", t.getColumns()[0].getName());
+		Map templates = t.getTemplates();
+		assertEquals(1, templates.size());
+		RuleTemplate template = (RuleTemplate) templates.get("template1");
+		assertNotNull(template);
+		List columns = template.getColumns();
+		assertEquals(1, columns.size());
+		TemplateColumn templateColumn = (TemplateColumn) columns.get(0);
+		assertEquals("name", templateColumn.getName());
+		assertEquals("== \"name1\"", templateColumn.getCondition());
+		String contents = template.getContents();
+		assertTrue(contents
+				.startsWith("rule \"How cool is @{name} @{row.rowNumber}\""));
+		assertTrue(contents.endsWith("then\nend\n"));
+	}
 
-    public void testParseTemplateNoHeaderColumns() {
-        try {
-            InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_invalid2.drl" );
-            new DefaultTemplateContainer( is );
-            fail( "DecisionTableParseException expected" );
-        } catch ( DecisionTableParseException expected ) {
-            assertEquals( "Missing header columns",
-                          expected.getMessage() );
-        }
-    }
+	public void testParseTemplateNoHeader() {
+		try {
+			InputStream is = DefaultTemplateContainerTest.class
+					.getResourceAsStream("/templates/test_template_invalid1.drl");
+			new DefaultTemplateContainer(is);
+			fail("DecisionTableParseException expected");
+		} catch (DecisionTableParseException expected) {
+			assertEquals("Missing header", expected.getMessage());
+		}
+	}
 
-    public void testParseTemplateNoTemplates() {
-        try {
-            InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_invalid3.drl" );
-            new DefaultTemplateContainer( is );
-            fail( "DecisionTableParseException expected" );
-        } catch ( DecisionTableParseException expected ) {
-            assertEquals( "Missing templates",
-                          expected.getMessage() );
-        }
-    }
+	public void testParseTemplateNoHeaderColumns() {
+		try {
+			InputStream is = DefaultTemplateContainerTest.class
+					.getResourceAsStream("/templates/test_template_invalid2.drl");
+			new DefaultTemplateContainer(is);
+			fail("DecisionTableParseException expected");
+		} catch (DecisionTableParseException expected) {
+			assertEquals("Missing header columns", expected.getMessage());
+		}
+	}
 
-    public void testParseTemplateNoEndTemplate() {
-        try {
-            InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_invalid4.drl" );
-            new DefaultTemplateContainer( is );
-            fail( "DecisionTableParseException expected" );
-        } catch ( DecisionTableParseException expected ) {
-            assertEquals( "Missing end template",
-                          expected.getMessage() );
-        }
-    }
+	public void testParseTemplateNoTemplates() {
+		try {
+			InputStream is = DefaultTemplateContainerTest.class
+					.getResourceAsStream("/templates/test_template_invalid3.drl");
+			new DefaultTemplateContainer(is);
+			fail("DecisionTableParseException expected");
+		} catch (DecisionTableParseException expected) {
+			assertEquals("Missing templates", expected.getMessage());
+		}
+	}
 
-    public void testNullInputStream() {
-        try {
-            new DefaultTemplateContainer( (InputStream) null );
-            fail( "NullPointerException expected" );
-        } catch ( NullPointerException expected ) {
-        }
-    }
+	public void testParseTemplateNoEndTemplate() {
+		try {
+			InputStream is = DefaultTemplateContainerTest.class
+					.getResourceAsStream("/templates/test_template_invalid4.drl");
+			new DefaultTemplateContainer(is);
+			fail("DecisionTableParseException expected");
+		} catch (DecisionTableParseException expected) {
+			assertEquals("Missing end template", expected.getMessage());
+		}
+	}
 
-    public void testInvalidTemplatePath() {
-        try {
-            new DefaultTemplateContainer( "invalid path" );
-            fail( "NullPointerException expected" );
-        } catch ( NullPointerException expected ) {
-        }
-    }
+	public void testNullInputStream() {
+		try {
+			new DefaultTemplateContainer((InputStream) null);
+			fail("NullPointerException expected");
+		} catch (NullPointerException expected) {
+		}
+	}
 
-    public void testParseComplexTemplate() {
-        InputStream is = DefaultTemplateContainerTest.class.getResourceAsStream( "/templates/test_template_complex.drl" );
-        DefaultTemplateContainer t = new DefaultTemplateContainer( is );
-        assertEquals( "package This_is_a_ruleset;\n",
-                      t.getHeader() );
-        Column[] columnList = t.getColumns();
-        assertEquals( 5,
-                      columnList.length );
-        assertEquals( "first_name",
-                      columnList[0].getName() );
-        assertEquals( "last_name",
-                      columnList[1].getName() );
-        assertEquals( "age",
-                      columnList[2].getName() );
-        assertEquals( "city",
-                      columnList[3].getName() );
-        assertEquals( "phone",
-                      columnList[4].getName() );
-        Map templates = t.getTemplates();
-        assertEquals( 2,
-                      templates.size() );
+	public void testInvalidTemplatePath() {
+		try {
+			new DefaultTemplateContainer("invalid path");
+			fail("NullPointerException expected");
+		} catch (NullPointerException expected) {
+		}
+	}
 
-        RuleTemplate template = (RuleTemplate) templates.get( "template1" );
-        assertNotNull( template );
-        List columns = template.getColumns();
-        assertEquals( 1,
-                      columns.size() );
-        assertEquals( "first_name",
-                      columns.get( 0 ) );
-        String contents = template.getContents();
-        assertTrue( contents.startsWith( "rule \"How cool is @{first_name} @{row.rowNumber}\"" ) );
-        assertTrue( contents.endsWith( "then\nend\n" ) );
+	public void testParseComplexTemplate() {
+		InputStream is = DefaultTemplateContainerTest.class
+				.getResourceAsStream("/templates/test_template_complex.drl");
+		DefaultTemplateContainer t = new DefaultTemplateContainer(is);
+		assertEquals("package This_is_a_ruleset;\n", t.getHeader());
+		Column[] columnList = t.getColumns();
+		assertEquals(5, columnList.length);
+		assertEquals("first_name", columnList[0].getName());
+		assertEquals("last_name", columnList[1].getName());
+		assertEquals("age", columnList[2].getName());
+		assertEquals("city", columnList[3].getName());
+		assertEquals("phone", columnList[4].getName());
+		assertEquals(columnList[1], t.getColumn("last_name"));
+		Map templates = t.getTemplates();
+		assertEquals(2, templates.size());
 
-        template = (RuleTemplate) templates.get( "template2" );
-        assertNotNull( template );
-        columns = template.getColumns();
-        assertEquals( 2,
-                      columns.size() );
-        assertEquals( "first_name",
-                      columns.get( 0 ) );
-        assertEquals( "last_name",
-                      columns.get( 1 ) );
-        contents = template.getContents();
-        assertTrue( contents.startsWith( "rule \"How uncool is @{first_name} @{row.rowNumber}\"" ) );
-        assertTrue( contents.endsWith( "then\nend\n" ) );
+		RuleTemplate template = (RuleTemplate) templates.get("template1");
+		assertNotNull(template);
+		List columns = template.getColumns();
+		assertEquals(1, columns.size());
+		TemplateColumn column = (TemplateColumn) columns.get(0);
+		assertEquals("first_name", column.getName());
+		
+		String contents = template.getContents();
+		assertTrue(contents
+				.startsWith("rule \"How cool is @{first_name} @{row.rowNumber}\""));
+		assertTrue(contents.endsWith("then\nend\n"));
 
-    }
+		template = (RuleTemplate) templates.get("template2");
+		assertNotNull(template);
+		columns = template.getColumns();
+		assertEquals(2, columns.size());
+		column = (TemplateColumn) columns.get(0);
+		assertEquals("first_name", column.getName());
+		TemplateColumn column2 = (TemplateColumn) columns.get(1);
+		assertEquals("last_name", column2.getName());
+		contents = template.getContents();
+		assertTrue(contents
+				.startsWith("rule \"How uncool is @{first_name} @{row.rowNumber}\""));
+		assertTrue(contents.endsWith("then\nend\n"));
+		
+
+	}
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateRuleBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateRuleBaseTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/DefaultTemplateRuleBaseTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -9,18 +9,21 @@
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.rule.VariableConstraint;
 
 public class DefaultTemplateRuleBaseTest extends TestCase {
 
 	public void testSimpleTemplate() throws Exception
 	{
 		TemplateContainer tc = new TemplateContainer() {
-
+			private Column[] columns = new Column[] {
+					new LongColumn("column1"),
+					new LongColumn("column2"),
+					new StringColumn("column3")
+			};
+			
 			public Column[] getColumns() {
-				return new Column[] {
-						new Column("column1"),
-						new Column("column2")
-				};
+				return columns;
 			}
 
 			public String getHeader() {
@@ -29,12 +32,17 @@
 
 			public Map getTemplates() {
 				Map templates = new HashMap();
-				RuleTemplate ruleTemplate = new RuleTemplate("template1");
-				ruleTemplate.addColumn("column1");
-				ruleTemplate.addColumn("column2");
+				RuleTemplate ruleTemplate = new RuleTemplate("template1", this);
+				ruleTemplate.addColumn("column1 == 10");
+				ruleTemplate.addColumn("column2 < 5 || > 20");
+				ruleTemplate.addColumn("column3 == \"xyz\"");
 				templates.put("template1", ruleTemplate);
 				return templates;
 			}
+
+			public Column getColumn(String name) {
+				return columns[Integer.parseInt(name.substring(6)) - 1];
+			}
 			
 		};
 		DefaultTemplateRuleBase ruleBase = new DefaultTemplateRuleBase(tc);
@@ -48,14 +56,42 @@
 		GroupElement lhs = rules[0].getLhs();
 		//when
 		//  r : Row()
-		//  Cell(row == r, column == "column1")
-		//  Cell(row == r, column == "column2")
-		assertEquals(3, lhs.getChildren().size());
+		//  column1 : Column(name == "column1")
+		//  exists LongCell(row == r, column == column1, value == 10)
+		//  column2 : Column(name == "column2")
+		//  exists LongCell(row == r, column == column2, value < 5 | > 20)
+		//  column3 : Column(name == "column3")
+		//  exists StringCell(row == r, column == column3, value == "xyz")
+		assertEquals(7, lhs.getChildren().size());
 		org.drools.rule.Pattern pattern = (org.drools.rule.Pattern) lhs.getChildren().get(1);
-		LiteralConstraint constraint = (LiteralConstraint) pattern.getConstraints().get(1);
+		assertEquals(1, pattern.getConstraints().size());
+		LiteralConstraint constraint = (LiteralConstraint) pattern.getConstraints().get(0);
 		assertEquals("column1", constraint.getField().getValue());
-		pattern = (org.drools.rule.Pattern) lhs.getChildren().get(2);
-		constraint = (LiteralConstraint) pattern.getConstraints().get(1);
+		GroupElement exists = (GroupElement) lhs.getChildren().get(2);
+		pattern = (org.drools.rule.Pattern) exists.getChildren().get(0);
+		assertEquals(3, pattern.getConstraints().size());
+		VariableConstraint vconstraint = (VariableConstraint) pattern.getConstraints().get(1);
+		assertEquals(Column.class, vconstraint.getFieldExtractor().getExtractToClass());
+		assertEquals("column1", vconstraint.getRequiredDeclarations()[0].getIdentifier());
+		pattern = (org.drools.rule.Pattern) lhs.getChildren().get(3);
+		assertEquals(1, pattern.getConstraints().size());
+		constraint = (LiteralConstraint) pattern.getConstraints().get(0);
 		assertEquals("column2", constraint.getField().getValue());
+		exists = (GroupElement) lhs.getChildren().get(4);
+		pattern = (org.drools.rule.Pattern) exists.getChildren().get(0);
+		assertEquals(3, pattern.getConstraints().size());
+		vconstraint = (VariableConstraint) pattern.getConstraints().get(1);
+		assertEquals(Column.class, vconstraint.getFieldExtractor().getExtractToClass());
+		assertEquals("column2", vconstraint.getRequiredDeclarations()[0].getIdentifier());
+		pattern = (org.drools.rule.Pattern) lhs.getChildren().get(5);
+		assertEquals(1, pattern.getConstraints().size());
+		constraint = (LiteralConstraint) pattern.getConstraints().get(0);
+		assertEquals("column3", constraint.getField().getValue());
+		exists = (GroupElement) lhs.getChildren().get(6);
+		pattern = (org.drools.rule.Pattern) exists.getChildren().get(0);
+		assertEquals(3, pattern.getConstraints().size());
+		vconstraint = (VariableConstraint) pattern.getConstraints().get(1);
+		assertEquals(Column.class, vconstraint.getFieldExtractor().getExtractToClass());
+		assertEquals("column3", vconstraint.getRequiredDeclarations()[0].getIdentifier());
 	}
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ExternalSheetListenerTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -70,9 +70,9 @@
 			// first column is not part of the decision table
 			int i = 1;
 			for (Iterator it2 = cells.iterator(); it2.hasNext(); i++) {
-				Cell cell = (Cell) it2.next();
+				StringCell cell = (StringCell) it2.next();
 				assertEquals("row" + row.getRowNumber() + "col" + i, cell.getValue());
-				assertEquals("Pattern " + i, cell.getColumn());
+				assertEquals("Pattern " + i, cell.getColumn().getName());
 			}
 		}
 	}
@@ -126,7 +126,7 @@
 					if (fact instanceof Row) {
 						assertedRows.put(fact, currentRow);
 						currentRow = new ArrayList();
-					} else {
+					} else if (fact instanceof Cell) {
 						currentRow.add(fact);
 					}
 					return null;
@@ -406,8 +406,8 @@
 		}
 
 		public Column[] getColumns() {
-			return new Column[] { new Column("Pattern 1"),
-					new Column("Pattern 2"), new Column("Pattern 3") };
+			return new Column[] { new StringColumn("Pattern 1"),
+					new StringColumn("Pattern 2"), new StringColumn("Pattern 3") };
 		}
 
 		public String getHeader() {
@@ -424,6 +424,10 @@
 		public void setTemplates(Map templates) {
 
 		}
+
+		public Column getColumn(String name) {
+			return null;
+		}
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/RuleTemplateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/RuleTemplateTest.java	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/RuleTemplateTest.java	2007-10-01 14:32:06 UTC (rev 15482)
@@ -1,11 +1,70 @@
 package org.drools.decisiontable.parser;
 
+import java.util.List;
+import java.util.Map;
+
 import junit.framework.TestCase;
 
+import org.drools.util.StringUtils;
+
 public class RuleTemplateTest extends TestCase {
 	public void testSetContents() {
-		RuleTemplate rt = new RuleTemplate("rt1");
+		RuleTemplate rt = new RuleTemplate("rt1", getTemplateContainer());
 		rt.setContents("Test template");
 		assertEquals("Test template\n", rt.getContents());
 	}
+	
+	private TemplateContainer getTemplateContainer() {
+		return new TemplateContainer() {
+
+			public Column getColumn(String name) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public Column[] getColumns() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public String getHeader() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public Map getTemplates() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+			
+		};
+	}
+
+	public void testAddColumn() {
+		RuleTemplate rt = new RuleTemplate("rt1", getTemplateContainer());
+		rt.addColumn("StandardColumn");
+		rt.addColumn("!NotColumn");
+		rt.addColumn("ColumnCondition == \"test\"");
+		rt.addColumn("!NotColumnCondition == \"test2\"");
+		rt.addColumn("ArrayColumnCondition[0] == \"test2\"");
+		List columns = rt.getColumns();
+		assertEquals(5, columns.size());
+		TemplateColumn column1 = (TemplateColumn) columns.get(0);
+		assertEquals("StandardColumn", column1.getName());
+		assertFalse(column1.isNotCondition());
+		assertTrue(StringUtils.isEmpty(column1.getCondition()));
+		TemplateColumn column2 = (TemplateColumn) columns.get(1);
+		assertEquals("NotColumn", column2.getName());
+		assertTrue(column2.isNotCondition());
+		assertTrue(StringUtils.isEmpty(column2.getCondition()));
+		TemplateColumn column3 = (TemplateColumn) columns.get(2);
+		assertEquals("ColumnCondition", column3.getName());
+		assertFalse(column3.isNotCondition());
+		assertEquals("== \"test\"", column3.getCondition());
+		TemplateColumn column4 = (TemplateColumn) columns.get(3);
+		assertEquals("NotColumnCondition", column4.getName());
+		assertTrue(column4.isNotCondition());
+		assertEquals("== \"test2\"", column4.getCondition());
+		
+	}
 }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_integration.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_integration.drl	2007-10-01 11:59:51 UTC (rev 15481)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_integration.drl	2007-10-01 14:32:06 UTC (rev 15482)
@@ -1,5 +1,5 @@
 template header
-age
+age: Long
 type
 log
 
@@ -10,7 +10,7 @@
 global java.util.List list;
 
 template "cheesefans"
-age
+age > 21 && < 43
 type
 log
 

Added: labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_conditions.drl
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_conditions.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/resources/templates/test_template_conditions.drl	2007-10-01 14:32:06 UTC (rev 15482)
@@ -0,0 +1,14 @@
+template header
+name
+
+package This_is_a_ruleset;
+
+template "template1"
+name == "name1"
+rule "How cool is @{name} @{row.rowNumber}"
+	when
+		user.getName().equals("@{name}")
+	then
+end
+end template
+




More information about the jboss-svn-commits mailing list