[jboss-svn-commits] JBL Code SVN: r14337 - in labs/jbossrules/trunk/drools-decisiontables/src: main/java/org/drools/decisiontable/parser and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 17 18:44:15 EDT 2007


Author: fmeyer
Date: 2007-08-17 18:44:15 -0400 (Fri, 17 Aug 2007)
New Revision: 14337

Modified:
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/Rule.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ActionType.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultRuleSheetListener.java
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/xls/ExcelParser.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/RuleRenderTest.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ActionTypeTest.java
Log:
JBRULES-1077: Refactored Decision tables to have ruleflow-group attribute column

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/Rule.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/Rule.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -49,6 +49,8 @@
     private String           _activationGroup; // RIK: New variable to the Rule class (Set the
     // activation-group parameter of the rule tag)
 
+    private String           _ruleFlowGroup;
+
     private String           _agendaGroup;    // SJW: New variable to the Rule class (Set the
     // agenda-group parameter of the rule tag
 
@@ -111,6 +113,10 @@
             out.writeLine( "\tduration " + this._duration );
         }
 
+        if ( this._ruleFlowGroup != null ) {
+            out.writeLine( "\truleflow-group \"" + this._ruleFlowGroup + "\"" );
+        }
+
         out.writeLine( "\twhen" );
         renderDRL( this._lhs,
                    out );
@@ -232,6 +238,14 @@
         this._activationGroup = value;
     }
 
+    public void setRuleFlowGroup(final String value) {
+        this._ruleFlowGroup = value;
+    }
+
+    public String getRuleFlowGroup() {
+        return this._ruleFlowGroup;
+    }
+
     public String getActivationGroup() {
         return this._activationGroup;
     }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ActionType.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ActionType.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/ActionType.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -56,6 +56,8 @@
     //  AGENDA-GROUP is used to set the agenda-group parameter of a rule tag
     public static final int AGENDAGROUP     = 8;
 
+    public static final int RULEFLOWGROUP   = 9;
+
     int                     type;
 
     private SourceBuilder   sourceBuilder   = null;
@@ -90,6 +92,7 @@
                                         final String value,
                                         final int column,
                                         final int row) {
+
         if ( value.toUpperCase().startsWith( "U" ) || value.toUpperCase().equals( "NO-LOOP" ) ) // if the title cell
         // value starts with
         // "U" then put a
@@ -99,6 +102,10 @@
         {
             actionTypeMap.put( new Integer( column ),
                                new ActionType( ActionType.NOLOOP ) );
+        } else if ( value.toUpperCase().equals( "RULEFLOW-GROUP" ) || value.toUpperCase().startsWith( "R" ) ) {
+            actionTypeMap.put( new Integer( column ),
+                               new ActionType( ActionType.RULEFLOWGROUP ) );
+
         } else if ( value.toUpperCase().equals( "AGENDA-GROUP" ) ) // if the title cell
         // value equals "AGENDA-GROUP"
         // then put a

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultRuleSheetListener.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultRuleSheetListener.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/DefaultRuleSheetListener.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -61,36 +61,36 @@
 public class DefaultRuleSheetListener
     implements
     RuleSheetListener {
-    
+
     //keywords
-    public static final String      FUNCTIONS_TAG          = "Functions";
-    public static final String      IMPORT_TAG             = "Import";
-    public static final String      SEQUENTIAL_FLAG        = "Sequential";
-    public static final String      VARIABLES_TAG          = "Variables";
-    public static final String      RULE_TABLE_TAG         = "RuleTable";
-    public static final String      RULESET_TAG            = "RuleSet";
-    private static final int        ACTION_ROW             = 1;
-    private static final int		OBJECT_TYPE_ROW		   = 2;
-    private static final int        CODE_ROW               = 3;
-    private static final int        LABEL_ROW              = 4;
+    public static final String            FUNCTIONS_TAG          = "Functions";
+    public static final String            IMPORT_TAG             = "Import";
+    public static final String            SEQUENTIAL_FLAG        = "Sequential";
+    public static final String            VARIABLES_TAG          = "Variables";
+    public static final String            RULE_TABLE_TAG         = "RuleTable";
+    public static final String            RULESET_TAG            = "RuleSet";
+    private static final int              ACTION_ROW             = 1;
+    private static final int              OBJECT_TYPE_ROW        = 2;
+    private static final int              CODE_ROW               = 3;
+    private static final int              LABEL_ROW              = 4;
 
     //state machine variables for this parser
-    private boolean                 _isInRuleTable         = false;
-    private int                     _ruleRow;
-    private int                     _ruleStartColumn;
-    private int                     _ruleStartRow;
-    private Rule                    _currentRule;
-    private String                  _currentRulePrefix;
-    private boolean                 _currentSequentialFlag = false;                        // indicates that we are in sequential mode
+    private boolean                       _isInRuleTable         = false;
+    private int                           _ruleRow;
+    private int                           _ruleStartColumn;
+    private int                           _ruleStartRow;
+    private Rule                          _currentRule;
+    private String                        _currentRulePrefix;
+    private boolean                       _currentSequentialFlag = false;                        // indicates that we are in sequential mode
 
     //accumulated output
-    private Map                     _actions;
-    private final HashMap           _cellComments                = new HashMap();
-    private final List              _ruleList                    = new LinkedList();
-    
+    private Map                           _actions;
+    private final HashMap                 _cellComments          = new HashMap();
+    private final List                    _ruleList              = new LinkedList();
+
     //need to keep an ordered list of this to make conditions appear in the right order
-    private List                    sourceBuilders               = new ArrayList();
-    
+    private List                          sourceBuilders         = new ArrayList();
+
     private final PropertiesSheetListener _propertiesListner     = new PropertiesSheetListener();
 
     private final org.drools.rule.Package defaultPackage;
@@ -98,11 +98,11 @@
     public DefaultRuleSheetListener() {
         this( null );
     }
-    
-    public DefaultRuleSheetListener( final org.drools.rule.Package pkg ) {
+
+    public DefaultRuleSheetListener(final org.drools.rule.Package pkg) {
         this.defaultPackage = pkg;
     }
-    
+
     /* (non-Javadoc)
      * @see org.drools.decisiontable.parser.RuleSheetListener#getProperties()
      */
@@ -120,7 +120,7 @@
         final Package ruleset = buildRuleSet();
         return ruleset;
     }
-    
+
     /**
      * Add a new rule to the current list of rules
      * @param rule
@@ -132,7 +132,7 @@
     private Package buildRuleSet() {
         final String defaultPackageName = this.defaultPackage != null ? this.defaultPackage.getName() : "rule_table";
         final String rulesetName = getProperties().getProperty( DefaultRuleSheetListener.RULESET_TAG,
-                                                          defaultPackageName );
+                                                                defaultPackageName );
         final Package ruleset = new Package( rulesetName );
         for ( final Iterator it = this._ruleList.iterator(); it.hasNext(); ) {
             ruleset.addRule( (Rule) it.next() );
@@ -180,8 +180,7 @@
      */
     public void newRow(final int rowNumber,
                        final int columns) {
-        if (_currentRule != null)
-            flushRule();
+        if ( _currentRule != null ) flushRule();
         // nothing to see here... these aren't the droids your looking for..
         // move along...
     }
@@ -190,15 +189,15 @@
      * This makes sure that the rules have all their components added.
      * As when there are merged/spanned cells, they may be left out.
      */
-    private void flushRule() {        
+    private void flushRule() {
         for ( Iterator iter = sourceBuilders.iterator(); iter.hasNext(); ) {
             SourceBuilder src = (SourceBuilder) iter.next();
-            if (src.hasValues()) {
-                if (src instanceof LhsBuilder) {
+            if ( src.hasValues() ) {
+                if ( src instanceof LhsBuilder ) {
                     Condition con = new Condition();
                     con.setSnippet( src.getResult() );
                     _currentRule.addCondition( con );
-                } else if (src instanceof RhsBuilder ) {
+                } else if ( src instanceof RhsBuilder ) {
                     Consequence con = new Consequence();
                     con.setSnippet( src.getResult() );
                     _currentRule.addConsequence( con );
@@ -206,7 +205,7 @@
                 src.clearValues();
             }
         }
-        
+
     }
 
     /*
@@ -216,19 +215,19 @@
      */
     public void newCell(final int row,
                         final int column,
-                        final String value, 
+                        final String value,
                         int mergedColStart) {
         if ( isCellValueEmpty( value ) ) {
             return;
         }
-        if (_isInRuleTable && row == this._ruleStartRow) {
-        	return;
+        if ( _isInRuleTable && row == this._ruleStartRow ) {
+            return;
         }
         if ( this._isInRuleTable ) {
             processRuleCell( row,
                              column,
-                             value, 
-                             mergedColStart);
+                             value,
+                             mergedColStart );
         } else {
             processNonRuleCell( row,
                                 column,
@@ -242,7 +241,9 @@
     private void initRuleTable(final int row,
                                final int column,
                                final String value) {
-        preInitRuleTable(row, column, value);
+        preInitRuleTable( row,
+                          column,
+                          value );
         this._isInRuleTable = true;
         this._actions = new HashMap();
         this.sourceBuilders = new ArrayList();
@@ -258,7 +259,9 @@
         this._currentRule = createNewRuleForRow( this._ruleRow );
 
         this._ruleList.add( this._currentRule );
-        postInitRuleTable(row, column, value);
+        postInitRuleTable( row,
+                           column,
+                           value );
 
     }
 
@@ -293,7 +296,7 @@
         if ( this._isInRuleTable ) {
             this._currentSequentialFlag = false;
             this._isInRuleTable = false;
-            
+
         }
     }
 
@@ -306,8 +309,9 @@
                            value );
         } else {
             this._propertiesListner.newCell( row,
-                                        column,
-                                        value, SheetListener.NON_MERGED);
+                                             column,
+                                             value,
+                                             SheetListener.NON_MERGED );
         }
     }
 
@@ -341,11 +345,11 @@
                                              row );
                 break;
             case OBJECT_TYPE_ROW :
-            	objectTypeRow( row, 
+                objectTypeRow( row,
                                column,
                                value,
-                               mergedColStart);
-            	break;
+                               mergedColStart );
+                break;
             case CODE_ROW :
                 codeRow( row,
                          column,
@@ -355,11 +359,11 @@
                 labelRow( row,
                           column,
                           value );
-                break;                
+                break;
             default :
                 nextDataCell( row,
-                          column,
-                          value );
+                              column,
+                              value );
                 break;
         }
     }
@@ -373,57 +377,57 @@
      * A future refactor may be to move away from an "event" based listener.
      */
     private void objectTypeRow(final int row,
-                         final int column,
-                         final String value,
-                         final int mergedColStart) {
-        if (value.indexOf( "$param" ) > -1 || value.indexOf( "$1" ) > -1) {
-            throw new DecisionTableParseException("It looks like you have snippets in the row that is " +
-                                    "meant for column declarations." +
-                                    " Please insert an additional row before the snippets." +
-                                    " Row number: " + (row + 1));
+                               final int column,
+                               final String value,
+                               final int mergedColStart) {
+        if ( value.indexOf( "$param" ) > -1 || value.indexOf( "$1" ) > -1 ) {
+            throw new DecisionTableParseException( "It looks like you have snippets in the row that is " + "meant for column declarations." + " Please insert an additional row before the snippets." + " Row number: " + (row + 1) );
         }
-        ActionType action = getActionForColumn( row, column );
-        if (mergedColStart == SheetListener.NON_MERGED) {
-            if (action.type == ActionType.CONDITION) {
-                SourceBuilder src = new LhsBuilder(value);
-                action.setSourceBuilder(src);
-                this.sourceBuilders.add(src);
-                
-            } else if (action.type == ActionType.ACTION) {
-                SourceBuilder src = new RhsBuilder(value);
-                action.setSourceBuilder(src);
-                this.sourceBuilders.add(src);
+        ActionType action = getActionForColumn( row,
+                                                column );
+        if ( mergedColStart == SheetListener.NON_MERGED ) {
+            if ( action.type == ActionType.CONDITION ) {
+                SourceBuilder src = new LhsBuilder( value );
+                action.setSourceBuilder( src );
+                this.sourceBuilders.add( src );
+
+            } else if ( action.type == ActionType.ACTION ) {
+                SourceBuilder src = new RhsBuilder( value );
+                action.setSourceBuilder( src );
+                this.sourceBuilders.add( src );
             }
         } else {
-            if (column == mergedColStart) {
-                if (action.type == ActionType.CONDITION) {                    
-                    action.setSourceBuilder(new LhsBuilder(value));
+            if ( column == mergedColStart ) {
+                if ( action.type == ActionType.CONDITION ) {
+                    action.setSourceBuilder( new LhsBuilder( value ) );
                     this.sourceBuilders.add( action.getSourceBuilder() );
-                } else if (action.type == ActionType.ACTION) {                    
-                    action.setSourceBuilder(new RhsBuilder(value));
+                } else if ( action.type == ActionType.ACTION ) {
+                    action.setSourceBuilder( new RhsBuilder( value ) );
                     this.sourceBuilders.add( action.getSourceBuilder() );
                 }
             } else {
-                ActionType startOfMergeAction = getActionForColumn( row, mergedColStart );
+                ActionType startOfMergeAction = getActionForColumn( row,
+                                                                    mergedColStart );
                 action.setSourceBuilder( startOfMergeAction.getSourceBuilder() );
             }
-            
+
         }
     }
-    
+
     private void codeRow(final int row,
                          final int column,
                          final String value) {
-        final ActionType actionType = getActionForColumn( row, column );
-        if (actionType.getSourceBuilder() == null) {
-            if (actionType.type == ActionType.CONDITION) {
-                actionType.setSourceBuilder( new LhsBuilder(null) );
+        final ActionType actionType = getActionForColumn( row,
+                                                          column );
+        if ( actionType.getSourceBuilder() == null ) {
+            if ( actionType.type == ActionType.CONDITION ) {
+                actionType.setSourceBuilder( new LhsBuilder( null ) );
                 this.sourceBuilders.add( actionType.getSourceBuilder() );
-            } else if (actionType.type == ActionType.ACTION) {
-                actionType.setSourceBuilder( new RhsBuilder(null) );
+            } else if ( actionType.type == ActionType.ACTION ) {
+                actionType.setSourceBuilder( new RhsBuilder( null ) );
                 this.sourceBuilders.add( actionType.getSourceBuilder() );
-            } else if (actionType.type == ActionType.PRIORITY) {
-                actionType.setSourceBuilder( new LhsBuilder(null) );
+            } else if ( actionType.type == ActionType.PRIORITY ) {
+                actionType.setSourceBuilder( new LhsBuilder( null ) );
                 this.sourceBuilders.add( actionType.getSourceBuilder() );
             }
         }
@@ -431,21 +435,22 @@
             throw new DecisionTableParseException( "Code description - row:" + (row + 1) + " cell number:" + (column + 1) + " - does not contain any code specification. It should !" );
         }
 
-        actionType.addTemplate(column, value);
+        actionType.addTemplate( column,
+                                value );
     }
 
     private void labelRow(final int row,
                           final int column,
                           final String value) {
         final ActionType actionType = getActionForColumn( row,
-                                                    column );
+                                                          column );
 
         if ( !value.trim().equals( "" ) && (actionType.type == ActionType.ACTION || actionType.type == ActionType.CONDITION) ) {
             this._cellComments.put( new Integer( column ),
-                               value );
+                                    value );
         } else {
             this._cellComments.put( new Integer( column ),
-                               "From column: " + Rule.convertColNumToColName( column ) );
+                                    "From column: " + Rule.convertColNumToColName( column ) );
         }
     }
 
@@ -530,7 +535,10 @@
         // from the cell
         {
             this._currentRule.setNoLoop( value );
-        } else if ( actionType.type == ActionType.DURATION ) // if the actionType
+        } else if ( actionType.type == ActionType.RULEFLOWGROUP ) {
+            this._currentRule.setRuleFlowGroup( value );
+        } 
+        else if ( actionType.type == ActionType.DURATION ) // if the actionType
         // type is DURATION
         // then creates a
         // new duration tag
@@ -548,7 +556,6 @@
 
     private Rule createNewRuleForRow(final int row) {
 
-        
         Integer salience = null;
         if ( this._currentSequentialFlag ) {
             salience = new Integer( Rule.calcSalience( row ) );
@@ -556,15 +563,14 @@
         final int spreadsheetRow = row + 1;
         final String name = this._currentRulePrefix + "_" + spreadsheetRow;
         final Rule rule = new Rule( name,
-                              salience,
-                              spreadsheetRow );
+                                    salience,
+                                    spreadsheetRow );
         rule.setComment( "From row number: " + (spreadsheetRow) );
 
         return rule;
-        
+
     }
 
-
     // 08 - 16 - 2005 RIK: This function creates a new DURATION 
     private void createDuration(final int column,
                                 final String value,
@@ -576,7 +582,6 @@
         this._currentRule.setDuration( dur );
     }
 
-
     private boolean isCellValueEmpty(final String value) {
         return value == null || "".equals( value.trim() );
     }

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/xls/ExcelParser.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/xls/ExcelParser.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/parser/xls/ExcelParser.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -41,15 +41,12 @@
  */
 public class ExcelParser
     implements
-    DecisionTableParser
-    {
+    DecisionTableParser {
 
-    public static final String  DEFAULT_RULESHEET_NAME = "Decision Tables";
-    private Map                 _listners              = new HashMap();
-    private boolean _useFirstSheet;
+    public static final String DEFAULT_RULESHEET_NAME = "Decision Tables";
+    private Map                _listners              = new HashMap();
+    private boolean            _useFirstSheet;
 
-
-
     /**
      * Define a map of sheet name to listner handlers.
      * 
@@ -59,119 +56,136 @@
     public ExcelParser(final Map sheetListners) {
         this._listners = sheetListners;
     }
-    
+
     public ExcelParser(final List sheetListners) {
-    	this._listners.put(ExcelParser.DEFAULT_RULESHEET_NAME, sheetListners);
-    	this._useFirstSheet = true;
+        this._listners.put( ExcelParser.DEFAULT_RULESHEET_NAME,
+                            sheetListners );
+        this._useFirstSheet = true;
     }
 
     public ExcelParser(final SheetListener listener) {
-    	List listeners = new ArrayList();
-    	listeners.add(listener);
+        List listeners = new ArrayList();
+        listeners.add( listener );
         this._listners.put( ExcelParser.DEFAULT_RULESHEET_NAME,
-                       listeners );
+                            listeners );
         this._useFirstSheet = true;
     }
 
-	public void parseFile(InputStream inStream) {
-		try {
-			Workbook workbook = Workbook.getWorkbook(inStream);
-			
-			if (_useFirstSheet) {
-				Sheet sheet = workbook.getSheet(0);
-				processSheet(sheet, (List) _listners.get(DEFAULT_RULESHEET_NAME));
-			} else {
-				Set sheetNames = _listners.keySet();
-				for (Iterator iter = sheetNames.iterator(); iter.hasNext();) {
-					String sheetName = (String) iter.next();
-					Sheet sheet = workbook.getSheet(sheetName);
-					processSheet(sheet, (List)_listners.get(sheetName));
-					
-				}
-			}
-		} catch (BiffException e) {
+    public void parseFile(InputStream inStream) {
+        try {
+            Workbook workbook = Workbook.getWorkbook( inStream );
+
+            if ( _useFirstSheet ) {
+                Sheet sheet = workbook.getSheet( 0 );
+                processSheet( sheet,
+                              (List) _listners.get( DEFAULT_RULESHEET_NAME ) );
+            } else {
+                Set sheetNames = _listners.keySet();
+                for ( Iterator iter = sheetNames.iterator(); iter.hasNext(); ) {
+                    String sheetName = (String) iter.next();
+                    Sheet sheet = workbook.getSheet( sheetName );
+                    processSheet( sheet,
+                                  (List) _listners.get( sheetName ) );
+
+                }
+            }
+        } catch ( BiffException e ) {
             throw new DecisionTableParseException( "An error occured opening the workbook. ",
-                    e );
-			
-		} catch (IOException e) {
+                                                   e );
+
+        } catch ( IOException e ) {
             throw new DecisionTableParseException( "Failed to open Excel stream, " + "please check that the content is xls97 format.",
-                    e );
-		}
-		
-		
-	}
+                                                   e );
+        }
 
-	private void processSheet(Sheet sheet, List listeners) {
-		int maxRows = sheet.getRows();
-		
-		Range[] mergedRanges = sheet.getMergedCells();
+    }
 
-		
-		for(int i = 0; i < maxRows; i++) {
-			Cell[] row = sheet.getRow(i);
-			newRow(listeners, i, row.length);			
-			for (int cellNum = 0; cellNum < row.length; cellNum++) {
-				Cell cell = row[cellNum];
-				
-				Range merged = getRangeIfMerged(cell, mergedRanges);
-											
-				if (merged != null) {
+    private void processSheet(Sheet sheet,
+                              List listeners) {
+        int maxRows = sheet.getRows();
+
+        Range[] mergedRanges = sheet.getMergedCells();
+
+        for ( int i = 0; i < maxRows; i++ ) {
+            Cell[] row = sheet.getRow( i );
+            newRow( listeners,
+                    i,
+                    row.length );
+            for ( int cellNum = 0; cellNum < row.length; cellNum++ ) {
+                Cell cell = row[cellNum];
+
+                Range merged = getRangeIfMerged( cell,
+                                                 mergedRanges );
+
+                if ( merged != null ) {
                     Cell topLeft = merged.getTopLeft();
-					newCell(listeners, i, cellNum, topLeft.getContents(), topLeft.getColumn());
-				} else {
-					newCell(listeners, i, cellNum, cell.getContents(), SheetListener.NON_MERGED);
-				}
-			}
-		}
-        finishSheet(listeners);
-	}
-	
-    Range getRangeIfMerged(Cell cell, Range[] mergedRanges) {
-    	for (int i = 0; i < mergedRanges.length; i++) {
-			Range r = mergedRanges[i];
-			Cell topLeft = r.getTopLeft();
-			Cell bottomRight = r.getBottomRight();
-			if (cell.getRow() >= topLeft.getRow() 
-					&& cell.getRow() <= bottomRight.getRow()
-					&& cell.getColumn() >= topLeft.getColumn()
-					&& cell.getColumn() <= bottomRight.getColumn()
-					) {
-				return r;
-			}
-		}
-		return null;
-	}
+                    newCell( listeners,
+                             i,
+                             cellNum,
+                             topLeft.getContents(),
+                             topLeft.getColumn() );
+                } else {
+                    newCell( listeners,
+                             i,
+                             cellNum,
+                             cell.getContents(),
+                             SheetListener.NON_MERGED );
+                }
+            }
+        }
+        finishSheet( listeners );
+    }
 
-	static String removeTrailingZero(String stringVal) {
+    Range getRangeIfMerged(Cell cell,
+                           Range[] mergedRanges) {
+        for ( int i = 0; i < mergedRanges.length; i++ ) {
+            Range r = mergedRanges[i];
+            Cell topLeft = r.getTopLeft();
+            Cell bottomRight = r.getBottomRight();
+            if ( cell.getRow() >= topLeft.getRow() && cell.getRow() <= bottomRight.getRow() && cell.getColumn() >= topLeft.getColumn() && cell.getColumn() <= bottomRight.getColumn() ) {
+                return r;
+            }
+        }
+        return null;
+    }
+
+    static String removeTrailingZero(String stringVal) {
         if ( stringVal.endsWith( ".0" ) ) {
             stringVal = stringVal.substring( 0,
                                              stringVal.length() - 2 );
         }
         return stringVal;
     }
-	
-	private void finishSheet(List listeners) {
-		for (Iterator it = listeners.iterator(); it.hasNext();) {
-			SheetListener listener = (SheetListener) it.next();
-			listener.finishSheet();
-		}
-	}
-	private void newRow(List listeners, int row, int cols) {
-		for (Iterator it = listeners.iterator(); it.hasNext();) {
-			SheetListener listener = (SheetListener) it.next();
-			listener.newRow(row, cols);
-		}
-	}
-    public void newCell(List listeners, int row,
-            int column,
-            String value,
-            int mergedColStart) {
-    	for (Iterator it = listeners.iterator(); it.hasNext();) {
-			SheetListener listener = (SheetListener) it.next();
-			listener.newCell(row, column, value, mergedColStart);
-		}
+
+    private void finishSheet(List listeners) {
+        for ( Iterator it = listeners.iterator(); it.hasNext(); ) {
+            SheetListener listener = (SheetListener) it.next();
+            listener.finishSheet();
+        }
     }
 
+    private void newRow(List listeners,
+                        int row,
+                        int cols) {
+        for ( Iterator it = listeners.iterator(); it.hasNext(); ) {
+            SheetListener listener = (SheetListener) it.next();
+            listener.newRow( row,
+                             cols );
+        }
+    }
 
+    public void newCell(List listeners,
+                        int row,
+                        int column,
+                        String value,
+                        int mergedColStart) {
+        for ( Iterator it = listeners.iterator(); it.hasNext(); ) {
+            SheetListener listener = (SheetListener) it.next();
+            listener.newCell( row,
+                              column,
+                              value,
+                              mergedColStart );
+        }
+    }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/RuleRenderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/RuleRenderTest.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/RuleRenderTest.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -64,15 +64,17 @@
         
         rule.setActivationGroup( "foo" );
         rule.setNoLoop( "true" );
+        rule.setRuleFlowGroup( "ruleflowgroup" );
         
         DRLOutput out = new DRLOutput();
         rule.renderDRL( out );
         
         String result = out.toString();
+        
+        assertTrue(result.indexOf( "ruleflow-group \"ruleflowgroup\"" ) > -1 );
         assertTrue(result.indexOf( "no-loop true" ) > -1);
         assertTrue(result.indexOf( "activation-group \"foo\"" ) > -1);
         
-        
     }    
 
     public void testSalienceCalculator() {

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ActionTypeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ActionTypeTest.java	2007-08-17 20:18:41 UTC (rev 14336)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/parser/ActionTypeTest.java	2007-08-17 22:44:15 UTC (rev 14337)
@@ -36,10 +36,11 @@
         ActionType.addNewActionType( actionTypeMap, "NO-LOOP", 0, 1 );
         type = (ActionType) actionTypeMap.get( new Integer(0) );
         assertEquals(ActionType.NOLOOP, type.type);
-
         
-        
-        
+        actionTypeMap = new HashMap();
+        ActionType.addNewActionType( actionTypeMap, "RULEFLOW-GROUP", 0, 1 );
+        type = (ActionType) actionTypeMap.get( new Integer(0) );
+        assertEquals(ActionType.RULEFLOWGROUP, type.type);
     }
     
 }




More information about the jboss-svn-commits mailing list