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.
*
- * @param <S>
- * The type of the state
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
-public class Reaction<S extends State> {
+public class Reaction {
/** The query to run. */
- private final Query<S> query;
+ private final Query query;
+
+ /** The filters to run. */
+ private final List<Filter> filters = Lists.newArrayList();
/** The trigger to detect changes. */
- private final Trigger<S> trigger;
+ private final Trigger trigger;
/** The action to perform. */
- private final Action<S> action;
-
- /** The current state of the query. */
- private S currentState;
-
- /** The previous state of the query. */
- private S previousState;
+ private final Action action;
/** The interval in which to run queries (in milliseconds). */
private long updateInterval;
* @param action
* The action to perform
*/
- public Reaction(Query<S> query, Trigger<S> trigger, Action<S> action) {
+ public Reaction(Query query, Trigger trigger, Action action) {
+ this(query, Collections.<Filter> emptyList(), trigger, action);
+ }
+
+ /**
+ * Creates a new 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, List<Filter> filters, Trigger trigger, Action action) {
this.query = query;
+ this.filters.addAll(filters);
this.trigger = trigger;
this.action = action;
}
*
* @return The query to run
*/
- public Query<S> query() {
+ public Query query() {
return query;
}
/**
+ * 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
*/
- public Trigger<S> trigger() {
+ public Trigger trigger() {
return trigger;
}
*
* @return The action to perform
*/
- public Action<S> action() {
+ public Action action() {
return action;
}
/**
- * Returns the current state of the query.
- *
- * @return The current state of the query
- */
- public S currentState() {
- return currentState;
- }
-
- /**
- * Returns the previous state of the query.
- *
- * @return The previous state of the query
- */
- public S previousState() {
- return previousState;
- }
-
- /**
* Returns the update interval of this reaction.
*
* @return The update interval of this reaction (in milliseconds)
* The update interval of this reaction (in milliseconds)
* @return This reaction
*/
- public Reaction<?> setUpdateInterval(long updateInterval) {
+ public Reaction setUpdateInterval(long updateInterval) {
this.updateInterval = updateInterval;
return this;
}