javadocs
[reguloj.git] / src / main / java / wtf / metio / reguloj / RuleBuilder.java
blob8c61faca8827afe51317ac6cb8ed9cc655c6645c
1 package wtf.metio.reguloj;
3 import java.util.function.Consumer;
4 import java.util.function.Predicate;
6 /**
7 * <p>
8 * Fluent interface for building new {@link Rule rules}. It follows the builder-pattern described
9 * by Joshua Bloch (see Effective Java, Item 2) and offers 3 methods:
10 * </p>
11 * <ul>
12 * <li>{@link #called(String) called}: Use this method to name your new rule.</li>
13 * <li>{@link #when(Predicate) when}: Use this method to specify the {@link Predicate} for your new rule.</li>
14 * <li>{@link #then(Consumer) then}: Use this method to specify the {@link Consumer} for your new rule.</li>
15 * </ul>
16 * <h2>Examples</h2>
17 * <ol>
18 * <li>
19 * <p>
20 * Rule creation with name, predicate and consumer:
21 * </p>
22 * <pre>
23 * String name = "...";
24 * Predicate predicate = ...;
25 * Consumer consumer = ...;
26 * Rule rule = Rule.builder()
27 * .called(<em>name</em>)
28 * .when(<em>predicate</em>)
29 * .then(<em>consumer</em>)
30 * </pre>
31 * </li>
32 * </ol>
34 * @param <CONTEXT> The context type.
35 * @see Rule
36 * @see Context
37 * @see Predicate
38 * @see Consumer
40 public interface RuleBuilder<CONTEXT extends Context<?>> {
42 /**
43 * Sets the {@link Predicate} for the new rule.
45 * @param predicate The predicate to set.
46 * @return The current rule builder.
48 RuleBuilder<CONTEXT> when(Predicate<CONTEXT> predicate);
50 /**
51 * Sets the {@link Consumer} for the new rule.
53 * @param consumer The consumer to set.
54 * @return The current rule builder.
56 Rule<CONTEXT> then(Consumer<CONTEXT> consumer);
58 /**
59 * Sets the name of the new rule.
61 * @param name The name to set.
62 * @return The current rule builder.
64 RuleBuilder<CONTEXT> called(String name);