Index: drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf =================================================================== --- drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf (revision 14156) +++ drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf (working copy) @@ -10,3 +10,5 @@ drools.accumulate.function.min = org.drools.base.accumulators.MinAccumulateFunction drools.accumulate.function.count = org.drools.base.accumulators.CountAccumulateFunction drools.accumulate.function.sum = org.drools.base.accumulators.SumAccumulateFunction +drools.accumulate.function.countInteger = org.drools.base.accumulators.CountIntegerAccumulateFunction +drools.accumulate.function.sumInteger = org.drools.base.accumulators.SumIntegerAccumulateFunction Index: drools-core/src/main/java/org/drools/base/accumulators/CountIntegerAccumulateFunction.java =================================================================== --- drools-core/src/main/java/org/drools/base/accumulators/CountIntegerAccumulateFunction.java (revision 0) +++ drools-core/src/main/java/org/drools/base/accumulators/CountIntegerAccumulateFunction.java (revision 0) @@ -0,0 +1,63 @@ +package org.drools.base.accumulators; + +/** + * An implementation of an accumulator capable of counting occurences + * + * @author etirelli + * + */ +public class CountIntegerAccumulateFunction implements AccumulateFunction { + + protected static class CountData { + public int count = 0; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#createContext() + */ + public Object createContext() { + return new CountIntegerAccumulateFunction.CountData(); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object) + */ + public void init(Object context) throws Exception { + CountIntegerAccumulateFunction.CountData data = (CountIntegerAccumulateFunction.CountData) context; + data.count = 0; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object) + */ + public void accumulate(Object context, + Object value) { + CountIntegerAccumulateFunction.CountData data = (CountIntegerAccumulateFunction.CountData) context; + data.count++; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object) + */ + public void reverse(Object context, + Object value) throws Exception { + CountIntegerAccumulateFunction.CountData data = (CountIntegerAccumulateFunction.CountData) context; + data.count--; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object) + */ + public Object getResult(Object context) throws Exception { + CountIntegerAccumulateFunction.CountData data = (CountIntegerAccumulateFunction.CountData) context; + return Integer.valueOf( data.count ); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#supportsReverse() + */ + public boolean supportsReverse() { + return true; + } + +} Index: drools-core/src/main/java/org/drools/base/accumulators/SumIntegerAccumulateFunction.java =================================================================== --- drools-core/src/main/java/org/drools/base/accumulators/SumIntegerAccumulateFunction.java (revision 0) +++ drools-core/src/main/java/org/drools/base/accumulators/SumIntegerAccumulateFunction.java (revision 0) @@ -0,0 +1,63 @@ +package org.drools.base.accumulators; + +/** + * An implementation of an accumulator capable of calculating sum of values + * + * @author etirelli + * + */ +public class SumIntegerAccumulateFunction implements AccumulateFunction { + + protected static class SumData { + public int total = 0; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#createContext() + */ + public Object createContext() { + return new SumIntegerAccumulateFunction.SumData(); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object) + */ + public void init(Object context) throws Exception { + SumIntegerAccumulateFunction.SumData data = (SumIntegerAccumulateFunction.SumData) context; + data.total = 0; + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object) + */ + public void accumulate(Object context, + Object value) { + SumIntegerAccumulateFunction.SumData data = (SumIntegerAccumulateFunction.SumData) context; + data.total += ((Number) value).intValue(); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object) + */ + public void reverse(Object context, + Object value) throws Exception { + SumIntegerAccumulateFunction.SumData data = (SumIntegerAccumulateFunction.SumData) context; + data.total -= ((Number) value).intValue(); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object) + */ + public Object getResult(Object context) throws Exception { + SumIntegerAccumulateFunction.SumData data = (SumIntegerAccumulateFunction.SumData) context; + return Integer.valueOf( data.total ); + } + + /* (non-Javadoc) + * @see org.drools.base.accumulators.AccumulateFunction#supportsReverse() + */ + public boolean supportsReverse() { + return true; + } + +}