[rules-users] Getting hold of the Evaluator Registry

Asif Iqbal Asif.Iqbal at infor.com
Wed Jul 15 04:41:13 EDT 2009


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 at lists.jboss.org [mailto:rules-users-bounces at 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 at lists.jboss.org [mailto:rules-users-bounces at 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 at post.com<mailto:tirelli at 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 at infor.com<mailto:Asif.Iqbal at 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 at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users



--
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com<http://www.jboss.com>



--
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com<http://www.jboss.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090715/d239786d/attachment.html 


More information about the rules-users mailing list