[jboss-svn-commits] JBL Code SVN: r19595 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 16 13:53:59 EDT 2008


Author: tirelli
Date: 2008-04-16 13:53:59 -0400 (Wed, 16 Apr 2008)
New Revision: 19595

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/benchmark/manners/manners.drl
Log:
Preserving line breaks on modify block

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2008-04-16 17:48:47 UTC (rev 19594)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2008-04-16 17:53:59 UTC (rev 19595)
@@ -23,6 +23,8 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.drools.compiler.DescrBuildError;
 import org.drools.compiler.Dialect;
@@ -44,6 +46,8 @@
     implements
     ConsequenceBuilder {
 
+    private final Pattern lineBreakFinder = Pattern.compile( "\\r\\n|\\r|\\n" ); 
+
     /* (non-Javadoc)
      * @see org.drools.semantics.java.builder.ConsequenceBuilder#buildConsequence(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.lang.descr.RuleDescr)
      */
@@ -180,32 +184,59 @@
                 return null;
             }
             String retString = ClassUtils.canonicalName( ret );
-            
+
             // adding modify expression
-            consequence.append( "{\n" );
+            consequence.append( "{ " );
             consequence.append( retString );
             consequence.append( " __obj__ = (" );
             consequence.append( retString );
             consequence.append( ") " );
             consequence.append( d.getModifyExpression() );
-            consequence.append( ";\n" );
+            consequence.append( "; " );
             // adding the modifyRetract call:
-            consequence.append( "modifyRetract( __obj__ );\n" );
-            
+            consequence.append( "modifyRetract( __obj__ ); " );
 
+            // the following is a hack to preserve line breaks.
+            String originalBlock = originalCode.substring( d.getStart()-1,
+                                                           d.getEnd() );
+            int end = originalBlock.indexOf( "{" );
+            addLineBreaks( consequence,
+                           originalBlock.substring( 0,
+                                                    end ) );
+
+            int start = end+1;
             // adding each of the expressions:
             for ( Iterator exprIt = d.getExpressions().iterator(); exprIt.hasNext(); ) {
+                String exprStr = (String) exprIt.next();
+                end = originalBlock.indexOf( exprStr,
+                                             start );
+                addLineBreaks( consequence,
+                               originalBlock.substring( start,
+                                                        end ) );
                 consequence.append( "__obj__." );
-                consequence.append( exprIt.next() );
-                consequence.append( ";\n" );
+                consequence.append( exprStr );
+                consequence.append( "; " );
+                start = end + exprStr.length();
             }
             // adding the modifyInsert call:
-            consequence.append( "modifyInsert( __obj__ );" );
-            consequence.append( "}\n" );
+            addLineBreaks( consequence, originalBlock.substring( end ) );
+            consequence.append( "modifyInsert( __obj__ ); }" );
         }
         consequence.append( originalCode.substring( lastAdded ) );
 
         return consequence.toString();
     }
 
+    /**
+     * @param consequence
+     * @param chunk
+     */
+    private void addLineBreaks(StringBuffer consequence,
+                               String chunk) {
+        Matcher m = lineBreakFinder.matcher( chunk );
+        while ( m.find() ) {
+            consequence.append( "\n" );
+        }
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2008-04-16 17:48:47 UTC (rev 19594)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2008-04-16 17:53:59 UTC (rev 19595)
@@ -469,7 +469,6 @@
         ExpressionCompiler compiler = new ExpressionCompiler( text.trim() );
 
         if ( MVELDebugHandler.isDebugMode() ) {
-            System.out.println( "Source before MVEL Compilation:\n" + text.trim() );
             compiler.setDebugSymbols( true );
         }
 

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/benchmark/manners/manners.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/benchmark/manners/manners.drl	2008-04-16 17:48:47 UTC (rev 19594)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-drl/src/main/rules/org/drools/benchmark/manners/manners.drl	2008-04-16 17:53:59 UTC (rev 19595)
@@ -18,7 +18,9 @@
 
 		System.out.println( "assign first seat :  " + seating + " : " + path );
 
-        modify( context ) { setState( Context.ASSIGN_SEATS ) } 
+        modify( context ) {
+            setState( Context.ASSIGN_SEATS )
+        } 
 end
 
 rule findSeating




More information about the jboss-svn-commits mailing list