Skip to content

Commit

Permalink
JBRULES-3101 Right Input triggering doesn't work for Queries
Browse files Browse the repository at this point in the history
  • Loading branch information
mdproctor committed Jun 27, 2011
1 parent 454d83d commit 279c9df
Show file tree
Hide file tree
Showing 8 changed files with 1,028 additions and 908 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,13 @@
import java.util.List;
import java.util.Map;

import org.drools.base.ArrayElements;
import org.drools.base.ClassFieldAccessorStore;
import org.drools.base.ClassObjectType;
import org.drools.base.DroolsQuery;
import org.drools.base.extractors.ArrayElementReader;
import org.drools.base.extractors.MVELClassFieldReader;
import org.drools.base.extractors.SelfReferenceClassFieldReader;
import org.drools.rule.Declaration;
import org.drools.rule.Pattern;
import org.drools.spi.InternalReadAccessor;
Expand Down Expand Up @@ -58,17 +63,33 @@ private void createBinding(Map<String, Object> context,
String index = bind[1];
String type = bind[2];
String field = bind[3];


try {
Pattern pattern = reteTesterHelper.getPattern( Integer.parseInt( index ),
type );

final Class<?> clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
"java.lang.Object" );
//
// final Class<?> clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();

// reteTesterHelper.getTypeResolver().resolveType( className )


ClassFieldAccessorStore store = (ClassFieldAccessorStore) context.get( "ClassFieldAccessorStore" );

final InternalReadAccessor extractor = store.getReader( clazz,
field,
getClass().getClassLoader() );
InternalReadAccessor extractor = null;
if ( field.startsWith( "[" ) ) {
extractor = store.getReader( ArrayElements.class,
"elements",
getClass().getClassLoader() );

extractor = new ArrayElementReader( extractor,
Integer.parseInt( field.substring( 1, field.length() -1 ) ),
reteTesterHelper.getTypeResolver().resolveType( type ) );
} else {
extractor = store.getReader( reteTesterHelper.getTypeResolver().resolveType( type ),
field,
getClass().getClassLoader() );
}

Declaration declr = new Declaration( name,
extractor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@
import java.util.List;
import java.util.Map;

import org.drools.base.ClassObjectType;
import org.drools.common.SingleBetaConstraints;
import org.drools.reteoo.JoinNode;
import org.drools.reteoo.LeftTupleSource;
import org.drools.reteoo.MockObjectSource;
import org.drools.reteoo.MockTupleSource;
import org.drools.reteoo.ObjectSource;
import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.builder.BuildContext;
import org.drools.rule.BehaviorManager;
import org.drools.rule.Declaration;
Expand Down Expand Up @@ -65,6 +67,12 @@ public void execute(Map<String, Object> context,
rightObjectSource = (ObjectSource) context.get( rightInput );
}

ObjectSource otn = rightObjectSource;
while ( !( otn instanceof ObjectTypeNode ) ) {
otn = otn.getParentObjectSource();
}
ClassObjectType cob = (ClassObjectType)((ObjectTypeNode)otn).getObjectType();

a = args.get( 1 );
String fieldName = a[0].trim();
String operator = a[1].trim();
Expand All @@ -73,11 +81,12 @@ public void execute(Map<String, Object> context,
Declaration declr = (Declaration) context.get( var );

BetaNodeFieldConstraint betaConstraint;

try {
betaConstraint = this.reteTesterHelper.getBoundVariableConstraint( declr.getPattern(),
fieldName,
declr,
operator );
betaConstraint = this.reteTesterHelper.getBoundVariableConstraint(cob.getClassType(),
fieldName,
declr,
operator );
} catch ( IntrospectionException e ) {
throw new IllegalArgumentException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,15 @@
import org.drools.rule.LiteralConstraint;
import org.drools.rule.Package;
import org.drools.rule.Pattern;
import org.drools.rule.UnificationRestriction;
import org.drools.rule.VariableConstraint;
import org.drools.rule.VariableRestriction;
import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldValue;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.Restriction;

public class ReteTesterHelper {

Expand Down Expand Up @@ -71,22 +74,28 @@ public ClassTypeResolver getTypeResolver() {
return typeResolver;
}

public BetaNodeFieldConstraint getBoundVariableConstraint(final Pattern pattern,
public BetaNodeFieldConstraint getBoundVariableConstraint(final Class clazz,
final String fieldName,
final Declaration declaration,
final String evaluatorString) throws IntrospectionException {
final Class< ? > clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();

final InternalReadAccessor extractor = store.getReader( clazz,
fieldName,
getClass().getClassLoader() );

Evaluator evaluator = getEvaluator( clazz,
evaluatorString );
":=".equals( evaluatorString ) ? "==" : evaluatorString );

Restriction vr = new VariableRestriction( extractor, declaration, evaluator );

return new VariableConstraint( extractor,
declaration,
evaluator );
if ( ":=".equals( evaluatorString ) ) {
vr = new UnificationRestriction( (VariableRestriction) vr );
}

VariableConstraint vc = new VariableConstraint( extractor,
vr );

return vc;
}

public AlphaNodeFieldConstraint getLiteralConstraint(final Pattern pattern,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
VT_TEST_CASE=4
VT_PARAMS=5
VT_QUALIFIED_ID=6
VT_SYMBOL=7
VT_CHUNK=8
VK_TEST_CASE=9
VK_IMPORT=10
VK_SETUP=11
VK_TEARDOWN=12
VK_TEST=13
STRING=14
SEMI_COLON=15
ID=16
COLON=17
COMMA=18
INT=19
FLOAT=20
MISC=21
STAR=22
DOT=23
LEFT_SQUARE=24
RIGHT_SQUARE=25
LEFT_PAREN=26
RIGHT_PAREN=27
EOL=28
WS=29
EscapeSequence=30
HexDigit=31
UnicodeEscape=32
OctalEscape=33
SH_STYLE_SINGLE_LINE_COMMENT=34
C_STYLE_SINGLE_LINE_COMMENT=35
MULTI_LINE_COMMENT=36
IdentifierStart=37
IdentifierPart=38
Loading

0 comments on commit 279c9df

Please sign in to comment.