[jboss-jira] [JBoss JIRA] Updated: (JBRULES-1769) Improvements to pluggable operator framework
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Wed Sep 17 11:24:21 EDT 2008
[ https://jira.jboss.org/jira/browse/JBRULES-1769?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Edson Tirelli updated JBRULES-1769:
-----------------------------------
Attachment: EvaluatorCache.java
> Improvements to pluggable operator framework
> --------------------------------------------
>
> Key: JBRULES-1769
> URL: https://jira.jboss.org/jira/browse/JBRULES-1769
> Project: JBoss Drools
> Issue Type: Feature Request
> Security Level: Public(Everyone can see)
> Components: Drl Parser/Builder
> Affects Versions: 5.0.0.M1
> Reporter: Edson Tirelli
> Assignee: Edson Tirelli
> Fix For: 5.0.0.M2
>
> Attachments: EvaluatorCache.java
>
>
> e-mail from Michel Zimmermann:
> -----------
> Hi Edson,
> I think I got it working :-)
> Edson Tirelli wrote:
> > For an example, look at the file SetEvaluatorsDefinition and look at
> > the BaseMemberOf inner class. So, all the logic is in there, but we
> > still used subclasses just to set the constructor attributes and
> > override the toString() method, but you could still implement
> > everything in a single class I guess.
> Yes, this approach makes sense as long as you don't need to use the
> different VariableContextEntry subclasses for handling double, char etc.
> Yet, this can be handled, too.
> toString():
> You can avoid subclassing from your BaseMyEvaluatorClass to override
> toString() by using a string method like:
> public String toString() {
> return getValueType().getName() + " " +
> getOperator().getOperatorString();
> }
> Regarding the evaluator API:
> If you only need one evaluator class (subclassed from BaseEvaluator),
> personally I don't like the > 10 static calls to
> addEvaluator(type, operator, myEvaluatorInstance)
> in the EvaluatorDefinition class.
> So, how about adding the method addDefaultEvaluator(operator,
> evaluatorClass) to EvaluatorCache, see attachment?
> This would allow you to register a evaluator as default and only overide
> the special cases...
> PS: If you are interested I will write some small tutorial about custom
> evaluators / operators in drools trunk. This might take a week or two,
> though. Any preferences regarding the format?
> Thanks for the help....
> cu, Michael
> @SuppressWarnings("unchecked")
> public void addDefaultEvaluator(final Operator operator, Class evaluatorClass) {
> // define the constructor
> Class[] evaluatorParameters = new Class[2];
> evaluatorParameters[0] = ValueType.class;
> evaluatorParameters[1] = Operator.class;
> // get the constructor
> try {
> Constructor<BaseEvaluator> constructor;
> constructor = evaluatorClass.getConstructor( evaluatorParameters );
> // add feault operators
> addEvaluator(ValueType.ARRAY_TYPE, operator, constructor.newInstance(ValueType.ARRAY_TYPE, operator));
> addEvaluator(ValueType.BIG_DECIMAL_TYPE, operator, constructor.newInstance(ValueType.BIG_DECIMAL_TYPE, operator));
> addEvaluator(ValueType.BIG_INTEGER_TYPE, operator, constructor.newInstance(ValueType.BIG_INTEGER_TYPE, operator));
> addEvaluator(ValueType.BOOLEAN_TYPE, operator, constructor.newInstance(ValueType.BOOLEAN_TYPE, operator));
> addEvaluator(ValueType.PBOOLEAN_TYPE, operator, constructor.newInstance(ValueType.PBOOLEAN_TYPE, operator));
> addEvaluator(ValueType.BYTE_TYPE, operator, constructor.newInstance(ValueType.BYTE_TYPE, operator));
> addEvaluator(ValueType.PBYTE_TYPE, operator, constructor.newInstance(ValueType.PBYTE_TYPE, operator));
> addEvaluator(ValueType.CHAR_TYPE, operator, constructor.newInstance(ValueType.CHAR_TYPE, operator));
> addEvaluator(ValueType.PCHAR_TYPE, operator, constructor.newInstance(ValueType.PCHAR_TYPE, operator));
> addEvaluator(ValueType.DATE_TYPE, operator, constructor.newInstance(ValueType.DATE_TYPE, operator));
> addEvaluator(ValueType.DOUBLE_TYPE, operator, constructor.newInstance(ValueType.DOUBLE_TYPE, operator));
> addEvaluator(ValueType.PDOUBLE_TYPE, operator, constructor.newInstance(ValueType.PDOUBLE_TYPE, operator));
> addEvaluator(ValueType.FLOAT_TYPE, operator, constructor.newInstance(ValueType.FLOAT_TYPE , operator));
> addEvaluator(ValueType.PFLOAT_TYPE, operator, constructor.newInstance(ValueType.PFLOAT_TYPE, operator));
> addEvaluator(ValueType.INTEGER_TYPE, operator, constructor.newInstance(ValueType.INTEGER_TYPE, operator));
> addEvaluator(ValueType.PINTEGER_TYPE, operator, constructor.newInstance(ValueType.PINTEGER_TYPE, operator));
> addEvaluator(ValueType.LONG_TYPE, operator, constructor.newInstance(ValueType.LONG_TYPE, operator));
> addEvaluator(ValueType.PLONG_TYPE, operator, constructor.newInstance(ValueType.PLONG_TYPE, operator));
> addEvaluator(ValueType.OBJECT_TYPE, operator, constructor.newInstance(ValueType.OBJECT_TYPE, operator));
> addEvaluator(ValueType.SHORT_TYPE, operator, constructor.newInstance(ValueType.SHORT_TYPE, operator));
> addEvaluator(ValueType.PSHORT_TYPE, operator, constructor.newInstance(ValueType.PSHORT_TYPE, operator));
> addEvaluator(ValueType.STRING_TYPE, operator, constructor.newInstance(ValueType.STRING_TYPE, operator));
> } catch (SecurityException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (NoSuchMethodException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (IllegalArgumentException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (InstantiationException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (IllegalAccessException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (InvocationTargetException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list