⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waltz.drl

📁 drools 一个开放源码的规则引擎
💻 DRL
📖 第 1 页 / 共 3 页
字号:
            edge3.setLabel( "B" );
            drools.modifyObject( edge3 );
            stage.setValue( "labeling" );
            drools.modifyObject( stage );
        </java:consequence>
    </rule>

    <!--
    If we have an edge whose label we already know definitely, then
    label the corresponding edge in the other direction
    -->
    <rule name="match_edge">
        <parameter identifier="stage"><class>Stage</class></parameter>
        <parameter identifier="edge1"><class>Edge</class></parameter>
        <parameter identifier="edge2"><class>Edge</class></parameter>
        <java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
        <java:condition>edge1.getP1( ) == edge2.getP2( )</java:condition>
        <java:condition>edge1.getP2( ) == edge2.getP1( )</java:condition>
        <java:condition>"+".equals( edge1.getLabel( ) )
                     || "-".equals( edge1.getLabel( ) )
                     || "B".equals( edge1.getLabel( ) )
        </java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            int p1 = edge1.getP1( );
            int p2 = edge1.getP2( );
            String label = edge1.getLabel( );
            edge1.setPlotted( true );
            drools.modifyObject( edge1 );
            edge2.setPlotted( true );
            edge2.setLabel( label );
            drools.modifyObject( edge2 );
            System.out.println( "plot " + label + " " + p1 + " " + p2 );
        </java:consequence>
    </rule>

    <!--
    The following productions propogate the possible labellings of the edges
    based on the labellings of edges incident on adjacent junctions.  Since
    from the initial boundary productions, we have determined the labellings of
    of atleast two junctions, this propogation will label all of the junctions
    with the possible labellings.  The search space is pruned due to filtering,
    i.e. - only label a junction in the ways physically possible based on the
    labellings of adjacent junctions.
    -->

    <rule name="label_L">
        <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>
        <java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
        <java:condition>"L".equals( junction.getType( ) )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
        <java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
        <java:condition>"+".equals( edge1.getLabel( ) )
                     || "-".equals( edge1.getLabel( ) )
        </java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            edge2.setLabel( "B" );
            drools.modifyObject ( edge2 );
        </java:consequence>
    </rule>

    <rule name="label_tee_A">
        <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>
        <java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
        <java:condition>"tee".equals( junction.getType( ) )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
        <java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
        <java:condition>junction.getP3( ) == edge2.getP2( )</java:condition>
        <java:condition>null == edge1.getLabel( )</java:condition>
        <java:consequence>
            edge1.setLabel( "B" );
            drools.modifyObject ( edge1 );
            edge2.setLabel( "B" );
            drools.modifyObject ( edge2 );
        </java:consequence>
    </rule>

    <rule name="label_tee_B">
        <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>
        <java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
        <java:condition>"tee".equals( junction.getType( ) )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
        <java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
        <java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
        <java:condition>junction.getP3( ) == edge2.getP2( )</java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            edge1.setLabel( "B" );
            drools.modifyObject ( edge1 );
            edge2.setLabel( "B" );
            drools.modifyObject ( edge2 );
        </java:consequence>
    </rule>

    <rule name="label_fork-1">
        <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>"fork".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>edge1.getP2( ) != edge2.getP2( )</java:condition>
        <java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>edge2.getP2( ) != 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_fork-2">
        <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>"fork".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>edge1.getP2( ) != edge2.getP2( )</java:condition>
        <java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>"B".equals( edge1.getLabel( ) )</java:condition>
        <java:condition>"-".equals( edge2.getLabel( ) )</java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            edge3.setLabel( "B" );
            drools.modifyObject ( edge3 );
        </java:consequence>
    </rule>

    <rule name="label_fork-3">
        <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>"fork".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>edge1.getP2( ) != edge2.getP2( )</java:condition>
        <java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>"B".equals( edge1.getLabel( ) )</java:condition>
        <java:condition>"B".equals( edge2.getLabel( ) )</java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            edge3.setLabel( "-" );
            drools.modifyObject ( edge3 );
        </java:consequence>
    </rule>

    <rule name="label_fork-4">
        <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>"fork".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>edge1.getP2( ) != edge2.getP2( )</java:condition>
        <java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
        <java:condition>"-".equals( edge1.getLabel( ) )</java:condition>
        <java:condition>"-".equals( edge2.getLabel( ) )</java:condition>
        <java:condition>null == edge2.getLabel( )</java:condition>
        <java:consequence>
            edge3.setLabel( "-" );
            drools.modifyObject ( edge3 );
        </java:consequence>
    </rule>

    <rule name="label_arrow-1A">
        <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>"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-1B">
        <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>"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-2A">
        <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>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -