[jboss-svn-commits] JBL Code SVN: r19576 - in labs/jbossrules/trunk/drools-decisiontables/src: test/java/org/drools/decisiontable/model and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Apr 15 14:13:49 EDT 2008


Author: tirelli
Date: 2008-04-15 14:13:49 -0400 (Tue, 15 Apr 2008)
New Revision: 19576

Modified:
   labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/SnippetBuilder.java
   labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/SnippetBuilderTest.java
Log:
JBRULES-1560: adding support to quoting COMMAs in decision tables

Modified: labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/SnippetBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/SnippetBuilder.java	2008-04-15 17:08:50 UTC (rev 19575)
+++ labs/jbossrules/trunk/drools-decisiontables/src/main/java/org/drools/decisiontable/model/SnippetBuilder.java	2008-04-15 18:13:49 UTC (rev 19576)
@@ -1,5 +1,10 @@
 package org.drools.decisiontable.model;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -35,7 +40,11 @@
 
     private static final String PARAM        = SnippetBuilder.PARAM_PREFIX + "param";
 
-    private String              _template;
+    private final String        _template;
+    
+    private final boolean       single;
+    
+    private final Pattern       delimiter;
 
     /**
      * @param snippetTemplate
@@ -43,7 +52,12 @@
      *            no "place holder" is present,
      */
     public SnippetBuilder(final String snippetTemplate) {
+        if ( snippetTemplate == null ) {
+            throw new RuntimeException( "Script template is null - check for missing script definition." );
+        }
         this._template = snippetTemplate;
+        this.single = this._template.indexOf( SnippetBuilder.PARAM_PREFIX + "1" ) < 0;
+        this.delimiter = Pattern.compile( "(.*?[^\\\\])(,|\\z)" );
     }
 
     /**
@@ -53,19 +67,15 @@
      * @return The final snippet.
      */
     public String build(final String cellValue) {
-        if ( this._template == null ) {
-            throw new RuntimeException( "Script template is null - check for missing script definition." );
-        }
-
-        if ( this._template.indexOf( SnippetBuilder.PARAM_PREFIX + "1" ) >= 0 ) {
+        if ( single ) {
+            return buildSingle( cellValue );
+        } else {
             return buildMulti( cellValue );
-        } else {
-            return buildSingle( cellValue );
         }
     }
 
     private String buildMulti(final String cellValue) {
-        final String[] cellVals = cellValue.split( "," );
+        final String[] cellVals = split( cellValue );
         String result = this._template;
 
         for ( int paramNumber = 0; paramNumber < cellVals.length; paramNumber++ ) {
@@ -78,6 +88,16 @@
         }
         return result;
     }
+    
+    private String[] split( String input ) {
+        Matcher m = delimiter.matcher( input );
+        List result = new ArrayList();
+        while( m.find() ) {
+            result.add( m.group( 1 ).replaceAll( "\\\\,", "," ) );
+        }
+        return (String[]) result.toArray( new String[result.size()] );
+        
+    }
 
     /**
      * @param cellValue

Modified: labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/SnippetBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/SnippetBuilderTest.java	2008-04-15 17:08:50 UTC (rev 19575)
+++ labs/jbossrules/trunk/drools-decisiontables/src/test/java/org/drools/decisiontable/model/SnippetBuilderTest.java	2008-04-15 18:13:49 UTC (rev 19576)
@@ -84,4 +84,13 @@
         
     }
 
+    public void testMultiPlaceHolderEscapedComma() {
+        final String snippet = "rulesOutputRouting.set( $1, $2, $3, $4, $5 );";
+        final SnippetBuilder snip = new SnippetBuilder( snippet );
+        final String result = snip.build( "\"80\",\"Department Manager\",toa.getPersonExpense().getEntityCode(\"Part Of\"\\,\"Office\"),10004,30" );
+        assertEquals( "rulesOutputRouting.set( \"80\", \"Department Manager\", toa.getPersonExpense().getEntityCode(\"Part Of\",\"Office\"), 10004, 30 );",
+                      result );
+
+    }
+
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list