AW: [rules-users] How to avoid circular rule activationfornoncircular problems?
Ralph Ammon
ralph.ammon at lisytec.de
Fri Jul 25 09:09:43 EDT 2008
Thank you,
my problem is solved, the following rules work for all my test cases:
rule "Calc EndTime"
when
$t : Task( endTime != ( startTime + duration) )
then
$t.setEndTime( $t.getStartTime() + $t.getDuration() );
System.out.println( "Drools: Set " + $t.getName() + ".EndTime to " + $t.getEndTime() );
update( $t );
end
rule "Calc StartTime without predecessors"
when
$t : Task( predecessorCount == 0, startTime > 0 )
then
$t.setStartTime( 0 );
System.out.println( "Drools: " + $t.toString() + " can start immediately" );
update( $t );
end
rule "Calc StartTime with predecessors"
when
$t : Task( predecessorCount > 0, $oldStart : startTime, $predecessors : predecessors )
$predTask : Task( this memberOf $predecessors, endTime > $oldStart )
then
$t.setStartTime( $predTask.getEndTime() );
System.out.println( "Drools: " + $t.toString() + " has new StartTime" );
update( $t );
end
rule "Reset StartTime with predecessors"
when
$t : Task( predecessorCount > 0, $oldStart : startTime, $predecessors : predecessors )
forall( $predTask : Task( this memberOf $predecessors )
Task( this == $predTask, endTime < $oldStart) )
then
$t.setStartTime( 0 );
System.out.println( "Drools: " + $t.toString() + " reset StartTime" );
update( $t );
end
Best regards
Ralph
More information about the rules-users
mailing list