X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Fstates%2FAbstractState.java;h=8828fe4485777851df607824fa7814ad1f8f5996;hb=3f936ae4f345a960bf55f44786f91f2010dc9fca;hp=081fbcc9d0140197cfff43867d44f889212e2653;hpb=6f0fdf9287bcedec6de5df619b317f4263ebe9ba;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java b/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java index 081fbcc..8828fe4 100644 --- a/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java +++ b/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java @@ -17,6 +17,8 @@ package net.pterodactylus.rhynodge.states; +import java.time.Clock; +import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -69,11 +71,26 @@ public abstract class AbstractState implements State { * otherwise */ protected AbstractState(boolean success) { - this(success, true, null); + this(Clock.systemUTC(), success); + } + + /** + * Creates a new state. + * + * @param clock The clock for generating {@link #time} + * @param success {@code true} if the state is successful, {@code false} + * otherwise + */ + protected AbstractState(Clock clock, boolean success) { + this(clock, success, true, null); } protected AbstractState(boolean success, boolean empty) { - this(success, empty, null); + this(Clock.systemUTC(), success, empty); + } + + protected AbstractState(Clock clock, boolean success, boolean empty) { + this(clock, success, empty, null); } /** @@ -83,7 +100,17 @@ public abstract class AbstractState implements State { * The exception that occured while retrieving the state */ protected AbstractState(Throwable exception) { - this(false, true, exception); + this(Clock.systemUTC(), exception); + } + + /** + * Creates a new non-successful state with the given exception. + * + * @param clock The clock for generating {@link #time} + * @param exception The exception that occured while retrieving the state + */ + protected AbstractState(Clock clock, Throwable exception) { + this(clock, false, true, exception); } /** @@ -96,7 +123,19 @@ public abstract class AbstractState implements State { * The exception that occured while retrieving the state */ protected AbstractState(boolean success, boolean empty, Throwable exception) { - this.time = System.currentTimeMillis(); + this(Clock.systemUTC(), success, empty, exception); + } + + /** + * Creates a new state. + * + * @param clock The clock for generating {@link #time} + * @param success {@code true} if the state is successful, {@code false} + * otherwise + * @param exception The exception that occured while retrieving the state + */ + protected AbstractState(Clock clock, boolean success, boolean empty, Throwable exception) { + this.time = clock.millis(); this.success = success; this.empty = empty; this.exception = exception; @@ -176,4 +215,18 @@ public abstract class AbstractState implements State { @SuppressWarnings("UnstableApiUsage") private static final Escaper htmlEscaper = HtmlEscapers.htmlEscaper(); + @Override + public int hashCode() { + return Objects.hash(success, empty, time, failCount, exception); + } + + @Override + public boolean equals(Object object) { + if (!(object instanceof AbstractState)) { + return false; + } + AbstractState abstractState = (AbstractState) object; + return (success == abstractState.success) && (empty == abstractState.empty) && (time == abstractState.time) && (failCount == abstractState.failCount) && Objects.equals(exception, abstractState.exception); + } + }