[jboss-svn-commits] JBL Code SVN: r10599 - in labs/jbossrules/trunk/drools-clips/src: main/java/org/drools/clp/functions and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 28 18:57:45 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-03-28 18:57:44 -0400 (Wed, 28 Mar 2007)
New Revision: 10599

Added:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/DivideFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MinusFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PlusFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrognFunction.java
Removed:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/AddFunction.java
Modified:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/BuiltinFunctions.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MultiplyFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/AddFunctionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/BlockExecutionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/CompiledFunctionsTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/DeffunctionTest.java
Log:
JBRULES-720 Clips Parser
-Added functions Divide, Minus, Multiply and Progn

Modified: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/BuiltinFunctions.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/BuiltinFunctions.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/BuiltinFunctions.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -17,24 +17,15 @@
 
     private BuiltinFunctions() {
         this.functions = new HashMap();
-
-        try {
-            loadFunctions();
-        } catch ( IOException e ) {
-            throw new RuntimeException( e );
-        } catch ( ClassNotFoundException e ) {
-            throw new RuntimeException( e );
-        }
+        loadFunctions();
     }
 
-    public void loadFunctions() throws IOException,
-                               ClassNotFoundException {
+    public void loadFunctions()  {
         BufferedReader reader = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "functions.conf" ) ) );
         loadFunctions( reader );
     }
 
-    public void loadFunctions(BufferedReader reader) throws IOException,
-                                                    ClassNotFoundException {
+    public void loadFunctions(BufferedReader reader) {
         String line = null;
 
         try {
@@ -47,10 +38,8 @@
                 this.functions.put( function.getName(),
                                     function );
             }
-        } catch ( IllegalAccessException e ) {
-            throw new RuntimeException( e );
-        } catch ( InstantiationException e ) {
-            throw new RuntimeException( e );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "unable to find function '" + line +"'" );
         }
     }
 

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/AddFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/AddFunction.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/AddFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -1,33 +0,0 @@
-package org.drools.clp.functions;
-
-import java.math.BigDecimal;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-
-public class AddFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "+";
-
-    public AddFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-
-        BigDecimal bdval = new BigDecimal( 0 );
-        for ( int i = 0, length = args.length; i < length; i++ ) {
-            bdval = bdval.add( args[i].getBigDecimalValue( context ) );
-        }
-
-        return new ObjectValueHandler( bdval );
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/DivideFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/DivideFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/DivideFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -0,0 +1,33 @@
+package org.drools.clp.functions;
+
+import java.math.BigDecimal;
+
+import org.drools.clp.ExecutionContext;
+import org.drools.clp.Function;
+import org.drools.clp.ValueHandler;
+import org.drools.clp.valuehandlers.ObjectValueHandler;
+
+public class DivideFunction extends BaseFunction
+    implements
+    Function {
+    private static final String name = "/";
+
+    public DivideFunction() {
+
+    }
+
+    public ValueHandler execute(ValueHandler[] args,
+                                ExecutionContext context) {
+        BigDecimal bdval = args[0].getBigDecimalValue( context );
+        for ( int i = 1, length = args.length; i < length; i++ ) {
+            bdval = bdval.divide( args[i].getBigDecimalValue( context ), BigDecimal.ROUND_DOWN );
+        }
+
+        return new ObjectValueHandler( bdval );   
+    }
+
+    public String getName() {
+        return name;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MinusFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MinusFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MinusFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -0,0 +1,32 @@
+package org.drools.clp.functions;
+
+import java.math.BigDecimal;
+
+import org.drools.clp.ExecutionContext;
+import org.drools.clp.Function;
+import org.drools.clp.ValueHandler;
+import org.drools.clp.valuehandlers.ObjectValueHandler;
+
+public class MinusFunction extends BaseFunction
+    implements
+    Function {
+    private static final String name = "-";
+
+    public MinusFunction() {
+
+    }
+
+    public ValueHandler execute(ValueHandler[] args,
+                                ExecutionContext context) {
+        BigDecimal bdval = args[0].getBigDecimalValue( context );
+        for ( int i = 1, length = args.length; i < length; i++ ) {
+            bdval = bdval.subtract( args[i].getBigDecimalValue( context ) );
+        }
+
+        return new ObjectValueHandler( bdval );
+    }
+
+    public String getName() {
+        return name;
+    }
+}

Modified: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MultiplyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MultiplyFunction.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MultiplyFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -17,12 +17,13 @@
     }
 
     public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        BigDecimal bdval = new BigDecimal( 0 );
-        for ( int i = 0, length = args.length; i < length; i++ ) {
+                                ExecutionContext context) {        
+        BigDecimal bdval = args[0].getBigDecimalValue( context );
+        for ( int i = 1, length = args.length; i < length; i++ ) {
             bdval = bdval.multiply( args[i].getBigDecimalValue( context ) );
         }
-        return new ObjectValueHandler( bdval );
+
+        return new ObjectValueHandler( bdval );        
     }
 
     public String getName() {

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PlusFunction.java (from rev 10555, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/AddFunction.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PlusFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PlusFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -0,0 +1,32 @@
+package org.drools.clp.functions;
+
+import java.math.BigDecimal;
+
+import org.drools.clp.ExecutionContext;
+import org.drools.clp.Function;
+import org.drools.clp.ValueHandler;
+import org.drools.clp.valuehandlers.ObjectValueHandler;
+
+public class PlusFunction extends BaseFunction
+    implements
+    Function {
+    private static final String name = "+";
+
+    public PlusFunction() {
+
+    }
+
+    public ValueHandler execute(ValueHandler[] args,
+                                ExecutionContext context) {
+        BigDecimal bdval = args[0].getBigDecimalValue( context );
+        for ( int i = 1, length = args.length; i < length; i++ ) {
+            bdval = bdval.add( args[i].getBigDecimalValue( context ) );
+        }
+
+        return new ObjectValueHandler( bdval );
+    }
+
+    public String getName() {
+        return name;
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrognFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrognFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrognFunction.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -0,0 +1,30 @@
+package org.drools.clp.functions;
+
+import org.drools.clp.ExecutionContext;
+import org.drools.clp.Function;
+import org.drools.clp.ValueHandler;
+
+public class PrognFunction extends BaseFunction
+    implements
+    Function {
+    private static final String name = "progn";
+
+    public PrognFunction() {
+
+    }
+
+    public ValueHandler execute(ValueHandler[] args,
+                                ExecutionContext context) {
+
+        ValueHandler result = null;
+        for ( int i = 0, length = args.length; i < length; i++ ) {
+            result = args[i].getValue( context );
+        }
+
+        return result;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

Modified: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf	2007-03-28 22:57:44 UTC (rev 10599)
@@ -11,13 +11,17 @@
 org.drools.clp.functions.SwitchDefaultFunction
 org.drools.clp.functions.WhileFunction
 org.drools.clp.functions.ForeachFunction
+org.drools.clp.functions.PrognFunction
 
 #math comparators
 org.drools.clp.functions.LessThanFunction
 org.drools.clp.functions.EqFunction
 
 #math operators
-org.drools.clp.functions.AddFunction
+org.drools.clp.functions.PlusFunction
+org.drools.clp.functions.MinusFunction
+org.drools.clp.functions.DivideFunction
+org.drools.clp.functions.MultiplyFunction
 
 #io
 org.drools.clp.functions.PrintoutFunction

Modified: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/AddFunctionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/AddFunctionTest.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/AddFunctionTest.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -7,7 +7,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassObjectType;
-import org.drools.clp.functions.AddFunction;
+import org.drools.clp.functions.PlusFunction;
 import org.drools.clp.valuehandlers.CLPLocalDeclarationVariable;
 import org.drools.clp.valuehandlers.CLPPreviousDeclarationVariable;
 import org.drools.clp.valuehandlers.FunctionCaller;
@@ -30,7 +30,7 @@
         ValueHandler val2 = new ObjectValueHandler( new BigDecimal( 10 ) );
 
         ValueHandler[] params = new ValueHandler[]{val1, val2};
-        AddFunction add = new AddFunction();
+        PlusFunction add = new PlusFunction();
 
         assertEquals( new BigDecimal( 20 ),
                       add.execute( params,
@@ -42,13 +42,13 @@
         ValueHandler val2 = new ObjectValueHandler( new BigDecimal( 10 ) );
         ValueHandler val3 = new ObjectValueHandler( new BigDecimal( 10 ) );
 
-        FunctionCaller functionValue = new FunctionCaller( new AddFunction() );
+        FunctionCaller functionValue = new FunctionCaller( new PlusFunction() );
         functionValue.addParameter( val1 );
         functionValue.addParameter( val2 );
 
         ValueHandler[] params = new ValueHandler[]{val3, functionValue};
 
-        AddFunction add = new AddFunction();
+        PlusFunction add = new PlusFunction();
 
         assertEquals( new BigDecimal( 30 ),
                       add.execute( params,
@@ -99,11 +99,11 @@
         context.setLocalVariable( 0,
                                   new ObjectValueHandler( new BigDecimal( 10 ) ) );
 
-        FunctionCaller functionValue = new FunctionCaller( new AddFunction() );
+        FunctionCaller functionValue = new FunctionCaller( new PlusFunction() );
         functionValue.addParameter( val1 );
         functionValue.addParameter( val2 );
 
-        AddFunction add = new AddFunction();
+        PlusFunction add = new PlusFunction();
 
         FunctionCaller f = new FunctionCaller( add );
         f.addParameter( val3 );

Modified: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/BlockExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/BlockExecutionTest.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/BlockExecutionTest.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -5,7 +5,7 @@
 import junit.framework.TestCase;
 
 import org.drools.Person;
-import org.drools.clp.functions.AddFunction;
+import org.drools.clp.functions.PlusFunction;
 import org.drools.clp.functions.BindFunction;
 import org.drools.clp.functions.ModifyFunction;
 import org.drools.clp.valuehandlers.FunctionCaller;
@@ -25,7 +25,7 @@
         BlockExecutionEngine engine = new BlockExecutionEngine();        
         ExecutionBuildContext build = new ExecutionBuildContext(engine, this.registry );                
         
-        FunctionCaller addCaller = new FunctionCaller( new AddFunction() );
+        FunctionCaller addCaller = new FunctionCaller( new PlusFunction() );
         addCaller.addParameter( new ObjectValueHandler( new BigDecimal( 20) ) );
         addCaller.addParameter( new LongValueHandler( "11" ) );
                 

Modified: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/CompiledFunctionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/CompiledFunctionsTest.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/CompiledFunctionsTest.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -246,10 +246,22 @@
                                   new ObjectValueHandler( "brie" ) );
         engine.execute( context );        
         assertEquals( "default" ,
-                      context.getLocalVariable( 1 ).getObject( context ) );          
+                      context.getLocalVariable( 1 ).getObject( context ) );                          
+    }    
+    
+    public void testProgn() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?n 2) (while (progn (bind ?n (* ?n ?n)) (< ?n 1000)) do (printout d ?n) )" ).rhs();
+        ExecutionContext context = new ExecutionContext( null,
+                                                         null,
+                                                         2 );
         
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();              
+        context.addPrintoutRouter( "d", new PrintStream(bais) );                                
+
+        engine.execute( context );
         
-    }    
+        assertEquals( "416256", new String( bais.toByteArray() ) );          
+    }
 
     private CLPParser parse(final String text) throws Exception {
         this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );

Modified: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/DeffunctionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/DeffunctionTest.java	2007-03-28 20:15:31 UTC (rev 10598)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/DeffunctionTest.java	2007-03-28 22:57:44 UTC (rev 10599)
@@ -2,7 +2,7 @@
 
 import java.math.BigDecimal;
 
-import org.drools.clp.functions.AddFunction;
+import org.drools.clp.functions.PlusFunction;
 import org.drools.clp.valuehandlers.FunctionCaller;
 import org.drools.clp.valuehandlers.LocalVariableValue;
 import org.drools.clp.valuehandlers.LongValueHandler;
@@ -19,7 +19,7 @@
         ValueHandler b = new LocalVariableValue("b", 1);
         function.addParameter( b );
         
-        Function add = new AddFunction();
+        Function add = new PlusFunction();
         FunctionCaller caller = new FunctionCaller(add);
         caller.addParameter( a );
         caller.addParameter( b );




More information about the jboss-svn-commits mailing list