<div dir="ltr"><br> Hi Michael,<br><br> All good suggestions. I will create a JIRA with them and apply as soon as possible.<br><br> Regarding the tutorial, it would be great. We can add it to the Drools documentation with proper credits to you!<br>
<br> Thanks,<br> Edson<br><br><div class="gmail_quote">2008/9/17 Michael Zimmermann <span dir="ltr"><<a href="mailto:list@incunabulum.de">list@incunabulum.de</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Edson,<br>
<br>
I think I got it working :-)<br>
<div class="Ih2E3d"><br>
Edson Tirelli wrote:<br>
> For an example, look at the file SetEvaluatorsDefinition and look at<br>
> the BaseMemberOf inner class. So, all the logic is in there, but we<br>
> still used subclasses just to set the constructor attributes and<br>
> override the toString() method, but you could still implement<br>
> everything in a single class I guess.<br>
<br>
</div>Yes, this approach makes sense as long as you don't need to use the<br>
different VariableContextEntry subclasses for handling double, char etc.<br>
Yet, this can be handled, too.<br>
<br>
toString():<br>
You can avoid subclassing from your BaseMyEvaluatorClass to override<br>
toString() by using a string method like:<br>
<br>
public String toString() {<br>
return getValueType().getName() + " " +<br>
getOperator().getOperatorString();<br>
}<br>
<br>
Regarding the evaluator API:<br>
If you only need one evaluator class (subclassed from BaseEvaluator),<br>
personally I don't like the > 10 static calls to<br>
addEvaluator(type, operator, myEvaluatorInstance)<br>
in the EvaluatorDefinition class.<br>
<br>
So, how about adding the method addDefaultEvaluator(operator,<br>
evaluatorClass) to EvaluatorCache, see attachment?<br>
This would allow you to register a evaluator as default and only overide<br>
the special cases...<br>
<br>
<br>
PS: If you are interested I will write some small tutorial about custom<br>
evaluators / operators in drools trunk. This might take a week or two,<br>
though. Any preferences regarding the format?<br>
<br>
Thanks for the help....<br>
<br>
cu, Michael<br>
<br>
<br>@SuppressWarnings("unchecked")<br>
public void addDefaultEvaluator(final Operator operator, Class evaluatorClass) {<br>
// define the constructor<br>
Class[] evaluatorParameters = new Class[2];<br>
evaluatorParameters[0] = ValueType.class;<br>
evaluatorParameters[1] = Operator.class;<br>
<br>
// get the constructor<br>
try {<br>
Constructor<BaseEvaluator> constructor;<br>
constructor = evaluatorClass.getConstructor( evaluatorParameters );<br>
<br>
// add feault operators<br>
addEvaluator(ValueType.ARRAY_TYPE, operator, constructor.newInstance(ValueType.ARRAY_TYPE, operator));<br>
addEvaluator(ValueType.BIG_DECIMAL_TYPE, operator, constructor.newInstance(ValueType.BIG_DECIMAL_TYPE, operator));<br>
addEvaluator(ValueType.BIG_INTEGER_TYPE, operator, constructor.newInstance(ValueType.BIG_INTEGER_TYPE, operator));<br>
addEvaluator(ValueType.BOOLEAN_TYPE, operator, constructor.newInstance(ValueType.BOOLEAN_TYPE, operator));<br>
addEvaluator(ValueType.PBOOLEAN_TYPE, operator, constructor.newInstance(ValueType.PBOOLEAN_TYPE, operator));<br>
addEvaluator(ValueType.BYTE_TYPE, operator, constructor.newInstance(ValueType.BYTE_TYPE, operator));<br>
addEvaluator(ValueType.PBYTE_TYPE, operator, constructor.newInstance(ValueType.PBYTE_TYPE, operator));<br>
addEvaluator(ValueType.CHAR_TYPE, operator, constructor.newInstance(ValueType.CHAR_TYPE, operator));<br>
addEvaluator(ValueType.PCHAR_TYPE, operator, constructor.newInstance(ValueType.PCHAR_TYPE, operator));<br>
addEvaluator(ValueType.DATE_TYPE, operator, constructor.newInstance(ValueType.DATE_TYPE, operator));<br>
addEvaluator(ValueType.DOUBLE_TYPE, operator, constructor.newInstance(ValueType.DOUBLE_TYPE, operator));<br>
addEvaluator(ValueType.PDOUBLE_TYPE, operator, constructor.newInstance(ValueType.PDOUBLE_TYPE, operator));<br>
addEvaluator(ValueType.FLOAT_TYPE, operator, constructor.newInstance(ValueType.FLOAT_TYPE , operator));<br>
addEvaluator(ValueType.PFLOAT_TYPE, operator, constructor.newInstance(ValueType.PFLOAT_TYPE, operator));<br>
addEvaluator(ValueType.INTEGER_TYPE, operator, constructor.newInstance(ValueType.INTEGER_TYPE, operator));<br>
addEvaluator(ValueType.PINTEGER_TYPE, operator, constructor.newInstance(ValueType.PINTEGER_TYPE, operator));<br>
addEvaluator(ValueType.LONG_TYPE, operator, constructor.newInstance(ValueType.LONG_TYPE, operator));<br>
addEvaluator(ValueType.PLONG_TYPE, operator, constructor.newInstance(ValueType.PLONG_TYPE, operator));<br>
addEvaluator(ValueType.OBJECT_TYPE, operator, constructor.newInstance(ValueType.OBJECT_TYPE, operator));<br>
addEvaluator(ValueType.SHORT_TYPE, operator, constructor.newInstance(ValueType.SHORT_TYPE, operator));<br>
addEvaluator(ValueType.PSHORT_TYPE, operator, constructor.newInstance(ValueType.PSHORT_TYPE, operator));<br>
addEvaluator(ValueType.STRING_TYPE, operator, constructor.newInstance(ValueType.STRING_TYPE, operator));<br>
} catch (SecurityException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
} catch (NoSuchMethodException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
} catch (IllegalArgumentException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
} catch (InstantiationException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
} catch (IllegalAccessException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
} catch (InvocationTargetException e) {<br>
// TODO Auto-generated catch block<br>
e.printStackTrace();<br>
}<br>
}<br>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli<br> JBoss Drools Core Development<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a><br>
</div>