Human Factors of XR: Using Human Factors to Design XR Systems
Drools5 Community Training HandsOn 1 Drools DRL Syntax
1.
Drools5 Community Training
Hands On Playing with Rules
Sponsored by Plugtree
2. Hands On 1: Drools Expert
Playing with Rules
Drools5 Community Training
version: 1.0-SNAPSHOT
Release Date: 09/05/2011
Under The Creative Common License
3. Hands On 1: Drools Expert
Playing with Rules
Drools5 Community Training Course
by Mauricio "Salaboy" Salatino and
Esteban Aliverti is licensed under a
Creative Commons Attribution 3.0
Unported License.
Based on a work at salaboy.wordpress.
com.
Permissions beyond the scope of this
license may be available at http:
//salaboy.wordpress.com/.
5. Introduction Examples
● Project: drools5/01-DroolsExpert-Introduction
● Test: SimpleRulesExampleTest.java
● Rules: src/main/resources/rules/rules.drl
● Kbuilder, Kbase and Ksession (createKSession() method)
○ Take a look at the addEventListener() method
● DRL syntax in the rule file:
○ Take a look at the LHS
○ Take a look at the RHS
● Rules activation and execution (you can activate the logger)
6. Introduction Examples
● Exercise
○ Find a way to get "Warn when we have a POP songs and
Playlist" Rule activated but not fired.
○ Find a way to get "Warn when we have a POP songs and
Playlist" Rule activated and fired.
7. Conditional Elements examples
● Project: drools5/02-DroolsExpert-ConditionalElements
● Simple Rules Example:
○ Test Class: SimpleRulesExampleTest.java
○ Rules: SimpleRules.drl
○ Conditional Elements on LHS
○ from Conditional Element
● Advanced from Examples:
○ Test Class: AdvancedFromRulesExampleTest.java
○ Rules: AdvancedFromRules.drl
○ collect, accumulate, accumulate custom function, Using
Hibernate session in from CE
8. Conditional Elements Examples
● Exercise 1
○ Replace "Add Playlists that contains songs with letter 'a'
in their titles to the list using the accumulate conditional
elements defining init, action, reverse and result functions.
i.e:
from accumulate(
$s: Song() from $songs,
init(),
action(),
reverse(),
result()
)
9. Conditional Elements examples
Solution:
rule "Playlists that contains songs with letter 'a' in their titles."
when
$playlist: Playlist($songs: songs)
$match: java.util.List(empty == false) from accumulate(
$s: Song() from $songs,
init( java.util.List result = new java.util.ArrayList();),
action( if ($s.getTitle().contains("a")) result.add($s); ),
result( result )
)
then
System.out.println("Playlist found: "+$playlist);
for (int i=0; i<$match.size(); i++){
System.out.println("t--"+$match.get(i));
}
end
10. Conditional Elements examples
● Exercise 2
○ Create a custom accumulate function to collect random
songs from a playlist.
○ Copy the SongsWithALetterOnTheirTitlesFunction.java implementation
11. Conditional Elements Examples
● eval Example:
○ Test Class: EvalRulesExampleTest.java
○ Rules: /rules/EvalRules.drl
○ use of eval in LHS
● exists Example:
○ Test Class: ExistsRulesExampleTest.java
○ Rules: ExistsRules.drl
○ use of exists and not in the LHS
12. Conditional Elements Examples
● Exercise
○ Replace "Warn when we have a Playlist longer than 9000
seconds" with an equivalent Rule without using eval
13. Conditional Elements Examples
Solution
rule "Playlist longer than 9000 seconds without eval"
when
$playlist: Playlist($songs: songs) AND
$n : Number(intValue > 9000) from accumulate(
$s : Song() from $songs,
sum($s.getDuration()))
then
System.out.println("We have found a Playlist
longer than 9000 seconds");
end