-
Notifications
You must be signed in to change notification settings - Fork 1.1k
defining facts
A fact in Easy Rules is represented by the Fact API:
public class Fact<T> {
private final String name;
private final T value;
}A fact has a name and a value, both must not be null. The Facts API on the other hand represents a set of facts and acts as a namespace of facts. This means facts must have unique names within a Facts instance.
Here is an example of how to define facts:
Fact<String> fact = new Fact("foo", "bar");
Facts facts = new Facts();
facts.add(fact);You can also use a shorter version with the put method to create named facts as follows:
Facts facts = new Facts();
facts.put("foo", "bar");Facts can be injected in rules condition and action methods using the @Fact annotation. In the following rule, the rain fact is injected in the rain parameter of the itRains method:
@Rule
class WeatherRule {
@Condition
public boolean itRains(@Fact("rain") boolean rain) {
return rain;
}
@Action
public void takeAnUmbrella(Facts facts) {
System.out.println("It rains, take an umbrella!");
// can add/remove/modify facts
}
}Parameters of type Facts will get injected all known facts (like in the takeAnUmbrella action method).
Heads up!
- If an injected fact is missing in the condition method, the engine will log a warning and consider the condition as evaluated to
false. - If an injected fact is missing in the action method, the action will not be performed and the engine will throw a
org.jeasy.rules.core.NoSuchFactException.
Easy Rules is created by Mahmoud Ben Hassine with the help of some awesome contributors
-
Introduction
-
User guide
-
Tutorials
-
Get involved