[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