Edson,
What I have done so far is created a CustomComparableEvaluatorsDefinition,
which is exactly the same as the default ComparableEvaluatorsDefinition apart
form having support for strings, which I have done by creating StringGreaterOrEqualEvaluators
and added that in my custom class, using the addEvaluatorFunction :-
addEvaluator(
ValueType.SHORT_TYPE,
Operator.GREATER,
ShortGreaterEvaluator.INSTANCE );
addEvaluator( ValueType.SHORT_TYPE,
Operator.GREATER_OR_EQUAL,
ShortGreaterOrEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PSHORT_TYPE,
Operator.LESS,
ShortLessEvaluator.INSTANCE );
addEvaluator( ValueType.PSHORT_TYPE, Operator.LESS_OR_EQUAL,
ShortLessOrEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PSHORT_TYPE,
Operator.GREATER,
ShortGreaterEvaluator.INSTANCE );
addEvaluator( ValueType.PSHORT_TYPE,
Operator.GREATER_OR_EQUAL,
ShortGreaterOrEqualEvaluator.INSTANCE );
//Custom
additions
addEvaluator( ValueType.STRING_TYPE,
Operator.LESS,
StringLessEvaluator.INSTANCE );
addEvaluator( ValueType.STRING_TYPE,
Operator.LESS_OR_EQUAL,
StringLessOrEqualEvaluator.INSTANCE );
addEvaluator( ValueType.STRING_TYPE,
Operator.GREATER,
StringGreaterEvaluator.INSTANCE );
addEvaluator( ValueType.STRING_TYPE,
Operator.GREATER_OR_EQUAL, StringGreaterOrEqualEvaluator.INSTANCE
);
Now Im am trying to wire it, with the
following..
CustomComparableEvaluatorsDefinition
MyCustomComparable custom = new CustomComparableEvaluatorsDefinition();
KnowledgeBuilderConfiguration
config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
EvaluatorOption
option = EvaluatorOption.get(Operator.LESS.toString(), custom);
EvaluatorOption
option2 = EvaluatorOption.get(Operator.LESS_OR_EQUAL.toString(), custom);
EvaluatorOption
option3 = EvaluatorOption.get(Operator.GREATER.toString(), custom);
EvaluatorOption
option4 = EvaluatorOption.get(Operator.GREATER_OR_EQUAL.toString(), custom);
config.setOption(option);
config.setOption(option2);
config.setOption(option3);
config.setOption(option4);
Firstly is this the correct approach?....
The problem im having is that in my drl
files still flag errors, when I do “test” > “test2”
, am I missing something?
Regards
From: rules-users-bounces@lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On
Behalf Of Asif Iqbal
Sent: 15 July 2009 08:20
To: Rules Users List
Subject: RE: [rules-users] Getting
hold of the Evaluator Registry
Edson,
Thanks for your replies they have really
helped.
1) I am still not sure about creating a new operator, since the
‘>=’ operator already exists it just does not cater for strings,
which I want to add. So would creating a new operator cause the existing one to
be overrriden when added to the registry?
2) Having looked at the examples and tests you emailed, I am still
unsure how to actually wire in the changes, say for example I have replaced the
existing ‘>=’ evaluator or created a new evaluator so that
‘>=’ now handles strings. When writing rules will the
engine pick this up?.. or do I need to create a new jar by building?.. or do I
need to update a configuration file?... im just not sure…
3) Wouldn’t the following also add the evaluator definition by
replacing the existing one..
PackageBuilderConfiguration pkgb = new PackageBuilderConfiguration();
pkgb.getEvaluatorRegistry().addEvaluatorDefinition(new ComparableEvaluatorsDefinition());
PackageBuilder builder = new PackageBuilder(pkgb);
builder.addPackageFromDrl(source);
Package pkg = builder.getPackage();
// Add the
package to a rulebase (deploy the rule package).
rules = RuleBaseFactory.newRuleBase();
rules.addPackage(pkg);
Thanks for your help…
From:
rules-users-bounces@lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On
Behalf Of Edson Tirelli
Sent: 14 July 2009 23:05
To: Rules Users List
Subject: Re: [rules-users] Getting
hold of the Evaluator Registry
I am working in one example of drools features where I implement a
custom evaluator here:
http://anonsvn.jboss.org/repos/labs/labs/jbossrules/contrib/lotrc/src/main/java/org/drools/examples/lotrc/evaluators/IsAdjacentToEvaluatorDefinition.java
I use the configuration file instead of API in the example:
http://anonsvn.jboss.org/repos/labs/labs/jbossrules/contrib/lotrc/src/main/resources/META-INF/drools.packagebuilder.conf
[]s
Edson
2009/7/14 Edson Tirelli <tirelli@post.com>
Asif,
My recommendation is create a new operator for you instead of
overriding existing ones. Although if you really want to replace the existing
ones, setting the property or calling the API to register a new operator will
override the default.
See:
http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/builder/KnowledgeBuilderConfigurationTest.java
Test method:
testEvaluatorConfiguration()
[]s
Edson
2009/7/14 Asif Iqbal <Asif.Iqbal@infor.com>
Hi,
What
I need to do is modify one of the evaluator classes specifically ‘<=’,
so that it can handle strings. Now I know I need to create a class similar to
ComparableEvaluatorDefinition. But what I want to do is replace the existing
one in the evaluator registry with my implementation which will include the
additional String capability.
From
my understanding that should be all that is required. Unless im missing
something… now all I need to know is how do I get hold of the evaluator
registry?
Cheers
I
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @ www.jboss.com
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @ www.jboss.com