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.
*
Output output(Reaction reaction);
+ default List<State> getAdditionalStates() {
+ return emptyList();
+ }
+
}
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;
/** The optional exception that occured while retrieving the state. */
private final @Nullable Throwable exception;
+ /** Additional states. */
+ private final List<State> additionalStates = new ArrayList<>();
+
/** The number of consecutive failures. */
@JsonProperty
private int failCount;
.addText("text/html", htmlText());
}
+ public void addState(State state) {
+ additionalStates.add(state);
+ }
+
+ @Override
+ public List<State> getAdditionalStates() {
+ return additionalStates;
+ }
+
protected String summary(Reaction reaction) {
return reaction.name();
}
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].
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)