📄 ortest.java
字号:
new Integer( Stage.DETECT_JUNCTIONS ),
this.integerEqualEvaluator ) );
final Column stageColumn2 = new Column( 0,
this.stageType,
"stage" );
stageColumn2.addConstraint( getLiteralConstraint( stageColumn2,
"value",
new Integer( Stage.LABELING ),
this.integerEqualEvaluator ) );
final Or or = new Or();
or.addChild( stageColumn1 );
or.addChild( stageColumn2 );
rule.addPattern( or );
final Declaration stageDeclaration = rule.getDeclaration( "stage" );
final Column edgeColumn1 = new Column( 1,
this.edgeType,
"edge1" );
setFieldDeclaration( edgeColumn1,
"p1",
"edge1p1" );
setFieldDeclaration( edgeColumn1,
"p2",
"edge1p2" );
rule.addPattern( edgeColumn1 );
final Declaration edge1Declaration = rule.getDeclaration( "edge1" );
final Declaration edge1P1Declaration = rule.getDeclaration( "edge1p1" );
final Declaration edge1P2Declaration = rule.getDeclaration( "edge1p2" );
final Column edgeColumn2 = new Column( 2,
this.edgeType,
"edge2" );
rule.addPattern( edgeColumn2 );
final Declaration edge2Declaration = rule.getDeclaration( "edge2" );
edgeColumn2.addConstraint( getBoundVariableConstraint( edgeColumn2,
"p1",
edge1P1Declaration,
this.integerEqualEvaluator ) );
edgeColumn2.addConstraint( getBoundVariableConstraint( edgeColumn2,
"p2",
edge1P2Declaration,
this.integerNotEqualEvaluator ) );
final Consequence consequence = new Consequence() {
/**
*
*/
private static final long serialVersionUID = -9201168516267126280L;
public void evaluate(KnowledgeHelper drools,
WorkingMemory workingMemory) throws ConsequenceException {
try {
Rule rule = drools.getRule();
Tuple tuple = drools.getTuple();
Stage stage = (Stage) drools.get( stageDeclaration );
OrTest.this.markStage = stage;
} catch ( Exception e ) {
e.printStackTrace();
throw new ConsequenceException( e );
}
}
};
rule.setConsequence( consequence );
return rule;
}
/*
* Test method for
* 'org.drools.leaps.ColumnConstraints.evaluateAlphas(FactHandleImpl, Token,
* WorkingMemoryImpl)'
*/
public Rule getWorkingButCanNotResolveOrObjectInConsequenceOrder() throws Exception {
final Rule rule = new Rule( "WorkingButCanNotResolveOrObjectInConsequence" );
final Column edgeColumn1 = new Column( 0,
this.edgeType,
"edge1" );
setFieldDeclaration( edgeColumn1,
"p1",
"edge1p1" );
setFieldDeclaration( edgeColumn1,
"p2",
"edge1p2" );
rule.addPattern( edgeColumn1 );
final Declaration edge1Declaration = rule.getDeclaration( "edge1" );
final Declaration edge1P1Declaration = rule.getDeclaration( "edge1p1" );
final Declaration edge1P2Declaration = rule.getDeclaration( "edge1p2" );
final Column edgeColumn2 = new Column( 1,
this.edgeType,
"edge2" );
rule.addPattern( edgeColumn2 );
final Declaration edge2Declaration = rule.getDeclaration( "edge2" );
edgeColumn2.addConstraint( getBoundVariableConstraint( edgeColumn2,
"p1",
edge1P1Declaration,
this.integerEqualEvaluator ) );
edgeColumn2.addConstraint( getBoundVariableConstraint( edgeColumn2,
"p2",
edge1P2Declaration,
this.integerNotEqualEvaluator ) );
final Column stageColumn1 = new Column( 2,
this.stageType,
"stage1" );
stageColumn1.addConstraint( getLiteralConstraint( stageColumn1,
"value",
new Integer( Stage.DETECT_JUNCTIONS ),
this.integerEqualEvaluator ) );
final Column stageColumn2 = new Column( 2,
this.stageType,
"stage" );
stageColumn2.addConstraint( getLiteralConstraint( stageColumn2,
"value",
new Integer( Stage.LABELING ),
this.integerEqualEvaluator ) );
final Or or = new Or();
or.addChild( stageColumn1 );
or.addChild( stageColumn2 );
rule.addPattern( or );
final Declaration stageDeclaration = rule.getDeclaration( "stage" );
final Consequence consequence = new Consequence() {
/**
*
*/
private static final long serialVersionUID = -4956304333289545872L;
public void evaluate(KnowledgeHelper drools,
WorkingMemory workingMemory) throws ConsequenceException {
try {
Rule rule = drools.getRule();
Tuple tuple = drools.getTuple();
Stage stage = (Stage) drools.get( stageDeclaration );
OrTest.this.markStage = stage;
} catch ( Exception e ) {
e.printStackTrace();
throw new ConsequenceException( e );
}
}
};
rule.setConsequence( consequence );
return rule;
}
private void setFieldDeclaration(final Column column,
final String fieldName,
final String identifier) throws IntrospectionException {
final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
column.addDeclaration( identifier,
extractor );
}
private FieldConstraint getLiteralConstraint(final Column column,
final String fieldName,
final Object fieldValue,
final Evaluator evaluator) throws IntrospectionException {
final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
final int index = getIndex( clazz,
fieldName );
final FieldValue field = new MockField( fieldValue );
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
return new LiteralConstraint( field,
extractor,
evaluator );
}
private FieldConstraint getBoundVariableConstraint(final Column column,
final String fieldName,
final Declaration declaration,
final Evaluator evaluator) throws IntrospectionException {
final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
final FieldExtractor extractor = new ClassFieldExtractor( clazz,
fieldName );
return new BoundVariableConstraint( extractor,
declaration,
evaluator );
}
public static int getIndex(final Class clazz,
final String name) throws IntrospectionException {
final PropertyDescriptor[] descriptors = Introspector.getBeanInfo( clazz ).getPropertyDescriptors();
for ( int i = 0; i < descriptors.length; i++ ) {
if ( descriptors[i].getName().equals( name ) ) {
return i;
}
}
return -1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -