Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.builder.ReleaseId;
import org.kie.api.io.Resource;
Expand All @@ -25,7 +24,8 @@ public class DroolsBeanFactory {

private KieFileSystem getKieFileSystem() {
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
List<String> rules = Arrays.asList("com/baeldung/drools/rules/BackwardChaining.drl", "com/baeldung/drools/rules/SuggestApplicant.drl", "com/baeldung/drools/rules/Product_rules.drl.xls");
List<String> rules = Arrays.asList("com/baeldung/drools/rules/BackwardChaining.drl", "com/baeldung/drools/rules/SuggestApplicant.drl",
"com/baeldung/drools/rules/Product_rules.drl.xls", "com/baeldung/drools/rules/eligibility_rules.drl");
for (String rule : rules) {
kieFileSystem.write(ResourceFactory.newClassPathResource(rule));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.baeldung.drools.matched_rules;

import org.kie.api.runtime.KieSession;
import com.baeldung.drools.config.DroolsBeanFactory;

public class MatchedRules {

public static void main(String[] args) {
KieSession kieSession = new DroolsBeanFactory().getKieSession();

TrackingAgendaEventListener listener = new TrackingAgendaEventListener();
kieSession.addEventListener(listener);

// RuleTracker tracker = new RuleTracker();
// kieSession.insert(tracker);

Person person1 = new Person("Alice", 20);
Person person2 = new Person("Bob", 16);
Person person3 = new Person("Baeldung", 65);
kieSession.insert(person1);
kieSession.insert(person2);
kieSession.insert(person3);

kieSession.fireAllRules();

System.out.println("Fired rules: " + listener.getFiredRuleNames());
// System.out.println("Fired rules: " + tracker.getFiredRules());

kieSession.dispose();
}

}
47 changes: 47 additions & 0 deletions drools/src/main/java/com/baeldung/drools/matched_rules/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.baeldung.drools.matched_rules;

public class Person {
private String name;
private int age;
private boolean eligibleToVote;
private boolean priorityVoter;


// Constructors
public Person(String name, int age) {
this.name = name;
this.age = age;
this.eligibleToVote = false;
this.priorityVoter = false;
}

// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public boolean isEligibleToVote() {
return eligibleToVote;
}
public void setEligibleToVote(boolean eligibleToVote) {
this.eligibleToVote = eligibleToVote;
}

public boolean isPriorityVoter() {
return priorityVoter;
}

public void setPriorityVoter(boolean priorityVoter) {
this.priorityVoter = priorityVoter;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.baeldung.drools.matched_rules;

import java.util.ArrayList;
import java.util.List;

public class RuleTracker {

private final List<String> firedRules = new ArrayList<>();

public void add(String ruleName) {
firedRules.add(ruleName);
}

public List<String> getFiredRules() {
return firedRules;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.baeldung.drools.matched_rules;

import org.kie.api.runtime.rule.RuleContext;

public class RuleUtils {

public static void track(RuleContext ctx, RuleTracker tracker) {
String ruleName = ctx.getRule().getName();
tracker.add(ruleName);

System.out.println("Rule fired (via RuleUtils): " + ruleName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.baeldung.drools.matched_rules;

import java.util.ArrayList;
import java.util.List;

import org.kie.api.event.rule.AfterMatchFiredEvent;
import org.kie.api.event.rule.DefaultAgendaEventListener;
import org.kie.api.runtime.rule.Match;

public class TrackingAgendaEventListener extends DefaultAgendaEventListener {
private final List<Match> matchList = new ArrayList<>();

@Override
public void afterMatchFired(AfterMatchFiredEvent event) {
matchList.add(event.getMatch());
}

public List<String> getFiredRuleNames() {
List<String> names = new ArrayList<>();
for (Match m : matchList) {
names.add(m.getRule().getName());
}
return names;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.baeldung.drools.rules

import com.baeldung.drools.matched_rules.Person;
import com.baeldung.drools.matched_rules.RuleTracker;
import static com.baeldung.drools.matched_rules.RuleUtils.track;

rule "Check Voting Eligibility"
when
$person : Person(age >= 18)
$tracker : RuleTracker()
then
track(drools, $tracker);
$person.setEligibleToVote(true);
update($person);
end

rule "Senior Priority Voting"
when
$person : Person(age >= 65)
$tracker : RuleTracker()
then
track(drools, $tracker);
$person.setPriorityVoter(true);
update($person);
end