remove groovy tutorials
parent
641f10938a
commit
f8487f7242
@ -1,125 +0,0 @@
|
||||
//=============================================================================================
|
||||
// U S A G E ================================================================================
|
||||
//=============================================================================================
|
||||
|
||||
task usage doLast { print """${'='*90}
|
||||
Easy Rules Tutorials (http://www.easyrules.org)
|
||||
|
||||
NB: Use '--quiet' or '-q' to supress Gradle build output lines
|
||||
|
||||
./gradlew FizzBuzz
|
||||
Baseline FizzBuzz using code.
|
||||
Prints the numbers from 1 to 100. But for multiples of 3 print 'Fizz' instead
|
||||
of the number and for the multiples of 5 print 'Buzz'. For numbers which are
|
||||
multiples of both three and five print 'FizzBuzz'.
|
||||
|
||||
./gradlew FizzBuzzER
|
||||
FizzBuzz implementation using EasyRules.
|
||||
|
||||
./gradlew Simple
|
||||
Very simple EasyRules examples with one, always true, rule.
|
||||
|
||||
./gradlew HelloWorld -q
|
||||
Obligatory 'Hello, world' example where the input is evaluated by a rule.
|
||||
|
||||
./gradlew Fire -q
|
||||
Copied from DROOLS examples. Create some rooms with sprinklers, start a fire.
|
||||
The sprinklers will turn on an alarm will be raised. Put out the fire, the
|
||||
sprinklers will turn off and the alarm will be silenced.
|
||||
|
||||
./gradlew Shop -P person=Tommy -P age=15
|
||||
Rule to evaluate drinking age (US 21); Name and age can be passed in via the command line
|
||||
or system properties; Default is 'Tom' at age '17'.
|
||||
|
||||
./gradlew clean
|
||||
Remove all reports and artifacts from './$project.buildDir.name'
|
||||
|
||||
${'='*90}
|
||||
"""}
|
||||
|
||||
//============================================================================================
|
||||
// P L U G I N S ===========================================================================
|
||||
//============================================================================================
|
||||
|
||||
|
||||
apply plugin: 'groovy'
|
||||
|
||||
|
||||
//=============================================================================================
|
||||
// C O N F I G U R A T I O N =================================================================
|
||||
//=============================================================================================
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
targetCompatibility = sourceCompatibility
|
||||
|
||||
//=============================================================================================
|
||||
// R e p o s i t o r i e s & D e p e n d e n c i e s ====================================
|
||||
//=============================================================================================
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
def easyRules = '2.4.0' // Apr 2017
|
||||
def spring = '4.3.6.RELEASE' // Apr 2017
|
||||
def groovy = '2.4.10' // Apr 2017
|
||||
|
||||
compile ([
|
||||
"org.easyrules:easyrules-core:$easyRules",
|
||||
"org.easyrules:easyrules-quartz:$easyRules",
|
||||
"org.easyrules:easyrules-spring:$easyRules",
|
||||
"org.springframework:spring-context-support:$spring",
|
||||
"org.codehaus.groovy:groovy-all:$groovy"
|
||||
])
|
||||
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
compile {
|
||||
groovy {
|
||||
srcDirs = ['src/main/groovy']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//============================================================================================
|
||||
// R U N T U T O R I A L S ===============================================================
|
||||
//============================================================================================
|
||||
|
||||
tasks.withType(JavaExec) {
|
||||
standardInput = System.in
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
}
|
||||
|
||||
task FizzBuzz (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.fizzbuzz.FizzBuzz'
|
||||
}
|
||||
|
||||
task FizzBuzzER (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.fizzbuzz.FizzBuzzWithEasyRules'
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
}
|
||||
task Simple (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.simple.Launcher'
|
||||
}
|
||||
|
||||
task HelloWorld (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.helloworld.Launcher'
|
||||
}
|
||||
|
||||
task Fire (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.fire.Launcher'
|
||||
}
|
||||
|
||||
task Shop (dependsOn: 'classes', type: JavaExec) {
|
||||
main = 'org.easyrules.samples.shop.Launcher'
|
||||
args = [
|
||||
findProperty('person') ?: 'Tom',
|
||||
findProperty('age') ?: '17'
|
||||
]
|
||||
}
|
Binary file not shown.
@ -1,6 +0,0 @@
|
||||
#Mon May 15 07:42:47 EDT 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip
|
@ -1,172 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save ( ) {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
@ -1,84 +0,0 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
@ -1,76 +0,0 @@
|
||||
package org.easyrules.samples.fire
|
||||
|
||||
import org.easyrules.samples.fire.rules.*
|
||||
import org.easyrules.samples.fire.beans.*
|
||||
|
||||
|
||||
import static RulesEngineBuilder.aNewRulesEngine as EasyRules
|
||||
|
||||
class Launcher {
|
||||
|
||||
static void main(String... args) {
|
||||
|
||||
def label = 'FIRE ALARM'.replaceAll(/./){it+' '}
|
||||
def width = 80
|
||||
|
||||
println """${'='*width}
|
||||
|${label.center width }
|
||||
|${'='*width}""".stripMargin()
|
||||
|
||||
|
||||
// Define some room names
|
||||
def names = ['Kitchen', 'Bedroom', 'Office', 'Livingroom']
|
||||
|
||||
// Create the rooms for each name; Install a sprinkler system in each room; Add to the World
|
||||
def rooms = [:]
|
||||
def theWorld = new TheWorld()
|
||||
|
||||
names.each { name ->
|
||||
rooms[name] = new Room(name)
|
||||
theWorld.sprinklers << new Sprinkler(rooms[name])
|
||||
}
|
||||
|
||||
|
||||
// Create the rules engine
|
||||
def rulesEngine = EasyRules()
|
||||
.named("Fire Alarm Demo")
|
||||
.build()
|
||||
|
||||
// Register all of the rules
|
||||
rulesEngine.registerRule(new EverythingOKRule(theWorld:theWorld))
|
||||
rulesEngine.registerRule(new RaiseAlarmRule(theWorld:theWorld))
|
||||
rulesEngine.registerRule(new CancelAlarmRule(theWorld:theWorld))
|
||||
rulesEngine.registerRule(new ThereIsAnAlarmRule(theWorld:theWorld))
|
||||
rulesEngine.registerRule(new TurnSprinklerOnRule(theWorld:theWorld))
|
||||
rulesEngine.registerRule(new TurnSprinklerOffRule(theWorld:theWorld))
|
||||
|
||||
// Fire the rules
|
||||
rulesEngine.fireRules()
|
||||
|
||||
pause('Start some fires')
|
||||
|
||||
def kitchenFire = new Fire( rooms['Kitchen'] )
|
||||
def officeFire = new Fire( rooms['Office'] )
|
||||
|
||||
theWorld.fires << kitchenFire
|
||||
theWorld.fires << officeFire
|
||||
|
||||
// Fire the rules
|
||||
rulesEngine.fireRules()
|
||||
|
||||
pause('Put out the fires')
|
||||
theWorld.fires.remove kitchenFire
|
||||
theWorld.fires.remove officeFire
|
||||
|
||||
// Fire the rules
|
||||
rulesEngine.fireRules()
|
||||
|
||||
}
|
||||
|
||||
public static void pause(message) {
|
||||
println "\n>>>>>> Press enter to '$message' <<<<<<"
|
||||
def keyboard = new Scanner(System.in)
|
||||
keyboard.nextLine()
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package org.easyrules.samples.fire
|
||||
|
||||
@groovy.transform.TupleConstructor
|
||||
@groovy.transform.EqualsAndHashCode
|
||||
@groovy.transform.ToString(includePackage = false, includeNames = true)
|
||||
class TheWorld {
|
||||
|
||||
def sprinklers = []
|
||||
def alarm = null
|
||||
def fires = []
|
||||
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package org.easyrules.samples.fire.beans
|
||||
|
||||
|
||||
@groovy.transform.TupleConstructor
|
||||
@groovy.transform.EqualsAndHashCode
|
||||
@groovy.transform.ToString(includePackage = false, includeNames = true)
|
||||
class Alarm {
|
||||
def address
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
package org.easyrules.samples.fire.beans
|
||||
|
||||
@groovy.transform.TupleConstructor
|
||||
@groovy.transform.EqualsAndHashCode
|
||||
@groovy.transform.ToString(includePackage = false, includeNames = true)
|
||||
class Fire {
|
||||
def room;
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
package org.easyrules.samples.fire.beans
|
||||
|
||||
@groovy.transform.TupleConstructor
|
||||
@groovy.transform.EqualsAndHashCode
|
||||
@groovy.transform.ToString(includePackage = false, includeNames = true)
|
||||
class Room {
|
||||
def name;
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package org.easyrules.samples.fire.beans
|
||||
|
||||
@groovy.transform.TupleConstructor
|
||||
@groovy.transform.EqualsAndHashCode
|
||||
@groovy.transform.ToString(includePackage = false, includeNames = true)
|
||||
class Sprinkler {
|
||||
def room;
|
||||
def on = false;
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='All the fires are out, cancel the alarm')
|
||||
class CancelAlarmRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.alarm && theWorld.fires.size() == 0
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
println( "Cancel the Alarm");
|
||||
theWorld.alarm = null
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 1 }
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='No alarm, nothing to see here; This need to be last rule considered')
|
||||
class EverythingOKRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.alarm == null
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
println 'At the Fire Station: Everything is OK'
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 15 }
|
||||
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import org.easyrules.samples.fire.beans.Alarm
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='A fire will raise an alarm')
|
||||
class RaiseAlarmRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.fires.size() > 0
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
theWorld.alarm = new Alarm('123 Main Street')
|
||||
println( "Raise the Alarm");
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 2 }
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='The alarm is detected at the fire station')
|
||||
class ThereIsAnAlarmRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.alarm != null
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
println "At the Fire Station: There is an Alarm at ${theWorld.alarm.address}"
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 5 }
|
||||
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='The fires are out, turn off all of the sprinklers')
|
||||
class TurnSprinklerOffRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.fires.size() == 0
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
theWorld.sprinklers.each { sprinkler ->
|
||||
if(sprinkler.on) {
|
||||
sprinkler.on = false
|
||||
println "Turn sprinkler off in room: ${sprinkler.room.name}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 0 }
|
||||
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package org.easyrules.samples.fire.rules
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
import Priority
|
||||
|
||||
@Rule(description='A fire has been detected in a room, turn on the sprinkler in the room; Highest priority rule')
|
||||
class TurnSprinklerOnRule {
|
||||
|
||||
def theWorld
|
||||
|
||||
@Condition
|
||||
boolean when() {
|
||||
theWorld.fires.size() > 0
|
||||
}
|
||||
|
||||
@Action
|
||||
def then() {
|
||||
theWorld.fires.each { fire ->
|
||||
|
||||
def sprinkler = theWorld.sprinklers.find { sprinkler ->
|
||||
sprinkler.room.name == fire.room.name
|
||||
|
||||
}
|
||||
|
||||
if(sprinkler) {
|
||||
sprinkler.on = true
|
||||
println "Turn sprinkler on in room: ${sprinkler.room.name}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Priority
|
||||
int getPriority() { 0 }
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Priority
|
||||
import Rule
|
||||
|
||||
@Rule
|
||||
class BuzzRule {
|
||||
|
||||
def input
|
||||
|
||||
@Condition
|
||||
boolean when() { input % 5 == 0 }
|
||||
|
||||
@Action
|
||||
def then() { print 'buzz' }
|
||||
|
||||
@Priority
|
||||
int getPriority() { 2 }
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
|
||||
class FizzBuzz {
|
||||
static void main(String... args) {
|
||||
|
||||
def label = 'FIZZBUZZ WITH CODE'.replaceAll(/./){it+' '}
|
||||
def width = 80
|
||||
|
||||
println """${'='*width}
|
||||
|${label.center width }
|
||||
|${'='*width}""".stripMargin()
|
||||
|
||||
// Ultra compact, show-off, version in 59 characters
|
||||
// 1.upto(100){println((it%3?'':'Fizz')+(it%5?'':'Buzz')?:it)}
|
||||
|
||||
|
||||
// Easier to follow
|
||||
(1..100).each {
|
||||
def string = ''
|
||||
if (it%3 == 0) {string = 'Fizz'}
|
||||
if (it%5 == 0) {string += 'Buzz'}
|
||||
println string ? string : it
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
import CompositeRule
|
||||
|
||||
class FizzBuzzRule extends CompositeRule {
|
||||
|
||||
FizzBuzzRule(Object... rules) {
|
||||
rules.each { addRule it }
|
||||
}
|
||||
|
||||
@Override
|
||||
int getPriority() { 0 }
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
import RulesEngineBuilder
|
||||
|
||||
class FizzBuzzWithEasyRules {
|
||||
|
||||
static void main(String... args) {
|
||||
|
||||
def label = 'FIZZBUZZ WITH EASYRULES'.replaceAll(/./){it+' '}
|
||||
def width = 80
|
||||
|
||||
println """${'='*width}
|
||||
|${label.center width }
|
||||
|${'='*width}""".stripMargin()
|
||||
|
||||
// Create rules engine
|
||||
def fizzBuzzEngine = RulesEngineBuilder.aNewRulesEngine()
|
||||
.withSkipOnFirstAppliedRule(true)
|
||||
.withSilentMode(true)
|
||||
.build()
|
||||
|
||||
// Create rules
|
||||
def fizzRule = new FizzRule()
|
||||
def buzzRule = new BuzzRule()
|
||||
def nonFizzBuzzRule = new NonFizzBuzzRule()
|
||||
def fizzBuzzRule = new FizzBuzzRule(fizzRule, buzzRule)
|
||||
|
||||
// Register all rules
|
||||
fizzBuzzEngine.registerRule(fizzRule)
|
||||
fizzBuzzEngine.registerRule(buzzRule)
|
||||
fizzBuzzEngine.registerRule(fizzBuzzRule)
|
||||
fizzBuzzEngine.registerRule(nonFizzBuzzRule)
|
||||
|
||||
// Fire rules
|
||||
(1..100).each { input ->
|
||||
fizzRule.input = input
|
||||
buzzRule.input = input
|
||||
nonFizzBuzzRule.input = input
|
||||
fizzBuzzEngine.fireRules()
|
||||
println()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Priority
|
||||
import Rule
|
||||
|
||||
@Rule
|
||||
class FizzRule {
|
||||
|
||||
def input
|
||||
|
||||
@Condition
|
||||
boolean when() { input % 3 == 0 }
|
||||
|
||||
@Action
|
||||
def then() { print 'fizz' }
|
||||
|
||||
@Priority
|
||||
int getPriority() { 1 }
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package org.easyrules.samples.fizzbuzz
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Priority
|
||||
import Rule
|
||||
|
||||
@Rule
|
||||
class NonFizzBuzzRule {
|
||||
|
||||
def input
|
||||
|
||||
@Condition
|
||||
boolean when() { input % 5 != 0 || input % 7 != 0 }
|
||||
|
||||
@Action
|
||||
def then() { print input }
|
||||
|
||||
@Priority
|
||||
int getPriority() { 3 }
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package org.jeasy.rules.tutorials.helloworld
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import Rule
|
||||
|
||||
@Rule(name = "Hello World rule", description = "Always say hello world")
|
||||
class HelloWorldRule {
|
||||
|
||||
@Condition
|
||||
boolean when() { true }
|
||||
|
||||
@Action
|
||||
def then() throws Exception { println 'hello world' }
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package org.jeasy.rules.tutorials.helloworld
|
||||
|
||||
import static RulesEngineBuilder.aNewRulesEngine
|
||||
import org.jeasy.rules.api.Facts
|
||||
import org.jeasy.rules.api.Rules
|
||||
|
||||
import java.util.Scanner
|
||||
|
||||
class Launcher {
|
||||
|
||||
static void main(String... args) {
|
||||
|
||||
def label = 'HELLO WORLD EXAMPLE'.replaceAll(/./){it+' '}
|
||||
def width = 80
|
||||
|
||||
println """${'='*width}
|
||||
|${label.center width }
|
||||
|${'='*width}""".stripMargin()
|
||||
|
||||
// define rules
|
||||
def rule = new HelloWorldRule()
|
||||
def rules = new Rules()
|
||||
rules.register(rule)
|
||||
|
||||
// define facts
|
||||
def facts = new Facts()
|
||||
|
||||
// fire rules on known facts
|
||||
def rulesEngine = aNewRulesEngine().build()
|
||||
rulesEngine.fire(rules, facts)
|
||||
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package org.easyrules.samples.shop
|
||||
|
||||
import BasicRule
|
||||
|
||||
public class AgeRule extends BasicRule {
|
||||
|
||||
private static final int ADULT_AGE = 21
|
||||
|
||||
def person
|
||||
|
||||
public AgeRule(person) {
|
||||
super('AgeRule', "Check if person's age is $ADULT_AGE or over and marks the person as adult", 1)
|
||||
this.person = person
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean evaluate() {
|
||||
return person.age >= ADULT_AGE
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
person.adult = true
|
||||
println "Person $person.name has been marked as adult"
|
||||
}
|
||||
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package org.easyrules.samples.shop
|
||||
|
||||
import static RulesEngineBuilder.aNewRulesEngine
|
||||
|
||||
import RulesEngine
|
||||
|
||||
class Launcher {
|
||||
|
||||
static void main(String... args) {
|
||||
|
||||
println "${'='*90}"
|
||||
println ' S H O P W I T H E A S Y R U L E S '
|
||||
println "${'='*90}"
|
||||
|
||||
|
||||
// Create a person instance
|
||||
Person person = new Person(name:args[0], age: args[1] as int)
|
||||
println "$person.name: Hi! can I have some Vodka please?"
|
||||
|
||||
// Create a rules engine
|
||||
RulesEngine rulesEngine = aNewRulesEngine()
|
||||
.named("shop rules engine")
|
||||
.build()
|
||||
|
||||
// Register rules
|
||||
rulesEngine.registerRule(new AgeRule(person))
|
||||
rulesEngine.registerRule(new OkToSellRule(person))
|
||||
rulesEngine.registerRule(new UnderAgeRule(person))
|
||||
|
||||
// Fire rules
|
||||
rulesEngine.fireRules()
|
||||
}
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.easyrules.samples.shop
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import BasicRule
|
||||
|
||||
class OkToSellRule extends BasicRule {
|
||||
|
||||
def person
|
||||
|
||||
OkToSellRule(person) {
|
||||
super('OkToSellRule', 'Adults are allowed to buy alcohol', 2)
|
||||
this.person = person
|
||||
}
|
||||
|
||||
@Condition
|
||||
boolean evaluate() {
|
||||
person.adult == true
|
||||
}
|
||||
|
||||
@Action
|
||||
void execute(){
|
||||
println "Shop Owner: Ok, $person.name, here you go."
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package org.easyrules.samples.shop
|
||||
|
||||
import groovy.transform.TupleConstructor
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
|
||||
@TupleConstructor
|
||||
@EqualsAndHashCode(includes='name,age')
|
||||
class Person {
|
||||
|
||||
def name
|
||||
def age
|
||||
boolean adult
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package org.easyrules.samples.shop
|
||||
|
||||
import Action
|
||||
import Condition
|
||||
import BasicRule
|
||||
|
||||
class UnderAgeRule extends BasicRule {
|
||||
|
||||
def person
|
||||
|
||||
UnderAgeRule(person) {
|
||||
super('UnderAgeRule', 'Children are not allowed to buy alcohol', 2)
|
||||
this.person = person
|
||||
}
|
||||
|
||||
@Condition
|
||||
boolean evaluate() {
|
||||
person.adult == false
|
||||
}
|
||||
|
||||
@Action
|
||||
void execute(){
|
||||
println "Shop Owner: Sorry $person.name, you are not allowed to buy alcohol."
|
||||
}
|
||||
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
|
||||
# "handlers" specifies a comma separated list of log Handler classes.
|
||||
#handlers=java.util.logging.ConsoleHandler
|
||||
|
||||
|
||||
# Default global logging level
|
||||
.level=ALL
|
||||
|
||||
# Console logging
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.SimpleFormatter.format=%4$s: %5$s%n
|
||||
|
||||
|
||||
# package specific logging
|
||||
org.easyrules.core.level = ALL
|
Loading…
Reference in New Issue