📄 waltz.drl
字号:
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( edge1.getLabel( ) );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-2B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP3( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge3.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( edge1.getLabel( ) );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-3A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "-" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-3B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge3.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "-" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-4A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP3( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge3.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "-" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-4B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP3( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge3.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge3.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "-" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-5A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP2( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"-".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge3.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-5B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP2( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP1( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"-".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<!--
The conflict resolution mechanism will only execute a production if no
productions that are more complicated are satisfied. This production is
simple, so all of the above dictionary productions will fire before this
change of state production
-->
<rule name="done_labeling">
<parameter identifier="stage"><class>Stage</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:consequence>
stage.setValue( "plot_remaining_edges" );
drools.modifyObject( stage );
</java:consequence>
</rule>
<!--
At this point, some labellings may have not been plotted, so plot them
-->
<rule name="plot_remaining">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="edge"><class>Edge</class></parameter>
<java:condition>"plot_remaining_edges".equals( stage.getValue( ) )</java:condition>
<java:condition>!edge.isPlotted( )</java:condition>
<java:condition>null != edge.getLabel( )</java:condition>
<java:consequence>
System.out.println( "plot " + edge.getLabel( ) + " " + edge.getP1( ) + " " + edge.getP2( ) );
edge.setPlotted( true );
drools.modifyObject( edge );
</java:consequence>
</rule>
<!--
If we have been unable to label an edge, assume that it is a boundary.
This is a total Kludge, but what the hell. (if we assume only valid drawings
will be given for labeling, this assumption generally is true!)
-->
<rule name="plot_boundaries">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="edge"><class>Edge</class></parameter>
<java:condition>"plot_remaining_edges".equals( stage.getValue( ) )</java:condition>
<java:condition>!edge.isPlotted( )</java:condition>
<java:condition>null == edge.getLabel( )</java:condition>
<java:consequence>
System.out.println( "plot B " + edge.getP1( ) + " " + edge.getP2( ) );
edge.setPlotted( true );
drools.modifyObject( edge );
</java:consequence>
</rule>
<!--
If there is no more work to do, then we are done and flag it.
-->
<rule name="done_plotting">
<parameter identifier="stage"><class>Stage</class></parameter>
<java:condition>"plot_remaining_edges".equals( stage.getValue( ) )</java:condition>
<java:consequence>
if ( WaltzWMEL.plottedEdgeExists( ) ) return;
stage.setValue( "done" );
drools.modifyObject( stage );
</java:consequence>
</rule>
<!--
Prompt the user as to where he can see a trace of the OPS5
execution
-->
<rule name="done">
<parameter identifier="stage"><class>Stage</class></parameter>
<java:condition>"done".equals( stage.getValue( ) )</java:condition>
<java:consequence>
//System.out.println( "see trace.waltz for description of execution- hit CR to end" );
drools.clearAgenda( );
</java:consequence>
</rule>
</rule-set>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -