virt2/assets/vendor_plugins/ace-builds-master/demo/kitchen-sink/docs/drools.drl

128 lines
3.0 KiB
Plaintext
Executable File

/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
Original source
https://github.com/droolsjbpm/drools/blob/master/drools-examples/
http://docs.jboss.org/drools/
*/
package com.example.ace
import java.math.BigDecimal
import function my.package.Foo.hello
declare FactType
@author( Bob )
id : String
name : String @maxLength(100) @notnull
value : BigDecimal
end
declare FactType2 extends AnotherType
end
declare trait TraitType extends com.package.AnotherType
end
declare trait GoldenCustomer
balance : long @Alias( "org.acme.foo.accountBalance" )
end
global org.slf4j.Logger logger
/**
* @param name who we'll salute?
*/
function String hello(String name) {
return "Hello "+name+"!";
}
rule "Trim all strings"
dialect "java"
no-loop
when // fdsfds
$s : String(a == null || == "empty", $g : size)
Cheese( name matches "(Buffalo)?\\S*Mozarella" )
CheeseCounter( cheeses contains $var ) // contains with a variable
CheeseCounter( cheese memberof $matureCheeses )
Cheese( name soundslike 'foobar' )
Message( routingValue str[startsWith] "R1" )
Cheese( name in ( "stilton", "cheddar", $cheese ) )
Person( eval( age == girlAge + 2 ), sex = 'M' )
then
/**
* TODO There mus be better way
*/
retract($s);
String a = "fd";
a.toString();
insert($s.trim());
end
query isContainedIn( String x, String y )
Location( x, y; )
or
( Location( z, y; ) and isContainedIn( x, z; ) )
end
rule "go" salience 10
when
$s : String( )
then
System.out.println( $s );
end
rule "When all English buses are not red"
when
not(forall( $bus : Bus( nationality == 'english')
Bus( this == $bus, color = 'red' ) ))
then
// What if all english buses are not red?
end
rule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "office is in the house" );
end
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw in the House" );
end
/**
* Go Right
*/
rule GoRight dialect "mvel" salience (Math.abs( $df.colDiff )) when
$df : DirectionDiff(colDiff > 0 )
$target : Cell( row == $df.row, col == ($df.col + 1) )
CellContents( cell == $target, cellType != CellType.WALL )
not Direction(character == $df.fromChar, horizontal == Direction.RIGHT )
then
System.out.println( "monster right" );
retract( $df );
insert( new Direction($df.fromChar, Direction.RIGHT, Direction.NONE ) );
end