Looks nice.
Can we use normal snippets as an alternative to the "short" syntax below? In
that case, how does one specify the parameter bindings?
also, the drools.assertObject(): would be nice to have a dedicated keyword
for this (can still use the knowledge helper if you like as well).
I am also interested to see what the "or" looks like.
On 12/10/05, Mark Proctor <[EMAIL PROTECTED]> wrote:
>
> I've just coded up in the Drools 3.0 rule language. Bindings are
> specified locally and application data is specified as arguments to the
> rule. This example shows a converted Miss Manners, so application data
> is not used:
>
> public class Guest {
> private String name;
> private char sex;
> private String hobby;
> ...
> }
>
> public class LastSeat {
> private int seat;
> ...
> }
>
> public class Seating {
> private int id;
> private int pid;
> private int leftSeat;
> private int rightSeat;
> private String leftName;
> private String rightName;
> private boolean pathDone;
> ...
> }
>
> public class Path {
> private int id;
> private String name;
> private int seat;
> ...
> }
>
> public class Chosen {
> private int id;
> private String name;
> private String hobby;
> ...
> }
>
> public class Count {
> private int value;
> ...
> }
>
> rule assignFirstSeat() {
> Context context;
> when {
> context : Context( state == Context.START_UP )
> Guest( guestName:name )
> count : Count(countValue:value)
> } then {
> drools.assert( new Seating( 1, guestName, 2, guestName,
> countValue, 0, true ) );
> drools.assert( new Path( countValue, guestName, 1 ) );
> count.setCount( countValue + 1 );
>
> ystem.out.println( "seat 1 " + guestName + " );
>
> context.setPath( Context.ASSIGN_SEATS );
> }
> }
>
> rule makePath() {
> Context context;
> int id, pid, leftSeat, rightSeat;
> String pathName;
>
> when {
> context : Context( state == Context.MAKE_PATH )
> Seat( id:id, pid:pid )
> Path( id == pid, pathName:name, pathSeat:seat )
> (not Path( id == id, name == pathName )
> } else {
> drools.assert( new Path( id, pathName, pathSeat ) );
>
> }
> }
>
> rule findSeating() {
> Context context;
> int id, pid, leftSeat, rightSeat;
> String leftSeatName, rightSeatName, leftGuestName, rightGuestHobby;
>
> when {
> context : Context( state == Context.START )
> Seating( id:id, pid:pid, leftSeat:leftSeat, leftSeatName:leftName,
> rightSeat:rightSeat, rightSeatName:rightName, pathDone ==
> true )
> Guest( name == rightSeatName, rightGuestSex:sex,
> rightGuestHobby:hobby )
> Guest( leftGuestName:name , sex != rightGuestSex, hobby ==
> rightGuestHobby )
>
> count : Count(countValue:value)
>
> not ( Path( id == id, name == leftGuestName) )
> not ( Chosen( id == id, name == leftGuestName, hobby ==
> rightGuestHobby) )
> } then {
> int newSeat = rightSeat + 1;
> drools.assert( new Seating( rightSeat, rightSeatName,
> leftGuestName, newSeat, countValue, id, false );
> drools.assert( new Path( countValue, leftGuestName, newSeat );
> drools.assert( new Chosen( id, leftGuestName, rightGuestHobby ) );
>
> System.out.println( "seat " + rightSeat + " " + rightSeatName +
> " " + leftGuestName );
>
> count.setCount( countValue + 1 );
> context.setPath( Context.MAKE_PATH );
> }
> }
>
> rule pathDone() {
> Context context;
> Seat seat;
> when {
> context : Context( state == Context.MAKE_PATH )
> seating : Seating( pathDone == false )
> } then {
> seating.setPathDone( true );
> context.setName( Context.CHECK_DONE );
> }
> }
>
> rule areWeDoneYet() {
> Context context;
> when {
> context : Context( state == Context.CHECK_DONE )
> LastSeat( lastSeat: seat )
> Seating( seat == lastSeat )
> } then {
> context.setName( Context.PRINT_RESULTS );
> }
> }
>
> rule continueProcessing {
> Context context;
> when {
> context : Context( state == Context.CHECK_DONE )
> } then {
> context.setName( Context.ASSIGN_SEATS);
> }
> }
>
> rule printResults() {
> Context context;
> when {
> context : Context( state == Context.PRINT_RESULTS )
> Seating( id: id, rightSeat:rightSeat )
> LastSeat( seat == rightSeat )
> path:Path( id == id, pathName:name, pathSeat:seat)
> } then {
> System.out.println( "name : '" + pathName + "' seat : '" +
> pathSeat + "'" );
> }
> }
>
> rule allDone {
> Context context;
> when {
> context : Context( state == Context.PRINT_RESULTS )
> } then {
> System.out.println( "rule all done: Condition context
> print_results" );
> }
> }
>
>