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

📄 manners.drl

📁 drools 一个开放源码的规则引擎
💻 DRL
字号:
<?xml version="1.0" encoding="UTF-8"?>

<rule-set name="Miss Manners"
        xmlns="http://drools.org/rules"
        xmlns:java="http://drools.org/semantics/java"
        xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:schemaLocation="http://drools.org/rules rules.xsd
                           http://drools.org/semantics/java java.xsd">

    <import>org.drools.examples.benchmarks.manners.MannersWMEL</import>
    <import>org.drools.examples.benchmarks.manners.model.Chosen</import>
    <import>org.drools.examples.benchmarks.manners.model.Context</import>
    <import>org.drools.examples.benchmarks.manners.model.Count</import>
    <import>org.drools.examples.benchmarks.manners.model.Guest</import>
    <import>org.drools.examples.benchmarks.manners.model.LastSeat</import>
    <import>org.drools.examples.benchmarks.manners.model.Path</import>
    <import>org.drools.examples.benchmarks.manners.model.Seating</import>

    <rule name="assign_first_seat">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="guest"><class>Guest</class></parameter>
        <parameter identifier="count"><class>Count</class></parameter>
        <java:condition>context.isState( "start" )</java:condition>
        <java:consequence>
            String n = guest.getName( );
            int c = count.getC( );

            drools.assertObject( new Seating( c, 0, 1, n, 1, n, true ) );
            drools.assertObject( new Path( c, n, 1 ) );
            count.setC( c + 1 );
            drools.modifyObject( count );
            System.out.println( "seat 1 " + n + " " + n + " 1 " + c + " 0 1" );
            context.setState( "assign_seats" );
            drools.modifyObject( context );
        </java:consequence>
    </rule>

    <rule name="find_seating">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="seating"><class>Seating</class></parameter>
        <parameter identifier="guest1"><class>Guest</class></parameter>
        <parameter identifier="guest2"><class>Guest</class></parameter>
        <parameter identifier="count"><class>Count</class></parameter>
        <java:condition>context.isState( "assign_seats" )</java:condition>
        <java:condition>seating.isPathDone( )</java:condition>
        <java:condition>guest1.getName( ).equals( seating.getName2(  ) )</java:condition>
        <java:condition>guest2.getSex( ) != guest1.getSex( )</java:condition>
        <java:condition>guest2.getHobby( ).equals( guest1.getHobby( ) )</java:condition>
        <java:consequence>
            int c = count.getC( );
            int id = seating.getId( );
            String g2 = guest2.getName( );
            String h1 = guest1.getHobby( );
            int seat2 = seating.getSeat2( );
            String n2 = seating.getName2( );

            if ( MannersWMEL.pathExists( id, g2 ) ) return;
            if ( MannersWMEL.chosenExists( id, g2, h1 ) ) return;

            drools.assertObject( new Seating( c, id, seat2, n2, seat2+1, g2, false ) );
            drools.assertObject( new Path( c, g2, seat2+1 ) );
            drools.assertObject( new Chosen( id, g2, h1 ) );
            count.setC( c + 1 );
            drools.modifyObject( count );
            System.out.println( "seat " + seat2 + " " + n2 + " " + g2 );
            context.setState( "make_path" );
            drools.modifyObject( context );
        </java:consequence>
    </rule>

    <rule name="make_path">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="seating"><class>Seating</class></parameter>
        <parameter identifier="path"><class>Path</class></parameter>
        <java:condition>context.isState( "make_path" )</java:condition>
        <java:condition>!seating.isPathDone( )</java:condition>
        <java:condition>path.getId( ) == seating.getPid( )</java:condition>
        <java:consequence>
            int id = seating.getId( );
            String n1 = path.getName( );

            if ( MannersWMEL.pathExists( id, n1 ) ) return;

            drools.assertObject( new Path( id, n1, path.getSeat( ) ) );
        </java:consequence>
    </rule>

    <rule name="path_done">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="seating"><class>Seating</class></parameter>
        <java:condition>context.isState( "make_path" )</java:condition>
        <java:condition>!seating.isPathDone( )</java:condition>
        <java:consequence>
            seating.setPathDone( true );
            drools.modifyObject( seating );
            context.setState( "check_done" );
            drools.modifyObject( context );
        </java:consequence>
    </rule>

    <rule name="are_we_done">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="lastSeat"><class>LastSeat</class></parameter>
        <parameter identifier="seating"><class>Seating</class></parameter>
        <java:condition>context.isState( "check_done" )</java:condition>
        <java:condition>seating.getSeat2( ) == lastSeat.getSeat( )</java:condition>
        <java:consequence>
            System.out.println( );
            System.out.println( "Yes, we are done!!" );
            context.setState( "print_results" );
            drools.modifyObject( context );
        </java:consequence>
    </rule>

    <rule name="continue">
        <parameter identifier="context"><class>Context</class></parameter>
        <java:condition>context.isState( "check_done" )</java:condition>
        <java:consequence>
            context.setState( "assign_seats" );
            drools.modifyObject( context );
        </java:consequence>
    </rule>

    <rule name="print_results">
        <parameter identifier="context"><class>Context</class></parameter>
        <parameter identifier="seating"><class>Seating</class></parameter>
        <parameter identifier="lastSeat"><class>LastSeat</class></parameter>
        <parameter identifier="path"><class>Path</class></parameter>
        <java:condition>context.isState( "print_results" )</java:condition>
        <java:condition>lastSeat.getSeat( ) == seating.getSeat2( )</java:condition>
        <java:condition>path.getId( ) == seating.getId( )</java:condition>
        <java:consequence>
            drools.retractObject( path );
            System.out.println( path.getName( ) + " " + path.getSeat( ) );
        </java:consequence>
    </rule>

    <rule name="all_done">
        <parameter identifier="context"><class>Context</class></parameter>
        <java:condition>context.isState( "print_results" )</java:condition>
        <java:consequence>
            drools.clearAgenda( );
        </java:consequence>
    </rule>

</rule-set>

⌨️ 快捷键说明

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