X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Floader%2FChain.java;h=d54fae079904c898c143c72929859b95b284d8fc;hb=dfe8081e8b9036a606bd313239c319cceb52e7df;hp=8fc6c35aeb0eacfcfff249ec2b75b066644731d6;hpb=6f69aff66ba5617d0bb27874014b4274bc551ab8;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java b/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java index 8fc6c35..d54fae0 100644 --- a/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java +++ b/src/main/java/net/pterodactylus/rhynodge/loader/Chain.java @@ -184,6 +184,10 @@ public class Chain { @JsonProperty private Part trigger; + /** A combination of query, filters, and a trigger. */ + @JsonProperty + private Part watcher; + /** The action of the chain. */ @JsonProperty private Part action; @@ -238,6 +242,15 @@ public class Chain { } /** + * Returns an optional watcher. + * + * @return The watcher of this chain + */ + public Part watcher() { + return watcher; + } + + /** * Returns the action of this chain. * * @return The action of this chain @@ -266,11 +279,15 @@ public class Chain { public int hashCode() { int hashCode = 0; hashCode ^= name.hashCode(); - hashCode ^= query.hashCode(); - for (Part filter : filters) { - hashCode ^= filter.hashCode(); + if (watcher != null) { + hashCode ^= watcher.hashCode(); + } else { + hashCode ^= query.hashCode(); + for (Part filter : filters) { + hashCode ^= filter.hashCode(); + } + hashCode ^= trigger.hashCode(); } - hashCode ^= trigger.hashCode(); hashCode ^= action.hashCode(); hashCode ^= updateInterval; return hashCode; @@ -288,19 +305,25 @@ public class Chain { if (!name.equals(chain.name)) { return false; } - if (!query.equals(chain.query)) { - return false; - } - if (filters.size() != chain.filters.size()) { - return false; - } - for (int filterIndex = 0; filterIndex < filters.size(); ++filterIndex) { - if (!filters.get(filterIndex).equals(chain.filters.get(filterIndex))) { + if (watcher != null) { + if (!watcher.equals(chain.watcher)) { + return false; + } + } else { + if (!query.equals(chain.query)) { + return false; + } + if (filters.size() != chain.filters.size()) { + return false; + } + for (int filterIndex = 0; filterIndex < filters.size(); ++filterIndex) { + if (!filters.get(filterIndex).equals(chain.filters.get(filterIndex))) { + return false; + } + } + if (!trigger.equals(chain.trigger)) { return false; } - } - if (!trigger.equals(chain.trigger)) { - return false; } if (!action.equals(chain.action)) { return false;