[jboss-svn-commits] JBL Code SVN: r5192 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo main/java/org/drools/reteoo/beta main/java/org/drools/rule main/java/org/drools/spi test/java/org/drools/examples/manners test/java/org/drools/examples/waltz test/java/org/drools/leaps test/java/org/drools/reteoo test/java/org/drools/rule
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jul 20 10:48:37 EDT 2006
Author: mark.proctor at jboss.com
Date: 2006-07-20 10:48:11 -0400 (Thu, 20 Jul 2006)
New Revision: 5192
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java
Log:
JBRULES-333
-Added new Restriction paradigm, so each FieldConstraint can have multiple restrictions
-Compiler is currently broken, this is being committed so that Mic can fix the parser.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -349,9 +349,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.STRING_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
final AlphaNode alphaNode = new AlphaNode( this.id++,
this.sinklistFactory.newObjectSinkList( AlphaNode.class ),
@@ -435,7 +435,7 @@
}
final FieldConstraint fieldConstraint = (FieldConstraint) object;
- if ( fieldConstraint instanceof LiteralConstraint ) {
+ if ( fieldConstraint.getRequiredDeclarations().length == 0 ) {
this.objectSource = attachNode( new AlphaNode( this.id++,
this.sinklistFactory.newObjectSinkList( AlphaNode.class ),
fieldConstraint,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -20,7 +20,7 @@
import org.drools.RuleBaseConfiguration;
import org.drools.common.BetaNodeBinder;
-import org.drools.rule.BoundVariableConstraint;
+import org.drools.rule.VariableConstraint;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldConstraint;
@@ -53,8 +53,8 @@
final FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null;
if ( (constraints != null) && (config.getBooleanProperty( RuleBaseConfiguration.PROPERTY_INDEX_LEFT_BETA_MEMORY )) ) {
for ( int i = 0; i < constraints.length; i++ ) {
- if ( constraints[i] instanceof BoundVariableConstraint ) {
- final BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i];
+ if ( constraints[i] instanceof VariableConstraint ) {
+ final VariableConstraint bvc = (VariableConstraint) constraints[i];
BetaLeftMemory innerMemory = null;
switch ( bvc.getEvaluator().getType() ) {
case Evaluator.BOOLEAN_TYPE :
@@ -118,8 +118,8 @@
final FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null;
if ( (constraints != null) && (config.getBooleanProperty( RuleBaseConfiguration.PROPERTY_INDEX_RIGHT_BETA_MEMORY )) ) {
for ( int i = 0; i < constraints.length; i++ ) {
- if ( constraints[i] instanceof BoundVariableConstraint ) {
- final BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i];
+ if ( constraints[i] instanceof VariableConstraint ) {
+ final VariableConstraint bvc = (VariableConstraint) constraints[i];
BetaRightMemory innerMemory = null;
switch ( bvc.getEvaluator().getType() ) {
case Evaluator.BOOLEAN_TYPE :
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,68 @@
+package org.drools.rule;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.spi.Restriction;
+
+public abstract class AbstractCompositeRestriction
+ implements
+ Restriction {
+
+ private static final long serialVersionUID = 320;
+
+ protected final Restriction[] restrictions;
+
+ public AbstractCompositeRestriction(Restriction[] restriction) {
+ this.restrictions = restriction;
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ // Iterate all restrictions building up a unique list of declarations
+ // No need to cache, as this should only be called once at build time
+ Set set = new HashSet();
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ Declaration[] declarations = this.restrictions[i].getRequiredDeclarations();
+ for ( int j = 0, jlength = declarations.length; j < jlength; j++ ) {
+ set.add( declarations[j] );
+ }
+ }
+
+ return (Declaration[]) set.toArray( new Declaration[set.size()] );
+ }
+
+ private static int hashCode(Object[] array) {
+ final int PRIME = 31;
+ if ( array == null ) return 0;
+ int result = 1;
+ for ( int index = 0; index < array.length; index++ ) {
+ result = PRIME * result + (array[index] == null ? 0 : array[index].hashCode());
+ }
+ return result;
+ }
+
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + AbstractCompositeRestriction.hashCode( this.restrictions );
+ return result;
+ }
+
+ public boolean equals(Object obj) {
+ if ( this == obj ) {
+ return true;
+ }
+
+ if ( obj == null || obj instanceof AbstractCompositeRestriction ) {
+ return false;
+ }
+
+ final AbstractCompositeRestriction other = (AbstractCompositeRestriction) obj;
+ if ( !Arrays.equals( this.restrictions,
+ other.restrictions ) ) {
+ return false;
+ }
+ return true;
+ }
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,35 @@
+package org.drools.rule;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Restriction;
+import org.drools.spi.Tuple;
+
+public class AndCompositeRestriction extends AbstractCompositeRestriction {
+
+ private static final long serialVersionUID = 320;
+
+ public AndCompositeRestriction(Restriction[] restriction) {
+ super( restriction );
+ }
+
+ public boolean isAllowed(final Object object,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ if ( !restrictions[i].isAllowed( object,
+ handle,
+ tuple,
+ workingMemory ) ) {
+ return false;
+ }
+ }
+ return true;
+
+ }
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -1,118 +0,0 @@
-package org.drools.rule;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.Arrays;
-
-import org.drools.WorkingMemory;
-import org.drools.common.InternalFactHandle;
-import org.drools.spi.Evaluator;
-import org.drools.spi.FieldConstraint;
-import org.drools.spi.FieldExtractor;
-import org.drools.spi.Tuple;
-
-public class BoundVariableConstraint
- implements
- FieldConstraint {
-
- /**
- *
- */
- private static final long serialVersionUID = 8141052924257031767L;
-
- private final FieldExtractor fieldExtractor;
-
- private final Declaration declaration;
-
- private final int column;
-
- private final Declaration[] requiredDeclarations;
-
- private final Evaluator evaluator;
-
- public BoundVariableConstraint(final FieldExtractor fieldExtractor,
- final Declaration declaration,
- final Evaluator evaluator) {
- this.fieldExtractor = fieldExtractor;
- this.declaration = declaration;
- this.column = declaration.getColumn();
- this.requiredDeclarations = new Declaration[]{declaration};
- this.evaluator = evaluator;
- }
-
- public Declaration[] getRequiredDeclarations() {
- return this.requiredDeclarations;
- }
-
- public FieldExtractor getFieldExtractor() {
- return this.fieldExtractor;
- }
-
- public Evaluator getEvaluator() {
- return this.evaluator;
- }
-
- public boolean isAllowed(final InternalFactHandle handle,
- final Tuple tuple,
- final WorkingMemory workingMemory) {
- //can't do this as null indexing breaks.
- // Object left = workingMemory.getObject( tuple.get( this.declaration ) );
- // Object right = workingMemory.getObject( handle );
- // if ( left == right ) {
- // return false;
- // } else {
- // return evaluator.evaluate( this.fieldExtractor.getValue( right ),
- // declaration.getValue( left ) );
- // }
- return this.evaluator.evaluate( this.fieldExtractor.getValue( handle.getObject() ),
- this.declaration.getValue( tuple.get( this.column ).getObject() ) );
- }
-
- public String toString() {
- return "[BoundVariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + this.declaration + "]";
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#hashCode()
- */
- public int hashCode() {
- final int PRIME = 31;
- int result = 1;
- result = PRIME * result + this.column;
- result = PRIME * result + ((this.declaration == null) ? 0 : this.declaration.hashCode());
- result = PRIME * result + ((this.evaluator == null) ? 0 : this.evaluator.hashCode());
- result = PRIME * result + ((this.fieldExtractor == null) ? 0 : this.fieldExtractor.hashCode());
- result = PRIME * result + this.requiredDeclarations[0].hashCode();
- return result;
- }
-
- public boolean equals(final Object object) {
- if ( this == object ) {
- return true;
- }
-
- if ( object == null || getClass() != object.getClass() ) {
- return false;
- }
-
- final BoundVariableConstraint other = (BoundVariableConstraint) object;
-
- return (this.column == other.column) && this.fieldExtractor.equals( other.fieldExtractor ) && this.declaration.equals( other.declaration ) && this.evaluator.equals( other.evaluator ) && Arrays.equals( this.requiredDeclarations,
- other.requiredDeclarations );
- }
-
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -159,13 +159,18 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public String toString() {
- return "[Declaration: " + this.identifier + "]";
+ return "[Declaration: type=" + this.extractor.getObjectType() + " identifier=" + this.identifier + "]";
}
public int hashCode() {
- return this.identifier.hashCode();
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.column;
+ result = PRIME * this.extractor.hashCode();
+ result = PRIME * this.identifier.hashCode();
+ return result;
}
-
+
public boolean equals(final Object object) {
if ( this == object ) {
return true;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -93,21 +93,20 @@
}
final EvalCondition other = (EvalCondition) object;
-
+
if ( this.requiredDeclarations.length != other.requiredDeclarations.length ) {
- return false;
+ return false;
}
-
+
for ( int i = 0, length = this.requiredDeclarations.length; i < length; i++ ) {
- if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
- return false;
- }
+ if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
+ return false;
+ }
- if ( !this.requiredDeclarations[i].getExtractor().equals( other.requiredDeclarations[i].getExtractor() ) ) {
- return false;
- }
+ if ( !this.requiredDeclarations[i].getExtractor().equals( other.requiredDeclarations[i].getExtractor() ) ) {
+ return false;
+ }
}
-
return this.expression.equals( other.expression );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -26,35 +26,30 @@
public class LiteralConstraint
implements
- FieldConstraint {
+ FieldConstraint{
/**
*
*/
- private static final long serialVersionUID = 257543929585046195L;
+ private static final long serialVersionUID = 320;
- private final FieldValue field;
-
private final FieldExtractor extractor;
+
+ private final LiteralRestriction restriction;
- private final Evaluator evaluator;
-
- private static final Declaration[] requiredDeclarations = new Declaration[0];
-
- public LiteralConstraint(final FieldValue field,
- final FieldExtractor extractor,
- final Evaluator evaluator) {
- this.field = field;
+ public LiteralConstraint(final FieldExtractor extractor,
+ final Evaluator evaluator,
+ final FieldValue field) {
this.extractor = extractor;
- this.evaluator = evaluator;
+ this.restriction = new LiteralRestriction(field, evaluator);
}
public Evaluator getEvaluator() {
- return this.evaluator;
+ return this.restriction.getEvaluator();
}
public FieldValue getField() {
- return this.field;
+ return this.restriction.getField();
}
public FieldExtractor getFieldExtractor() {
@@ -67,23 +62,25 @@
* Return an empty <code>Declaration[]</code>
*/
public Declaration[] getRequiredDeclarations() {
- return LiteralConstraint.requiredDeclarations;
+ return this.restriction.getRequiredDeclarations();
}
public boolean isAllowed(final InternalFactHandle handle,
final Tuple tuple,
final WorkingMemory workingMemory) {
- return this.evaluator.evaluate( this.extractor.getValue( handle.getObject() ),
- this.field.getValue() );
+ return this.restriction.isAllowed( this.extractor.getValue( handle.getObject() ), handle, tuple, workingMemory );
}
public String toString() {
- return "[LiteralConstraint fieldExtractor=" + this.extractor + " evaluator=" + this.evaluator + " value=" + this.field.getValue() + "]";
+ return "[LiteralConstraint fieldExtractor=" + this.extractor + " evaluator=" + getEvaluator() + " value=" + getField().getValue() + "]";
}
public int hashCode() {
- return (this.field.hashCode() * 17) ^ (this.extractor.hashCode() * 11) ^ (this.evaluator.hashCode());
-
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.extractor.hashCode();
+ result = PRIME * result + this.restriction.hashCode();
+ return result;
}
public boolean equals(final Object object) {
@@ -95,7 +92,7 @@
}
final LiteralConstraint other = (LiteralConstraint) object;
- return this.field.equals( other.field ) && this.extractor.equals( other.extractor ) && this.evaluator.equals( other.evaluator );
+ return this.extractor.equals( other.extractor ) && this.restriction.equals( other.restriction );
}
-};
\ No newline at end of file
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,98 @@
+package org.drools.rule;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.FieldValue;
+import org.drools.spi.Restriction;
+import org.drools.spi.Tuple;
+
+public class LiteralRestriction
+ implements
+ Restriction {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320;
+
+ private final FieldValue field;
+
+ private final Evaluator evaluator;
+
+ private static final Declaration[] requiredDeclarations = new Declaration[0];
+
+ public LiteralRestriction(final FieldValue field,
+ final Evaluator evaluator) {
+ this.field = field;
+ this.evaluator = evaluator;
+ }
+
+ public Evaluator getEvaluator() {
+ return this.evaluator;
+ }
+
+ public FieldValue getField() {
+ return this.field;
+ }
+
+ /**
+ * Literal constraints cannot have required declarations, so always return an empty array.
+ * @return
+ * Return an empty <code>Declaration[]</code>
+ */
+ public Declaration[] getRequiredDeclarations() {
+ return LiteralRestriction.requiredDeclarations;
+ }
+
+ public boolean isAllowed(final Object object,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ return this.evaluator.evaluate( object,
+ this.field.getValue() );
+ }
+
+ public String toString() {
+ return "[LiteralRestriction evaluator=" + this.evaluator + " value=" + this.field.getValue() + "]";
+ }
+
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.evaluator.hashCode();
+ result = PRIME * result + this.field.hashCode();
+ return result;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || object.getClass() != LiteralRestriction.class ) {
+ return false;
+ }
+ final LiteralRestriction other = (LiteralRestriction) object;
+
+ return this.field.equals( other.field ) && this.evaluator.equals( other.evaluator );
+ }
+
+};
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/LogicTransformer.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -127,7 +127,7 @@
if ( or == null ) {
// No or so just assign
ands = new And[]{cloned};
- checkForAndRemoveDuplicates( ands[0] );
+ checkForAndRemoveDuplicates( ands[0] );
} else {
ands = new And[or.getChildren().size()];
int i = 0;
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,76 @@
+package org.drools.rule;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.FieldValue;
+import org.drools.spi.Restriction;
+import org.drools.spi.Tuple;
+
+public class MultiRestrictionFieldConstraint
+ implements
+ FieldConstraint {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320;
+
+ private final FieldExtractor extractor;
+
+ private final Restriction restrictions;
+
+ public MultiRestrictionFieldConstraint(final FieldExtractor extractor,
+ final Restriction restrictions) {
+ this.extractor = extractor;
+ this.restrictions = restrictions;
+ }
+
+ public FieldExtractor getFieldExtractor() {
+ return this.extractor;
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.restrictions.getRequiredDeclarations();
+ }
+
+ public boolean isAllowed(final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ return this.restrictions.isAllowed( this.extractor.getValue( handle.getObject() ),
+ handle,
+ tuple,
+ workingMemory );
+ }
+
+ public String toString() {
+ return "[MultiRestrictionConstraint fieldExtractor=" + this.extractor + " restrictions =" + this.restrictions + "]";
+ }
+
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * this.extractor.hashCode();
+ result = PRIME * this.restrictions.hashCode();
+ return result;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+ if ( object == null || object.getClass() != MultiRestrictionFieldConstraint.class ) {
+ return false;
+ }
+ final MultiRestrictionFieldConstraint other = (MultiRestrictionFieldConstraint) object;
+
+ return this.extractor.equals( other.extractor ) && this.restrictions.equals( other.restrictions );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,36 @@
+package org.drools.rule;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Restriction;
+import org.drools.spi.Tuple;
+
+public class OrCompositeRestriction extends AbstractCompositeRestriction {
+
+ private static final long serialVersionUID = 320;
+
+ public OrCompositeRestriction(Restriction[] restriction) {
+ super( restriction );
+ }
+
+ public boolean isAllowed(final Object object,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ if ( restrictions[i].isAllowed( object,
+ handle,
+ tuple,
+ workingMemory ) ) {
+ return true;
+ }
+ }
+ return false;
+
+ }
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -62,12 +62,12 @@
* will result in an invalid state for the instance.
*/
public PackageCompilationData() {
-
+
}
public PackageCompilationData(final ClassLoader parentClassLoader) {
initClassLoader( parentClassLoader );
- this.invokerLookups = new HashMap();
+ this.invokerLookups = new HashMap();
this.store = new HashMap();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -81,6 +81,10 @@
return this.expression;
}
+ public String toString() {
+ return "[PredicateConstraint declarations=" + this.requiredDeclarations + "]";
+ }
+
public boolean isAllowed(final InternalFactHandle handle,
final Tuple tuple,
final WorkingMemory workingMemory) {
@@ -110,28 +114,28 @@
}
final PredicateConstraint other = (PredicateConstraint) object;
-
+
if ( this.requiredDeclarations.length != other.requiredDeclarations.length ) {
- return false;
+ return false;
}
-
- if ( this.declaration.getColumn() != other.declaration.getColumn() ) {
- return false;
- }
- if ( !this.declaration.getExtractor().equals( other.declaration.getExtractor() ) ) {
- return false;
- }
-
+ if ( this.declaration.getColumn() != other.declaration.getColumn() ) {
+ return false;
+ }
+
+ if ( !this.declaration.getExtractor().equals( other.declaration.getExtractor() ) ) {
+ return false;
+ }
+
for ( int i = 0, length = this.requiredDeclarations.length; i < length; i++ ) {
- if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
- return false;
- }
+ if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
+ return false;
+ }
- if ( !this.requiredDeclarations[i].getExtractor().equals( other.requiredDeclarations[i].getExtractor() ) ) {
- return false;
- }
- }
+ if ( !this.requiredDeclarations[i].getExtractor().equals( other.requiredDeclarations[i].getExtractor() ) ) {
+ return false;
+ }
+ }
return this.expression.equals( other.expression );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -32,71 +32,64 @@
/**
*
*/
- private static final long serialVersionUID = -3888281054472597050L;
+ private static final long serialVersionUID = -3888281054472597050L;
- private final FieldExtractor fieldExtractor;
+ private final FieldExtractor fieldExtractor;
+ private final ReturnValueRestriction restriction;
- private ReturnValueExpression expression;
-
- private final Declaration[] requiredDeclarations;
-
- private final Evaluator evaluator;
-
- private static final Declaration[] noRequiredDeclarations = new Declaration[]{};
-
public ReturnValueConstraint(final FieldExtractor fieldExtractor,
final Declaration[] declarations,
final Evaluator evaluator) {
- this( fieldExtractor,
- null,
- declarations,
- evaluator );
+ this.fieldExtractor = fieldExtractor;
+ this.restriction = new ReturnValueRestriction( declarations,
+ evaluator );
}
public ReturnValueConstraint(final FieldExtractor fieldExtractor,
- final ReturnValueExpression returnValueExpression,
+ final ReturnValueExpression expression,
final Declaration[] declarations,
final Evaluator evaluator) {
this.fieldExtractor = fieldExtractor;
-
- this.expression = returnValueExpression;
-
- if ( declarations != null ) {
- this.requiredDeclarations = declarations;
- } else {
- this.requiredDeclarations = ReturnValueConstraint.noRequiredDeclarations;
- }
-
- this.evaluator = evaluator;
+ this.restriction = new ReturnValueRestriction( expression,
+ declarations,
+ evaluator );
}
public Declaration[] getRequiredDeclarations() {
- return this.requiredDeclarations;
+ return this.restriction.getRequiredDeclarations();
}
public void setReturnValueExpression(final ReturnValueExpression expression) {
- this.expression = expression;
+ this.restriction.setReturnValueExpression( expression );
}
public ReturnValueExpression getExpression() {
- return this.expression;
+ return this.restriction.getExpression();
}
+ public Evaluator getEvaluator() {
+ return this.restriction.getEvaluator();
+ }
+
public boolean isAllowed(final InternalFactHandle handle,
final Tuple tuple,
final WorkingMemory workingMemory) {
- try {
- return this.evaluator.evaluate( this.fieldExtractor.getValue( handle.getObject() ),
- this.expression.evaluate( tuple,
- this.requiredDeclarations,
- workingMemory ) );
- } catch ( final Exception e ) {
- throw new RuntimeDroolsException( e );
- }
+ return this.restriction.isAllowed( this.fieldExtractor.getValue( handle.getObject() ),
+ handle,
+ tuple,
+ workingMemory );
}
+ public String toString() {
+ return "[ReturnValueConstraint fieldExtractor=" + this.fieldExtractor + " evaluator=" + getEvaluator() + " declarations=" + getRequiredDeclarations() + "]";
+ }
+
public int hashCode() {
- return this.expression.hashCode();
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.fieldExtractor.hashCode();
+ result = PRIME * result + this.restriction.hashCode();
+ return result;
}
public boolean equals(final Object object) {
@@ -109,21 +102,7 @@
}
final ReturnValueConstraint other = (ReturnValueConstraint) object;
-
- if ( this.requiredDeclarations.length != other.requiredDeclarations.length ) {
- return false;
- }
-
- for ( int i = 0, length = this.requiredDeclarations.length; i < length; i++ ) {
- if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
- return false;
- }
- if ( !this.requiredDeclarations[i].getExtractor().equals( other.requiredDeclarations[i].getExtractor() ) ) {
- return false;
- }
- }
-
- return this.expression.equals( other.expression );
+ return this.fieldExtractor.equals( other.fieldExtractor ) && this.restriction.equals( other.restriction );
}
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,140 @@
+package org.drools.rule;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Arrays;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Restriction;
+import org.drools.spi.ReturnValueExpression;
+import org.drools.spi.Tuple;
+
+public class ReturnValueRestriction
+ implements
+ Restriction {
+
+ private static int hashCode(Object[] array) {
+ final int PRIME = 31;
+ if ( array == null ) return 0;
+ int result = 1;
+ for ( int index = 0; index < array.length; index++ ) {
+ result = PRIME * result + (array[index] == null ? 0 : array[index].hashCode());
+ }
+ return result;
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320;
+
+ private ReturnValueExpression expression;
+
+ private final Declaration[] requiredDeclarations;
+
+ private final Evaluator evaluator;
+
+ private static final Declaration[] noRequiredDeclarations = new Declaration[]{};
+
+ public ReturnValueRestriction(final Declaration[] declarations,
+ final Evaluator evaluator) {
+ this( null,
+ declarations,
+ evaluator );
+ }
+
+ public ReturnValueRestriction(final ReturnValueExpression returnValueExpression,
+ final Declaration[] declarations,
+ final Evaluator evaluator) {
+ this.expression = returnValueExpression;
+
+ if ( declarations != null ) {
+ this.requiredDeclarations = declarations;
+ } else {
+ this.requiredDeclarations = ReturnValueRestriction.noRequiredDeclarations;
+ }
+
+ this.evaluator = evaluator;
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.requiredDeclarations;
+ }
+
+ public void setReturnValueExpression(final ReturnValueExpression expression) {
+ this.expression = expression;
+ }
+
+ public ReturnValueExpression getExpression() {
+ return this.expression;
+ }
+
+ public Evaluator getEvaluator() {
+ return this.evaluator;
+ }
+
+ public boolean isAllowed(final Object object,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ try {
+ return this.evaluator.evaluate( object,
+ this.expression.evaluate( tuple,
+ this.requiredDeclarations,
+ workingMemory ) );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( e );
+ }
+ }
+
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = this.evaluator.hashCode();
+ result = this.expression.hashCode();
+ result = PRIME * result + ReturnValueRestriction.hashCode( this.requiredDeclarations );
+ return result;
+ }
+
+ public boolean equals(Object object) {
+ if ( object == this ) {
+ return true;
+ }
+
+ if ( object == null || object.getClass() != ReturnValueRestriction.class ) {
+ return false;
+ }
+
+ final ReturnValueRestriction other = (ReturnValueRestriction) object;
+
+ if ( this.requiredDeclarations.length != other.requiredDeclarations.length ) {
+ return false;
+ }
+
+ if ( !Arrays.equals( this.requiredDeclarations,
+ other.requiredDeclarations ) ) {
+ return false;
+ }
+
+ return this.expression.equals( other.expression );
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -432,12 +432,8 @@
final Rule other = (Rule) object;
- return (this.name.equals( other.name ) &&
- this.agendaGroup.equals( other.agendaGroup ) &&
- (( this.ActivationGroup == null && other.ActivationGroup == null) ||
- ( this.ActivationGroup != null && this.ActivationGroup.equals( other.ActivationGroup ))) &&
- this.salience == other.salience &&
- this.noLoop == other.noLoop);
+ return (this.name.equals( other.name ) && this.agendaGroup.equals( other.agendaGroup )
+ && ((this.ActivationGroup == null && other.ActivationGroup == null) || (this.ActivationGroup != null && this.ActivationGroup.equals( other.ActivationGroup ))) && this.salience == other.salience && this.noLoop == other.noLoop);
}
public int hashCode() {
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java (from rev 5182, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java 2006-07-19 16:23:42 UTC (rev 5182)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,104 @@
+package org.drools.rule;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Arrays;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Tuple;
+
+public class VariableConstraint
+ implements
+ FieldConstraint {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320;
+
+ private final FieldExtractor fieldExtractor;
+ private final VariableRestriction restriction;
+
+ public VariableConstraint(final FieldExtractor fieldExtractor,
+ final Declaration declaration,
+ final Evaluator evaluator) {
+ this.fieldExtractor = fieldExtractor;
+ this.restriction = new VariableRestriction( declaration,
+ evaluator );
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.restriction.getRequiredDeclarations();
+ }
+
+ public FieldExtractor getFieldExtractor() {
+ return this.fieldExtractor;
+ }
+
+ public Evaluator getEvaluator() {
+ return this.restriction.getEvaluator();
+ }
+
+ public boolean isAllowed(final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ //can't do this as null indexing breaks.
+ // Object left = workingMemory.getObject( tuple.get( this.declaration ) );
+ // Object right = workingMemory.getObject( handle );
+ // if ( left == right ) {
+ // return false;
+ // } else {
+ // return evaluator.evaluate( this.fieldExtractor.getValue( right ),
+ // declaration.getValue( left ) );
+ // }
+ return this.restriction.isAllowed( this.fieldExtractor.getValue( handle.getObject() ),
+ handle,
+ tuple,
+ workingMemory );
+ }
+
+ public String toString() {
+ return "[VariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + getRequiredDeclarations() + "]";
+ }
+
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.fieldExtractor.hashCode();
+ result = PRIME * result + this.restriction.hashCode();
+ return result;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final VariableConstraint other = (VariableConstraint) object;
+
+ return this.fieldExtractor.equals( other.fieldExtractor ) && this.restriction.equals( other.restriction );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,109 @@
+package org.drools.rule;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Arrays;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldConstraint;
+import org.drools.spi.FieldExtractor;
+import org.drools.spi.Restriction;
+import org.drools.spi.Tuple;
+
+public class VariableRestriction implements Restriction {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 320;
+
+ private final Declaration declaration;
+
+ private final int column;
+
+ private final Declaration[] requiredDeclarations;
+
+ private final Evaluator evaluator;
+
+ public VariableRestriction(final Declaration declaration,
+ final Evaluator evaluator) {
+ this.declaration = declaration;
+ this.column = declaration.getColumn();
+ this.requiredDeclarations = new Declaration[]{declaration};
+ this.evaluator = evaluator;
+ }
+
+ public Declaration[] getRequiredDeclarations() {
+ return this.requiredDeclarations;
+ }
+
+ public Evaluator getEvaluator() {
+ return this.evaluator;
+ }
+
+ public boolean isAllowed(final Object object,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ //can't do this as null indexing breaks.
+ // Object left = workingMemory.getObject( tuple.get( this.declaration ) );
+ // Object right = workingMemory.getObject( handle );
+ // if ( left == right ) {
+ // return false;
+ // } else {
+ // return evaluator.evaluate( this.fieldExtractor.getValue( right ),
+ // declaration.getValue( left ) );
+ // }
+ return this.evaluator.evaluate( object,
+ this.declaration.getValue( tuple.get( this.column ).getObject() ) );
+ }
+
+ public String toString() {
+ return "[VariableRestriction declaration=" + this.declaration + "]";
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + this.column;
+ result = PRIME * result + ((this.declaration == null) ? 0 : this.declaration.hashCode());
+ result = PRIME * result + ((this.evaluator == null) ? 0 : this.evaluator.hashCode());
+ result = PRIME * result + this.requiredDeclarations[0].hashCode();
+ return result;
+ }
+
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || getClass() != object.getClass() ) {
+ return false;
+ }
+
+ final VariableRestriction other = (VariableRestriction) object;
+
+ return (this.column == other.column) && this.declaration.equals( other.declaration ) && this.evaluator.equals( other.evaluator ) && Arrays.equals( this.requiredDeclarations,
+ other.requiredDeclarations );
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -0,0 +1,16 @@
+package org.drools.spi;
+
+import java.io.Serializable;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.rule.Declaration;
+
+public interface Restriction extends Serializable {
+ Declaration[] getRequiredDeclarations();
+
+ public boolean isAllowed(Object object,
+ InternalFactHandle handle,
+ Tuple tuple,
+ WorkingMemory workingMemory);
+}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -36,7 +36,7 @@
import org.drools.base.ClassFieldExtractor;
import org.drools.base.ClassObjectType;
import org.drools.base.EvaluatorFactory;
-import org.drools.rule.BoundVariableConstraint;
+import org.drools.rule.VariableConstraint;
import org.drools.rule.Column;
import org.drools.rule.Declaration;
import org.drools.rule.InvalidRuleException;
@@ -1097,9 +1097,9 @@
final FieldValue field = new MockField( fieldValue );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
private void setFieldDeclaration(final Column column,
@@ -1123,7 +1123,7 @@
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
- return new BoundVariableConstraint( extractor,
+ return new VariableConstraint( extractor,
declaration,
evaluator );
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -32,7 +32,7 @@
import org.drools.base.ClassFieldExtractorFactory;
import org.drools.base.ClassObjectType;
import org.drools.base.EvaluatorFactory;
-import org.drools.rule.BoundVariableConstraint;
+import org.drools.rule.VariableConstraint;
import org.drools.rule.Column;
import org.drools.rule.Declaration;
import org.drools.rule.InvalidRuleException;
@@ -3760,9 +3760,9 @@
final MockField field = new MockField( fieldValue );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
private void setFieldDeclaration(final Column column,
@@ -3786,7 +3786,7 @@
final FieldExtractor extractor = ClassFieldExtractorFactory.getClassFieldExtractor( clazz,
fieldName );
- return new BoundVariableConstraint( extractor,
+ return new VariableConstraint( extractor,
declaration,
evaluator );
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -146,9 +146,9 @@
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
public static int getIndex(final Class clazz,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -393,8 +393,8 @@
final FieldValue field = new MockField( fieldValue );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -196,8 +196,8 @@
final FieldValue field = new MockField( fieldValue );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -165,8 +165,8 @@
final FieldValue field = new MockField( fieldValue );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -56,15 +56,15 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- this.constraint1 = new LiteralConstraint( field1,
- extractor,
- evaluator );
- this.constraint2 = new LiteralConstraint( field2,
- extractor,
- evaluator );
- this.constraint3 = new LiteralConstraint( field2,
- extractor2,
- evaluator );
+ this.constraint1 = new LiteralConstraint( extractor,
+ evaluator,
+ field1 );
+ this.constraint2 = new LiteralConstraint( extractor,
+ evaluator,
+ field2 );
+ this.constraint3 = new LiteralConstraint( extractor2,
+ evaluator,
+ field2 );
this.alphaNode1 = new AlphaNode( 2,
this.constraint1,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -86,9 +86,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
// With Memory
final AlphaNode alphaNode = new AlphaNode( 2,
@@ -171,9 +171,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
final AlphaNode alphaNode = new AlphaNode( 2,
constraint,
@@ -233,9 +233,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
final AlphaNode alphaNode = new AlphaNode( 2,
constraint,
@@ -315,9 +315,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
final AlphaNode alphaNode = new AlphaNode( 2,
constraint,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -167,15 +167,15 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint1 = new LiteralConstraint( field1,
- extractor,
- evaluator );
- final LiteralConstraint constraint2 = new LiteralConstraint( field2,
- extractor,
- evaluator );
- final LiteralConstraint constraint3 = new LiteralConstraint( field2,
- extractor2,
- evaluator );
+ final LiteralConstraint constraint1 = new LiteralConstraint( extractor,
+ evaluator,
+ field1 );
+ final LiteralConstraint constraint2 = new LiteralConstraint( extractor,
+ evaluator,
+ field2 );
+ final LiteralConstraint constraint3 = new LiteralConstraint( extractor2,
+ evaluator,
+ field2 );
final AlphaNode alphaNode1 = new AlphaNode( 2,
constraint1,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -53,9 +53,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.STRING_TYPE,
Evaluator.EQUAL );
- LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
AlphaNode alphaNode = new AlphaNode( 2,
constraint,
@@ -77,9 +77,9 @@
field = new MockField( "stilton" );
- constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
alphaNode = new AlphaNode( 5,
constraint,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -67,9 +67,9 @@
final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
Evaluator.EQUAL );
- final LiteralConstraint constraint = new LiteralConstraint( field,
- extractor,
- evaluator );
+ final LiteralConstraint constraint = new LiteralConstraint( extractor,
+ evaluator,
+ field );
final Cheese cheddar = new Cheese( "cheddar",
5 );
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java 2006-07-20 14:47:34 UTC (rev 5191)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java 2006-07-20 14:48:11 UTC (rev 5192)
@@ -393,9 +393,9 @@
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
- return new LiteralConstraint( field,
- extractor,
- evaluator );
+ return new LiteralConstraint( extractor,
+ evaluator,
+ field );
}
private FieldConstraint getBoundVariableConstraint(final Column column,
@@ -407,7 +407,7 @@
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
- return new BoundVariableConstraint( extractor,
+ return new VariableConstraint( extractor,
declaration,
evaluator );
}
More information about the jboss-svn-commits
mailing list