public void invoke(Tuple tuple) throws ConsequenceException
{
WorkingMemory workingMemory = tuple.getWorkingMemory( );
Context context = (Context) tuple.get( contextDeclA );
Guest guest = (Guest) tuple.get( guestDeclA );
try
{
workingMemory.assertObject( new Seating( 1,
guest,
null ) );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
context.setState( "find_seating" );
try
{
workingMemory.modifyObject( tuple.getFactHandleForObject( context ),
context );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
}
};
findFirstSeatRule.setConsequence( consequenceA );
ruleSet.addRule( findFirstSeatRule );
// ========================================
// <rule name="find seating" salience="30">
// ========================================
final Rule findSeatingRule = new Rule( "find seating" );
findSeatingRule.setSalience( 30 );
// Build the declaration and specify it as a parameter of the Rule
// <parameter identifier="context">
// <class>org.drools.examples.manners.model.Context</class>
// </parameter>
final Declaration contextDeclB = findSeatingRule.addParameterDeclaration( "context",
contextType );
// <parameter identifier="guest">
// <class>org.drools.examples.manners.model.Guest</class>
// </parameter>
final Declaration guestDeclB = findSeatingRule.addParameterDeclaration( "guest",
guestType );
// <parameter identifier="seating">
// <class>org.drools.examples.manners.model.Seating</class>
// </parameter>
final Declaration seatingDeclB = findSeatingRule.addParameterDeclaration( "seating",
seatingType );
// Build and Add the Condition to the Rule
// <java:condition>context.isState("find_seating")</java:condition>
final Condition conditionB1 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Context context = (Context) tuple.get( contextDeclB );
return context.isState( "find_seating" );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{contextDeclB};
}
public String toString()
{
return "context.isState(\"find_seating\")";
}
};
findSeatingRule.addCondition( conditionB1 );
// <java:condition>seating.getGuest2() == null</java:condition>
final Condition conditionB2 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Seating seating = (Seating) tuple.get( seatingDeclB );
return seating.getGuest2( ) == null;
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{seatingDeclB};
}
public String toString()
{
return "seating.getGuest2() == null";
}
};
findSeatingRule.addCondition( conditionB2 );
// <java:condition>!seating.getTabooList().contains(guest)</java:condition>
final Condition conditionB3 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Seating seating = (Seating) tuple.get( seatingDeclB );
Guest guest = (Guest) tuple.get( guestDeclB );
return !seating.getTabooList( ).contains( guest );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{seatingDeclB, guestDeclB};
}
public String toString()
{
return "!seating.getTabooList().contains(guest)";
}
};
findSeatingRule.addCondition( conditionB3 );
// <java:condition>seating.getGuest1().hasOppositeSex(guest)</java:condition>
final Condition conditionB4 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Seating seating = (Seating) tuple.get( seatingDeclB );
Guest guest = (Guest) tuple.get( guestDeclB );
return seating.getGuest1( ).hasOppositeSex( guest );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{seatingDeclB, guestDeclB};
}
public String toString()
{
return "seating.getGuest1().hasOppositeSex(guest)";
}
};
findSeatingRule.addCondition( conditionB4 );
// <java:condition>seating.getGuest1().hasSameHobby(guest)</java:condition>
final Condition conditionB5 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Seating seating = (Seating) tuple.get( seatingDeclB );
Guest guest = (Guest) tuple.get( guestDeclB );
return seating.getGuest1( ).hasSameHobby( guest );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{seatingDeclB, guestDeclB};
}
public String toString()
{
return "seating.getGuest1().hasSameHobby(guest)";
}
};
findSeatingRule.addCondition( conditionB5 );
// Build and Add the Consequence to the Rule
// <java:consequence>
// System.out.println("FIRE: find seating: " + seating + " " + guest);
//
// Seating nextSeat = new Seating(seating.getSeat2(), guest, seating);
// drools.assertObject(nextSeat);
//
// seating.setGuest2(guest);
// seating.getTabooList().add(guest);
// drools.modifyObject(seating);
// </java:consequence>
final Consequence consequenceB = new Consequence( )
{
public void invoke(Tuple tuple) throws ConsequenceException
{
WorkingMemory workingMemory = tuple.getWorkingMemory( );
Guest guest = (Guest) tuple.get( guestDeclB );
Seating seating = (Seating) tuple.get( seatingDeclB );
Seating nextSeat = new Seating( seating.getSeat2( ),
guest,
seating );