From: David ‘Bombe’ Roden Date: Thu, 23 Apr 2026 17:38:02 +0000 (+0200) Subject: 🚧 Add additional states to state X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=8d4a29679a8a1cfea90e8a3148ad1672cc18e29d;p=rhynodge.git 🚧 Add additional states to state --- diff --git a/src/main/java/net/pterodactylus/rhynodge/State.java b/src/main/java/net/pterodactylus/rhynodge/State.java index b7e5739..6757d11 100644 --- a/src/main/java/net/pterodactylus/rhynodge/State.java +++ b/src/main/java/net/pterodactylus/rhynodge/State.java @@ -17,9 +17,12 @@ package net.pterodactylus.rhynodge; +import java.util.List; import net.pterodactylus.rhynodge.output.Output; import org.jspecify.annotations.Nullable; +import static java.util.Collections.emptyList; + /** * Defines the current state of a system. * @@ -97,4 +100,8 @@ public interface State { Output output(Reaction reaction); + default List getAdditionalStates() { + return emptyList(); + } + } diff --git a/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java b/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java index 87cade6..384a3b8 100644 --- a/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java +++ b/src/main/java/net/pterodactylus/rhynodge/states/AbstractState.java @@ -18,6 +18,8 @@ package net.pterodactylus.rhynodge.states; import java.time.Clock; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import kotlinx.html.DIV; @@ -55,6 +57,9 @@ public abstract class AbstractState implements State { /** The optional exception that occured while retrieving the state. */ private final @Nullable Throwable exception; + /** Additional states. */ + private final List additionalStates = new ArrayList<>(); + /** The number of consecutive failures. */ @JsonProperty private int failCount; @@ -211,6 +216,15 @@ public abstract class AbstractState implements State { .addText("text/html", htmlText()); } + public void addState(State state) { + additionalStates.add(state); + } + + @Override + public List getAdditionalStates() { + return additionalStates; + } + protected String summary(Reaction reaction) { return reaction.name(); } diff --git a/src/test/kotlin/net/pterodactylus/rhynodge/states/AbstractStateTest.kt b/src/test/kotlin/net/pterodactylus/rhynodge/states/AbstractStateTest.kt index 8913170..9947f73 100644 --- a/src/test/kotlin/net/pterodactylus/rhynodge/states/AbstractStateTest.kt +++ b/src/test/kotlin/net/pterodactylus/rhynodge/states/AbstractStateTest.kt @@ -6,6 +6,10 @@ import org.junit.jupiter.api.Test import java.time.Clock import java.time.Instant.now import java.time.ZoneOffset.UTC +import net.pterodactylus.util.test.containsNode +import org.hamcrest.Matchers +import org.hamcrest.Matchers.contains +import org.hamcrest.Matchers.instanceOf /** * Unit test for [AbstractState]. @@ -86,6 +90,15 @@ class AbstractStateTest { assertThat(state.htmlText(), equalTo("a & b")) } + @Test + fun `state can store additional states`() { + val state = object : AbstractState() { + override fun plainText() = "test" + } + state.addState(FailedState()) + assertThat(state.additionalStates, contains(instanceOf(FailedState::class.java))) + } + } private val testClock = Clock.fixed(now(), UTC)