Is Collection.containsAll() an option?
--- On Wed, 9/2/09, Wolfgang Laun <wolfgang.laun(a)gmail.com> wrote:
From: Wolfgang Laun <wolfgang.laun(a)gmail.com>
Subject: [rules-users] forall/from/eval/contains: odd DRL syntax error
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Wednesday, September 2, 2009, 9:58 AM
A rule has to ascertain that all elements in
a List<ElemBoxStatus>in a
Collector occur in the matching BoxResponse's
Set<ElemBoxStatus>. There is
just one BoxResponse per Collector.
This here works fine:
rule matchCollectorResponse
when
$c : Collector( $ebsList :
elemBoxStatusList, $gsSet : globalStatusSet )
$b : BoxResponse( collector == $c,
globalStatusSet == $gsSet, $ebsSet : elemBoxStatusSet )
forall( $ebs : ElemBoxStatus() from
$ebsList
BoxResponse( collector ==
$c, elemBoxStatusSet contains $ebs ) )
then
...
end
Thinking that $ebs is already available from the second
pattern ($b:...), I tried
rule matchCollectorResponse
when
$c : Collector( $ms : message, $ebsList :
elemBoxStatusList, $gsSet : globalStatusSet )
$b : BoxResponse( collector == $c,
globalStatusSet == $gsSet, $ebsSet : elemBoxStatusSet )
forall( $ebs : ElemBoxStatus() from
$ebsList
eval( $ebsSet.contains(
$ebs ) ) )
then
...
end
but the compiler came back with
Line ...:55 no viable alternative at input '$ebs'
in rule matchCollectorResponse in pattern eval
Defining a suitable function isIn(...) and using this
within eval() produces the same result. This
and other experiments seems to indicate that bindings in
the first pattern of forall() are not
passed in to an eval() later in the forall.
JIRA?
-W
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users