import java.util.SortedMap;
import java.util.concurrent.TimeUnit;
+import net.pterodactylus.reactor.Filter;
import net.pterodactylus.reactor.Query;
import net.pterodactylus.reactor.Reaction;
import net.pterodactylus.reactor.Trigger;
import net.pterodactylus.reactor.states.AbstractState;
+import net.pterodactylus.reactor.states.FailedState;
import org.apache.log4j.Logger;
try {
logger.debug("Querying system...");
state = query.state();
+ if (state == null) {
+ state = FailedState.INSTANCE;
+ }
logger.debug("System queried.");
} catch (Throwable t1) {
logger.warn("Querying system failed!", t1);
};
}
logger.debug(String.format("State is %s.", state));
- reactionExecution.addState(state);
+
+ /* convert states. */
+ for (Filter filter : nextReaction.filters()) {
+ if (state.success()) {
+ net.pterodactylus.reactor.State newState = filter.filter(state);
+ logger.debug(String.format("Old state is %s, new state is %s.", state, newState));
+ state = newState;
+ }
+ }
+ if (state.success()) {
+ reactionExecution.addState(state);
+ }
/* only run trigger if we have collected two states. */
+ Trigger trigger = nextReaction.trigger();
boolean triggerHit = false;
- if (reactionExecution.previousState() != null) {
- Trigger trigger = nextReaction.trigger();
+ if ((reactionExecution.previousState() != null) && state.success()) {
logger.debug("Checking Trigger for changes...");
triggerHit = trigger.triggers(reactionExecution.currentState(), reactionExecution.previousState());
}
logger.debug(String.format("Trigger was hit: %s.", triggerHit));
if (triggerHit) {
logger.info("Executing Action...");
- nextReaction.action().execute(reactionExecution.currentState(), reactionExecution.previousState());
+ nextReaction.action().execute(trigger.trigger());
}
+
}
}