package net.pterodactylus.reactor;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
/**
* A {@code Reaction} binds together {@link Query}s, {@link Trigger}s, and
* {@link Action}s, and it stores the intermediary {@link State}s.
*/
public class Reaction {
+ /** The name of this reaction. */
+ private final String name;
+
/** The query to run. */
private final Query query;
+ /** The filters to run. */
+ private final List<Filter> filters = Lists.newArrayList();
+
/** The trigger to detect changes. */
private final Trigger trigger;
/**
* Creates a new reaction.
*
+ * @param name
+ * The name of the reaction
+ * @param query
+ * The query to run
+ * @param trigger
+ * The trigger to detect changes
+ * @param action
+ * The action to perform
+ */
+ public Reaction(String name, Query query, Trigger trigger, Action action) {
+ this(name, query, Collections.<Filter> emptyList(), trigger, action);
+ }
+
+ /**
+ * Creates a new reaction.
+ *
+ * @param name
+ * The name of the reaction
* @param query
* The query to run
+ * @param filters
+ * The filters to run
* @param trigger
* The trigger to detect changes
* @param action
* The action to perform
*/
- public Reaction(Query query, Trigger trigger, Action action) {
+ public Reaction(String name, Query query, List<Filter> filters, Trigger trigger, Action action) {
+ this.name = name;
this.query = query;
+ this.filters.addAll(filters);
this.trigger = trigger;
this.action = action;
}
//
/**
+ * Returns the name of this reaction. This name is solely used for display
+ * purposes and does not need to be unique.
+ *
+ * @return The name of this reaction
+ */
+ public String name() {
+ return name;
+ }
+
+ /**
* Returns the query to run.
*
* @return The query to run
}
/**
+ * Returns the filters to run.
+ *
+ * @return The filters to run
+ */
+ public Iterable<Filter> filters() {
+ return filters;
+ }
+
+ /**
* Returns the trigger to detect changes.
*
* @return The trigger to detect changes