Set update interval on all created reactions.
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / loader / ReactionLoader.java
index 2cf1d21..10608d9 100644 (file)
@@ -28,6 +28,7 @@ import net.pterodactylus.rhynodge.Filter;
 import net.pterodactylus.rhynodge.Query;
 import net.pterodactylus.rhynodge.Reaction;
 import net.pterodactylus.rhynodge.Trigger;
+import net.pterodactylus.rhynodge.Watcher;
 import net.pterodactylus.rhynodge.loader.Chain.Parameter;
 import net.pterodactylus.rhynodge.loader.Chain.Part;
 
@@ -55,22 +56,40 @@ public class ReactionLoader {
                        throw new IllegalArgumentException("Chain is not enabled.");
                }
 
-               /* create query. */
-               Query query = createObject(chain.query().name(), "net.pterodactylus.rhynodge.queries", extractParameters(chain.query().parameters()));
-
-               /* create filters. */
-               List<Filter> filters = new ArrayList<Filter>();
-               for (Part filterPart : chain.filters()) {
-                       filters.add(ReactionLoader.<Filter> createObject(filterPart.name(), "net.pterodactylus.rhynodge.filters", extractParameters(filterPart.parameters())));
-               }
-
-               /* create trigger. */
-               Trigger trigger = createObject(chain.trigger().name(), "net.pterodactylus.rhynodge.triggers", extractParameters(chain.trigger().parameters()));
+               Reaction reaction;
 
                /* create action. */
                Action action = createObject(chain.action().name(), "net.pterodactylus.rhynodge.actions", extractParameters(chain.action().parameters()));
 
-               return new Reaction(chain.name(), query, filters, trigger, action).setUpdateInterval(TimeUnit.SECONDS.toMillis(chain.updateInterval()));
+               /* do we have a reaction defined? */
+               if (chain.watcher() != null) {
+
+                       /* create watcher. */
+                       Watcher watcher = createObject(chain.watcher().name(), "net.pterodactylus.rhynodge.watchers", extractParameters(chain.watcher().parameters()));
+
+                       /* create reaction. */
+                       reaction = new Reaction(chain.name(), watcher.query(), watcher.filters(), watcher.trigger(), action);
+
+               } else {
+
+                       /* create query. */
+                       Query query = createObject(chain.query().name(), "net.pterodactylus.rhynodge.queries", extractParameters(chain.query().parameters()));
+
+                       /* create filters. */
+                       List<Filter> filters = new ArrayList<Filter>();
+                       for (Part filterPart : chain.filters()) {
+                               filters.add(ReactionLoader.<Filter> createObject(filterPart.name(), "net.pterodactylus.rhynodge.filters", extractParameters(filterPart.parameters())));
+                       }
+
+                       /* create trigger. */
+                       Trigger trigger = createObject(chain.trigger().name(), "net.pterodactylus.rhynodge.triggers", extractParameters(chain.trigger().parameters()));
+
+                       /* create reaction. */
+                       reaction = new Reaction(chain.name(), query, filters, trigger, action);
+               }
+
+               reaction.setUpdateInterval(TimeUnit.SECONDS.toMillis(chain.updateInterval()));
+               return reaction;
        }
 
        //