On 23/02/2012 03:38, Hezi Stern wrote:
Hi All,
I am seeking some kind of filtering (if statement) inside the LHS.
I have the following example rule (note: $attributeFilteredSentences
and $cmdescriptor are defined in the extends rule which is not presented):
*rule*" choose message sentence example"extends "
attributeFilteredSentences collection"
*when*
SContextState(state == SContextState.ONE)
$sentences: ArrayList()
*from**collect*(Sentences.Sentence(
descriptor.meanings.meaning == $cmdescriptor.meanings.meaning
)
*from* $attributeFilteredSentences)
*then*
logger.info("RULE: entered rule:
"+drools.getRule().getName());
//some logic...
*end*
**
as can be seen I am filtering sentences based on the meanings, and the
meaning collection must be identical as in $cmdescriptor (this is the
case when SContextState.ONE)
Now to my question: I have cases ((this is the case when
SContextState.TWO) where I do not need exact validation but rather
superset of (for this I have a supersetOf operator implemented)
I would like to avoid duplicating this rule (as I have similar
condition in many other rules) and being able to filter once with "=="
and once with "supersetOf" depending on the SContextState.
I have found that query's can be used to provide re-usable rule
fragments. In the example below I could have inlined the intentory LHS
in the updateInventory rule, but instead I separated it out into a query
so that multiple rules can re-use it. There is a small performance
overhead from using queries, compared to normal patterns, but in most
cases this is compensated by more maintainable and readable code.
query inventory(Character $char, List $inventory)
$char := Character()
$inventory := List() from accumulate( Holding( $char, $thing; ),
collectList( $thing ) )
end
rule updateInventory salience 5 when
SessionCharacter( $char : character, $us : session )
inventory( $char, $things; )
then
$us.channels["inventory"].send( $things );
end
Mark
Any ideas how to do this?
Thanks,
Hezi
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users