[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