<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Wellesley</id>
	<title>Drools Wellesley - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Wellesley"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Wellesley&amp;action=history"/>
	<updated>2026-04-21T08:52:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Drools_Wellesley&amp;diff=60420&amp;oldid=prev</id>
		<title>Filip Stachecki: /* EX43 */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Wellesley&amp;diff=60420&amp;oldid=prev"/>
		<updated>2017-09-15T08:15:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;EX43&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:private]]&lt;br /&gt;
=Basic=&lt;br /&gt;
==EX1==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;exercise1&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	s : Salgrade()&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println(&lt;br /&gt;
       s.grade + &amp;quot; &amp;quot; + &lt;br /&gt;
       s.losal + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       s.hisal ) ;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX2==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 2&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
  e : Emp(sal &amp;gt; 1000, sal &amp;lt;2000)&lt;br /&gt;
then    &lt;br /&gt;
	System.out.println(&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX3==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 3&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
  e : Emp(job == &amp;quot;CLERK&amp;quot;, deptno == 20)&lt;br /&gt;
then    &lt;br /&gt;
	System.out.println(&amp;quot;\n&amp;quot; +&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX4==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 4&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  e : Emp(mgr != 0)&lt;br /&gt;
then    &lt;br /&gt;
	System.out.println(&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX5==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 5&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  e : Emp(job == &amp;#039;MANAGER&amp;#039;)&lt;br /&gt;
then    &lt;br /&gt;
	System.out.println(&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal * 12 + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX6==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 6&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  e : Emp(name matches &amp;quot;.LA.*&amp;quot;)&lt;br /&gt;
then&lt;br /&gt;
    System.out.println(&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX7==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 7&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	e : Emp(name matches &amp;quot;.*T.*N&amp;quot;)&lt;br /&gt;
then&lt;br /&gt;
    System.out.println(&lt;br /&gt;
       e.id + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.mgr  + &amp;quot;\t&amp;quot; +&lt;br /&gt;
       e.hiredate + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.sal + &amp;quot; &amp;quot; + &lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX8==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 8&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	//e : Emp((job == &amp;quot;MANAGER&amp;quot; &amp;amp;&amp;amp; deptno != 10) || (job != &amp;quot;MANAGER&amp;quot; &amp;amp;&amp;amp; deptno == 10))&lt;br /&gt;
	e : Emp((job == &amp;quot;MANAGER&amp;quot; || deptno == 10) &amp;amp;&amp;amp; !(job == &amp;quot;MANAGER&amp;quot; &amp;amp;&amp;amp; deptno == 10))&lt;br /&gt;
then&lt;br /&gt;
    System.out.println(&lt;br /&gt;
       e.name + &amp;quot;\t&amp;quot; + &lt;br /&gt;
       e.job + &amp;quot;   \t&amp;quot; +&lt;br /&gt;
       e.deptno );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
****ALTERNATE SOLUTION****&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 8&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  e : Emp((job == &amp;quot;MANAGER&amp;quot; &amp;amp;&amp;amp; deptno != 10) || (deptno == 10 &amp;amp;&amp;amp; job != &amp;quot;MANAGER&amp;quot;))&lt;br /&gt;
then    &lt;br /&gt;
	System.out.println(e.name );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
****ALTERNATE ALTERNATE SOLUTION****&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 8a&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
  $e : Emp(job == &amp;#039;MANAGER&amp;#039; || deptno == 10)&lt;br /&gt;
  not(exists(Emp($e.id == id, job == &amp;#039;MANAGER&amp;#039;, deptno == 10)))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println($e.id + &amp;quot; &amp;quot; + $e.name + &amp;quot; &amp;quot; + $e.job + &amp;quot; &amp;quot; + $e.mgr + &amp;quot; &amp;quot; + $e.hiredate + &amp;quot; &amp;quot; + $e.sal + &amp;quot; &amp;quot; + $e.deptno);  &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Advanced=&lt;br /&gt;
==EX31==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 31&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$e: Emp()&lt;br /&gt;
	$d: Dept($e.deptno == deptno)&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println( $e.name + &amp;quot;\t&amp;quot; +  $d.loc );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX32==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 32&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$d: Dept()&lt;br /&gt;
	$e: Emp($d.deptno == deptno)&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println( $e.name + &amp;quot;\t&amp;quot; +  $d.dname + &amp;quot;\t&amp;quot; + $d.deptno  );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX33==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 33&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$e: Emp(sal &amp;gt; 2000)&lt;br /&gt;
	$s: Salgrade($e.sal &amp;gt;= losal, $e.sal &amp;lt;= hisal)&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println( $e.name + &amp;quot;\t&amp;quot; +  $e.sal + &amp;quot;\t&amp;quot; + $s.grade  );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX34==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 34&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $d :Dept(loc == &amp;quot;LONDON&amp;quot;)&lt;br /&gt;
   $e :Emp($d.deptno == deptno)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println($e.name + &amp;quot;\t&amp;quot; + $d.loc )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX35==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 35&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $d :Dept(loc != &amp;quot;LONDON&amp;quot;)&lt;br /&gt;
   $e :Emp($d.deptno == deptno)&lt;br /&gt;
   $s :Salgrade($e.sal &amp;gt;= losal &amp;amp;&amp;amp; $e.sal &amp;lt;= hisal)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println($e.name+ &amp;quot;\t&amp;quot; + $d.loc + &amp;quot;\t&amp;quot; + $s.grade )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX36==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 36&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $d :Dept()&lt;br /&gt;
   not (Emp(deptno == $d.deptno))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println( $d.dname )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX37==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 37&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $e :Emp()&lt;br /&gt;
   $m :Emp(id == $e.mgr)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println( $e.name + &amp;quot; boss is &amp;quot; + $m.name )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX38==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 38&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$e: Emp($e.mgr == 0)&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println( $e.name );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 38&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $e :Emp()&lt;br /&gt;
   not (Emp(id == $e.mgr))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println( $e.name)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX39==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 39&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$e: Emp()&lt;br /&gt;
	not Emp( $e.id == mgr)&lt;br /&gt;
then    &lt;br /&gt;
    System.out.println( $e.name );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX41==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 41&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $m :Emp()&lt;br /&gt;
   $e :Emp($m.id == mgr, hiredate &amp;lt; $m.hiredate)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println( $e.name + &amp;quot; was hired in &amp;quot; + $e.hiredate + &amp;quot;, their boss &amp;quot; + $m.name + &amp;quot; was hired in &amp;quot; + $m.hiredate )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX44==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 44&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   $e :Emp(deptno == 10)&lt;br /&gt;
   not Emp($e.job == job, deptno == 20)&lt;br /&gt;
then&lt;br /&gt;
  System.out.println( $e.job )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX23==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 23&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  accumulate (e :Emp(hiredate == 1981), &lt;br /&gt;
  	$avg : average(e.sal),&lt;br /&gt;
  	$min : min(e.sal),&lt;br /&gt;
  	$max : max(e.sal)&lt;br /&gt;
  	) &lt;br /&gt;
 &lt;br /&gt;
then    &lt;br /&gt;
	 System.out.println(&lt;br /&gt;
   &amp;quot;Average salary: &amp;quot; + $avg + &amp;quot;\n&amp;quot; +&lt;br /&gt;
  &amp;quot;Min salary: &amp;quot; + $min + &amp;quot;\n&amp;quot; +&lt;br /&gt;
  &amp;quot;Max salary: &amp;quot; + $max + &amp;quot;\n&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX24==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 24&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  accumulate (e :Emp(), &lt;br /&gt;
  	$min : min(e.sal),&lt;br /&gt;
  	$max : max(e.sal)&lt;br /&gt;
  	) &lt;br /&gt;
 &lt;br /&gt;
then    &lt;br /&gt;
	 System.out.println($max - $min )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 25&amp;quot;&lt;br /&gt;
//enabled false&lt;br /&gt;
when &lt;br /&gt;
  accumulate (e :Emp(e.job == &amp;quot;MANAGER&amp;quot;), &lt;br /&gt;
  	$count : count(e)&lt;br /&gt;
  	) &lt;br /&gt;
 &lt;br /&gt;
then    &lt;br /&gt;
	 System.out.println($count)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look at this beautiful examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;Exercise 26&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
  $s : Integer() from accumulate (&lt;br /&gt;
    Emp(job == &amp;#039;MANAGER&amp;#039;),&lt;br /&gt;
    init(int s = 0),&lt;br /&gt;
    action(s += 1),&lt;br /&gt;
    result(s) &lt;br /&gt;
  )&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(&amp;quot;Sum of Managers: &amp;quot; + $s);  &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 26b&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
  accumulate (Emp(job == &amp;#039;MANAGER&amp;#039;), $s: sum(1))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(&amp;quot;Sum of Managers: &amp;quot; + $s);  &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX25==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
declare SalByJob&lt;br /&gt;
   job : String&lt;br /&gt;
   avgSal : Double&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 25&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   Emp($j: job) and&lt;br /&gt;
   not SalByJob($j == job)&lt;br /&gt;
   accumulate ($e :Emp(job == $j), 	$avg : average($e.sal)   	) &lt;br /&gt;
then    &lt;br /&gt;
   System.out.println($j + &amp;quot; &amp;quot; + $avg )&lt;br /&gt;
   insert(new SalByJob($j,$avg))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------ other solution -------------------&lt;br /&gt;
&lt;br /&gt;
declare CountedJob&lt;br /&gt;
	job: String&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 25&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	$e: Emp()&lt;br /&gt;
	not CountedJob(job == $e.job)&lt;br /&gt;
	accumulate (e1: Emp(job == $e.job),		$avg: average(e1.sal) )&lt;br /&gt;
then&lt;br /&gt;
  System.out.println( $e.job + &amp;quot;\t&amp;quot; + $avg)&lt;br /&gt;
  insert(new CountedJob($e.job))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX27==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
declare SalByDep&lt;br /&gt;
   dep : int&lt;br /&gt;
   avgSal : Double&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 27&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   Emp($d: deptno) and&lt;br /&gt;
   not SalByDep($d == dep)&lt;br /&gt;
   accumulate ($e :Emp(deptno == $d), 	$avg : average($e.sal*12)   	) &lt;br /&gt;
then    &lt;br /&gt;
   System.out.println($d + &amp;quot; &amp;quot; + $avg )&lt;br /&gt;
   insert(new SalByDep($d,$avg))&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX43==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
declare Jobs&lt;br /&gt;
   job : String&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 43&amp;quot;&lt;br /&gt;
// INCORRECT&lt;br /&gt;
when&lt;br /&gt;
   Emp($j: job, hiredate in (1982,1983)) and&lt;br /&gt;
   not Jobs($j == job) &lt;br /&gt;
then    &lt;br /&gt;
   System.out.println($j )&lt;br /&gt;
   insert(new Jobs($j))&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;43+&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	e1 : Emp(hiredate == 1982)&lt;br /&gt;
	e2 : Emp(hiredate == 1983)&lt;br /&gt;
	exists (Emp(e1.job == job, e2.job == job))&lt;br /&gt;
then&lt;br /&gt;
   System.out.println( e1.job)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
declare xJob&lt;br /&gt;
   name : String&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 43&amp;quot; enabled true&lt;br /&gt;
when&lt;br /&gt;
  $e1:Emp($job:job &amp;amp;&amp;amp; hiredate == 1982)&lt;br /&gt;
  $e2:Emp(job == $job &amp;amp;&amp;amp; hiredate == 1983)&lt;br /&gt;
  not(xJob(name == $job))&lt;br /&gt;
then&lt;br /&gt;
  System.out.println($job)&lt;br /&gt;
  insert(new xJob($job));&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX28==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
rule &amp;quot;28 Find departments with more than 3 workers. &amp;quot;&lt;br /&gt;
when&lt;br /&gt;
  x: Dept(d: deptno) &lt;br /&gt;
  accumulate (e :Emp(deptno == d), &lt;br /&gt;
  	$count : count()&lt;br /&gt;
   	) &lt;br /&gt;
  Number(doubleValue &amp;gt; 3) from $count&lt;br /&gt;
then    &lt;br /&gt;
   System.out.println(x.deptno + &amp;quot;  &amp;quot; + $count&lt;br /&gt;
)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EX45==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==EX46==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==EX51==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==EX55==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=inserLogical=&lt;br /&gt;
==rule==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
import com.nobleprog.FactModel.*&lt;br /&gt;
dialect &amp;quot;mvel&amp;quot; &lt;br /&gt;
&lt;br /&gt;
declare AccessToSecretFile&lt;br /&gt;
    emp : Emp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Grant access to employees of Dept. 10&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
    e : Emp( deptno == 10 )&lt;br /&gt;
then    &lt;br /&gt;
    insertLogical( new AccessToSecretFile(e) )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==jUnit==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=Shopping Example=&lt;br /&gt;
==Fact Model==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package com.nobleprog;&lt;br /&gt;
&lt;br /&gt;
public class FactModel{&lt;br /&gt;
	&lt;br /&gt;
	   public static class Customer {&lt;br /&gt;
		   private String name;&lt;br /&gt;
		   private int    discount;&lt;br /&gt;
&lt;br /&gt;
	        public Customer(String name,&lt;br /&gt;
	                        int discount) {&lt;br /&gt;
	            this.name = name;&lt;br /&gt;
	            this.discount = discount;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public String getName() {&lt;br /&gt;
	            return name;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public int getDiscount() {&lt;br /&gt;
	            return discount;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public void setDiscount(int discount) {&lt;br /&gt;
	            this.discount = discount;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	    }&lt;br /&gt;
&lt;br /&gt;
	    public static class Discount {&lt;br /&gt;
	        private Customer customer;&lt;br /&gt;
	        private int      amount;&lt;br /&gt;
&lt;br /&gt;
	        public Discount(Customer customer,&lt;br /&gt;
	                        int amount) {&lt;br /&gt;
	            this.customer = customer;&lt;br /&gt;
	            this.amount = amount;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public Customer getCustomer() {&lt;br /&gt;
	            return customer;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public int getAmount() {&lt;br /&gt;
	            return amount;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	    }&lt;br /&gt;
&lt;br /&gt;
	    public static class Product {&lt;br /&gt;
	        private String name;&lt;br /&gt;
	        private float  price;&lt;br /&gt;
&lt;br /&gt;
	        public Product(String name,&lt;br /&gt;
	                       float price) {&lt;br /&gt;
	            this.name = name;&lt;br /&gt;
	            this.price = price;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public String getName() {&lt;br /&gt;
	            return name;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public float getPrice() {&lt;br /&gt;
	            return price;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	    }&lt;br /&gt;
&lt;br /&gt;
	    public static class Purchase {&lt;br /&gt;
	        private Customer customer;&lt;br /&gt;
	        private Product  product;&lt;br /&gt;
&lt;br /&gt;
	        public Purchase(Customer customer,&lt;br /&gt;
	                        Product product) {&lt;br /&gt;
	            this.customer = customer;&lt;br /&gt;
	            this.product = product;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public Customer getCustomer() {&lt;br /&gt;
	            return customer;&lt;br /&gt;
	        }&lt;br /&gt;
&lt;br /&gt;
	        public Product getProduct() {&lt;br /&gt;
	            return product;&lt;br /&gt;
	        }&lt;br /&gt;
	    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==rules==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package _30_mvel&lt;br /&gt;
import com.nobleprog.FactModel.*&lt;br /&gt;
import java.lang.Math&lt;br /&gt;
import java.util.ArrayList&lt;br /&gt;
dialect &amp;quot;mvel&amp;quot; &lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Purchase notification&amp;quot;&lt;br /&gt;
    //salience 10&lt;br /&gt;
&lt;br /&gt;
    when&lt;br /&gt;
        $c : Customer()&lt;br /&gt;
        $p : Purchase( customer == $c )&lt;br /&gt;
    then&lt;br /&gt;
        System.out.println( &amp;quot;Customer &amp;quot; + $c.name + &amp;quot; just purchased &amp;quot; + $p.product.name );&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
rule &amp;quot;Discount removed notification&amp;quot;&lt;br /&gt;
    when&lt;br /&gt;
        $c : Customer()&lt;br /&gt;
        not Discount( customer == $c )&lt;br /&gt;
    then&lt;br /&gt;
        $c.discount = 0;&lt;br /&gt;
        System.out.println( &amp;quot;Customer &amp;quot; + $c.name + &amp;quot; now has a discount of &amp;quot; + $c.discount );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Discount awarded notification&amp;quot;&lt;br /&gt;
    when&lt;br /&gt;
        $c : Customer()&lt;br /&gt;
        $d : Discount( customer == $c )&lt;br /&gt;
    then&lt;br /&gt;
        System.out.println( &amp;quot;Customer &amp;quot; + $c.name + &amp;quot; now has a discount of &amp;quot; + $d.amount );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Apply 10% discount if total purchases is over 100&amp;quot;&lt;br /&gt;
    no-loop true&lt;br /&gt;
    dialect &amp;quot;java&amp;quot;&lt;br /&gt;
    when&lt;br /&gt;
        $c : Customer()&lt;br /&gt;
        $i : Double(doubleValue &amp;gt; 100) from accumulate (&lt;br /&gt;
                Purchase( customer == $c, $price : product.price ),&lt;br /&gt;
                sum( $price )&lt;br /&gt;
        )&lt;br /&gt;
    then&lt;br /&gt;
        $c.setDiscount( 10 );&lt;br /&gt;
		insertLogical( new Discount( $c, 10 ) );&lt;br /&gt;
        System.out.println( &amp;quot;Customer &amp;quot; + $c.getName() + &amp;quot; now has a shopping total of &amp;quot; + $i );&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==jUnit==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package com.nobleprog;&lt;br /&gt;
&lt;br /&gt;
import com.nobleprog.*;&lt;br /&gt;
import org.junit.Test;&lt;br /&gt;
import org.kie.api.KieServices;&lt;br /&gt;
import org.kie.api.runtime.KieContainer;&lt;br /&gt;
import org.kie.api.runtime.KieSession;&lt;br /&gt;
import org.kie.api.runtime.rule.FactHandle;&lt;br /&gt;
&lt;br /&gt;
import com.nobleprog.FactModel.*;&lt;br /&gt;
&lt;br /&gt;
public class Test01 {&lt;br /&gt;
	@Test&lt;br /&gt;
	public void test1() {&lt;br /&gt;
		KieServices ks = KieServices.Factory.get();&lt;br /&gt;
		KieContainer kContainer = ks.getKieClasspathContainer();&lt;br /&gt;
		KieSession ksession = kContainer.newKieSession(&amp;quot;ksession-rules&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
		//KieSession ksession = kc.newKieSession(&amp;quot;ShoppingKS&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        Customer mark = new Customer( &amp;quot;mark&amp;quot;,&lt;br /&gt;
                                      0 );&lt;br /&gt;
        ksession.insert( mark );&lt;br /&gt;
&lt;br /&gt;
        Product shoes = new Product( &amp;quot;shoes&amp;quot;,&lt;br /&gt;
                                     60 );&lt;br /&gt;
        ksession.insert( shoes );&lt;br /&gt;
&lt;br /&gt;
        Product hat = new Product( &amp;quot;hat&amp;quot;,&lt;br /&gt;
                                   60 );&lt;br /&gt;
        ksession.insert( hat );&lt;br /&gt;
&lt;br /&gt;
        ksession.insert( new Purchase( mark,&lt;br /&gt;
                                       shoes ) );&lt;br /&gt;
&lt;br /&gt;
        FactHandle hatPurchaseHandle = ksession.insert( new Purchase( mark,&lt;br /&gt;
                                                                      hat ) );&lt;br /&gt;
&lt;br /&gt;
        ksession.fireAllRules();&lt;br /&gt;
&lt;br /&gt;
        ksession.delete( hatPurchaseHandle );&lt;br /&gt;
        System.out.println( &amp;quot;Customer mark has returned the hat&amp;quot; );&lt;br /&gt;
        ksession.fireAllRules();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Filip Stachecki</name></author>
	</entry>
</feed>