📄 mannersnative.java
字号:
Seating seating = (Seating) tuple.get( seatingDeclB );
System.out.println( "FIRE: find seating: " + seating + " " + guest );
Seating nextSeat = new Seating( seating.getSeat2( ),
guest,
seating );
try
{
workingMemory.assertObject( nextSeat );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
seating.setGuest2( guest );
seating.getTabooList( ).add( guest );
try
{
workingMemory.modifyObject( tuple.getFactHandleForObject( seating ),
seating );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
}
};
findSeatingRule.setConsequence( consequenceB );
ruleSet.addRule( findSeatingRule );
// ===========================================
// <rule name="try another path" salience="20">
// ===========================================
final Rule tryAnotherPathRule = new Rule( "try another path" );
tryAnotherPathRule.setSalience( 20 );
// 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 contextDeclC = tryAnotherPathRule.addParameterDeclaration( "context",
contextType );
// <parameter identifier="lastSeat">
// <class>org.drools.examples.manners.model.LastSeat</class>
// </parameter>
final Declaration lastSeatDeclC = tryAnotherPathRule.addParameterDeclaration( "lastSeat",
lastSeatType );
// <parameter identifier="seating">
// <class>org.drools.examples.manners.model.Seating</class>
// </parameter>
final Declaration seatingDeclC = tryAnotherPathRule.addParameterDeclaration( "seating",
seatingType );
// <java:condition>context.isState("find_seating")</java:condition>
final Condition conditionC1 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Context context = (Context) tuple.get( contextDeclC );
return context.isState( "find_seating" );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{contextDeclC};
}
public String toString()
{
return "context.isState(\"find_seating\")";
}
};
tryAnotherPathRule.addCondition( conditionC1 );
// <java:condition>lastSeat.getSeat() >
// seating.getSeat1()</java:condition>
final Condition conditionC2 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
LastSeat lastSeat = (LastSeat) tuple.get( lastSeatDeclC );
Seating seating = (Seating) tuple.get( seatingDeclC );
return lastSeat.getSeat( ) > seating.getSeat1( );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{lastSeatDeclC, seatingDeclC};
}
public String toString()
{
return "lastSeat.getSeat() > seating.getSeat1()";
}
};
tryAnotherPathRule.addCondition( conditionC2 );
// <java:condition>seating.getGuest2() == null</java:condition>
final Condition conditionC3 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Seating seating = (Seating) tuple.get( seatingDeclC );
return seating.getGuest2( ) == null;
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{seatingDeclC};
}
public String toString()
{
return "seating.getGuest2() == null";
}
};
tryAnotherPathRule.addCondition( conditionC3 );
// <java:consequence>
// System.out.println("FIRE: try another path: " + seating);
//
// Seating prevSeat = seating.getPrevSeat();
// prevSeat.setGuest2(null);
// drools.modifyObject(prevSeat);
//
// drools.retractObject(seating);
// </java:consequence>
final Consequence consequenceC = new Consequence( )
{
public void invoke(Tuple tuple) throws ConsequenceException
{
Seating seating = (Seating) tuple.get( seatingDeclC );
System.out.println( "FIRE: try another path: " + seating );
Seating prevSeat = seating.getPrevSeat( );
prevSeat.setGuest2( null );
try
{
workingMemory.modifyObject( tuple.getFactHandleForObject( prevSeat ),
prevSeat );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
try
{
workingMemory.retractObject( tuple.getFactHandleForObject( seating ) );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
}
};
tryAnotherPathRule.setConsequence( consequenceC );
ruleSet.addRule( tryAnotherPathRule );
// =======================================
// <rule name="we are done" salience="10">
// =======================================
final Rule weAreDoneRule = new Rule( "we are done" );
weAreDoneRule.setSalience( 10 );
// 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 contextDeclD = weAreDoneRule.addParameterDeclaration( "context",
contextType );
// <parameter identifier="lastSeat">
// <class>org.drools.examples.manners.model.LastSeat</class>
// </parameter>
final Declaration lastSeatDeclD = weAreDoneRule.addParameterDeclaration( "lastSeat",
lastSeatType );
// <parameter identifier="seating">
// <class>org.drools.examples.manners.model.Seating</class>
// </parameter>
final Declaration seatingDeclD = weAreDoneRule.addParameterDeclaration( "seating",
seatingType );
// <java:condition>context.isState("find_seating")</java:condition>
final Condition conditionD1 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
Context context = (Context) tuple.get( contextDeclD );
return context.isState( "find_seating" );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{contextDeclD};
}
public String toString()
{
return "context.isState(\"find_seating\")";
}
};
weAreDoneRule.addCondition( conditionD1 );
// <java:condition>lastSeat.getSeat() ==
// seating.getSeat1()</java:condition>
final Condition conditionD2 = new Condition( )
{
public boolean isAllowed(Tuple tuple)
{
LastSeat lastSeat = (LastSeat) tuple.get( lastSeatDeclD );
Seating seating = (Seating) tuple.get( seatingDeclD );
return lastSeat.getSeat( ) == seating.getSeat1( );
}
public Declaration[] getRequiredTupleMembers()
{
return new Declaration[]{lastSeatDeclD, seatingDeclD};
}
public String toString()
{
return "lastSeat.getSeat() == seating.getSeat1()";
}
};
weAreDoneRule.addCondition( conditionD2 );
// <java:consequence>
// System.out.println("FIRE: we are done");
//
// import org.drools.examples.manners.model.Seat;
// List list = new ArrayList();
// while(seating != null) {
// Seat seat = new Seat(seating.getSeat1(),
// seating.getGuest1().getName());
// seating = seating.getPrevSeat();
// list.add(seat);
// }
//
// for (int i = list.size(); i > 0; i--) {
// Seat seat = (Seat)list.get(i-1);
// System.out.println(seat);
// drools.assertObject(seat);
// }
//
// context.setState("all_done");
// drools.modifyObject(context);
// </java:consequence>
final Consequence consequenceD = new Consequence( )
{
public void invoke(Tuple tuple) throws ConsequenceException
{
System.out.println( "FIRE: we are done" );
Seating seating = (Seating) tuple.get( seatingDeclD );
Context context = (Context) tuple.get( contextDeclD );
List list = new ArrayList( );
while ( seating != null )
{
Seat seat = new Seat( seating.getSeat1( ),
seating.getGuest1( ).getName( ) );
seating = seating.getPrevSeat( );
list.add( seat );
}
for ( int i = list.size( ); i > 0; i-- )
{
Seat seat = (Seat) list.get( i - 1 );
System.out.println( seat );
try
{
workingMemory.assertObject( seat );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
}
context.setState( "all_done" );
try
{
workingMemory.modifyObject( tuple.getFactHandleForObject( context ),
context );
}
catch ( FactException e )
{
throw new ConsequenceException( e );
}
}
};
weAreDoneRule.setConsequence( consequenceD );
ruleSet.addRule( weAreDoneRule );
// ==================
// Build the RuleSet.
// ==================
RuleBaseBuilder builder = new RuleBaseBuilder( );
builder.addRuleSet( ruleSet );
RuleBase ruleBase = builder.build( );
workingMemory = ruleBase.newWorkingMemory( );
}
protected void tearDown() throws Exception
{
workingMemory = null;
}
protected List test(List inList) throws Exception
{
for ( Iterator i = inList.iterator( ); i.hasNext( ); )
{
workingMemory.assertObject( i.next( ) );
}
workingMemory.fireAllRules( );
return workingMemory.getObjects( );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -