[rules-users] looking for more information on drools expert

Wolfgang Laun wolfgang.laun at gmail.com
Thu Jul 16 05:27:28 EDT 2009


accumulate is indeed complex; the simpler collect might be applicable
as well in this case.

rule all45_A
when
    forall ( Equipment( parent == 0, $id : id )
             Alarm( cause == 45, source == $id ) )
    $alarms : ArrayList()
        from collect( Alarm( cause == 45, $source : source ) )
then
    for( Object o: $alarms ){
        retract( o );    // or anything else with (Alarm)o
    }
    insert( new SummaryAlarm( 45 ) );
end

Another solution would be by using 2 rules:

rule all45_B1
when
    forall ( Equipment( parent == 0, $id : id )
             Alarm( cause == 45, source == $id ) )
then
    insert( new SummaryAlarm( 45 ) );
end

rule all45_B2
when
    SummaryAlarm( $cause : cause )
    $a : Alarm( cause == $cause, $source : source )
    Equipment( parent == 0, id  == $source)
then
    retract( $a );  // or anything else with $a
end

-W

On Thu, Jul 16, 2009 at 10:55 AM, Gab Aldian<aldian.gp at gmail.com> wrote:
> I finally suceeded to get what I wanted using the keyword accumulate
> which is really very poweful as said in the doc. Here is the rule:
> http://drools.pastebin.com/m4f938e40
>
> It is a little bit complex, but it perfectly works. The only
> observation I have is that it seems drools compatible jdk is < 1.5,
> since I tryed to declare my linkedlist this way: LinkedList<Alarm>(),
> but got warnings about the unexpected '<'. One other thing, the
> "implicit and" does not work in the accumulate, you have to put it
> clearly.
>
> Now I have something giving me the list I need, all should be easy I
> think. Do you have any observation on the way I did it?
>
> Cheers
>
> Aldian
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> http://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list