diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java index 1e9cc2b5..1b171781 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/component/Pagination.java @@ -1,5 +1,6 @@ package me.devnatan.inventoryframework.component; +import me.devnatan.inventoryframework.state.StateValue; import me.devnatan.inventoryframework.state.StateValueHost; import org.jetbrains.annotations.ApiStatus; @@ -16,7 +17,7 @@ * during rendering, this component is determined from the {@link #currentPageIndex() current page * index}. */ -public interface Pagination extends ComponentComposition { +public interface Pagination extends ComponentComposition, StateValue { /** * The current page number. diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/AbstractStateValue.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/AbstractStateValue.java new file mode 100644 index 00000000..c459b6ba --- /dev/null +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/AbstractStateValue.java @@ -0,0 +1,40 @@ +package me.devnatan.inventoryframework.state; + +import org.jetbrains.annotations.ApiStatus; + +/** + * This is an internal inventory-framework API that should not be used from outside of + * this library. No compatibility guarantees are provided. + */ +@ApiStatus.Internal +public abstract class AbstractStateValue implements StateValue { + + private final State> state; + + protected AbstractStateValue(State> state) { + this.state = state; + } + + @Override + public final State> getState() { + return state; + } + + @Override + public final long getId() { + return getState().internalId(); + } + + @Override + public abstract Object get(); + + @Override + public void set(Object value) { + throw new IllegalStateModificationException("Immutable"); + } + + @Override + public String toString() { + return "AbstractStateValue{" + "state=" + state + '}'; + } +} diff --git a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValue.java b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValue.java index 4fe519f7..babad84d 100644 --- a/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValue.java +++ b/inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateValue.java @@ -5,60 +5,43 @@ /** * Wrapper of the value of a {@link State} for a single {@link StateValueHost}. + *
+ * This is an internal inventory-framework API that should not be used from outside of + * this library. No compatibility guarantees are provided. */ -// TODO Must be a interface to allow spread across "component as state" (like Pagination) -public abstract class StateValue { - - private final State> state; - - public StateValue(State> state) { - this.state = state; - } +@ApiStatus.Internal +public interface StateValue { /** - * The state who holds this value. + * The id of this state on its current host. * - * @return The state who holds this value. + * @return The state id. */ - public final State> getState() { - return state; - } + long getId(); /** - * The id of this state on its current host. + * The state who holds this value. * - * @return The state id. + * @return The state who holds this value. */ - public final long getId() { - return getState().internalId(); - } + State> getState(); /** * The current state value. *
* The value returned and consistency with values returned by the same earlier is unknown as * this is implementation defined. - *
- * This is an internal inventory-framework API that should not be used from outside of - * this library. No compatibility guarantees are provided. * * @return The current state value. */ - @ApiStatus.Internal @UnknownNullability - protected abstract Object get(); + Object get(); /** * Sets the new state value. - *
- * This is an internal inventory-framework API that should not be used from outside of
- * this library. No compatibility guarantees are provided.
*
* @param value The new value.
* @throws StateException If this value can't be set.
*/
- @ApiStatus.Internal
- protected void set(Object value) {
- throw new IllegalStateModificationException("Immutable");
- }
+ void set(Object value);
}
diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java
index 5154f0e7..893824f4 100644
--- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java
+++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/component/PaginationImpl.java
@@ -20,15 +20,15 @@
import me.devnatan.inventoryframework.context.IFSlotClickContext;
import me.devnatan.inventoryframework.context.IFSlotRenderContext;
import me.devnatan.inventoryframework.internal.LayoutSlot;
+import me.devnatan.inventoryframework.state.AbstractStateValue;
import me.devnatan.inventoryframework.state.State;
-import me.devnatan.inventoryframework.state.StateValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.UnmodifiableView;
import org.jetbrains.annotations.VisibleForTesting;
// TODO add "key" to child pagination components and check if it needs to be updated based on it
@VisibleForTesting
-public class PaginationImpl extends StateValue implements Pagination, InteractionHandler {
+public class PaginationImpl extends AbstractStateValue implements Pagination, InteractionHandler {
private final List
* This is an internal inventory-framework API that should not be used from outside of
* this library. No compatibility guarantees are provided.
*/
@ApiStatus.Internal
-public final class ComputedValue extends StateValue {
+public final class ComputedValue extends AbstractStateValue {
private final Supplier> factory;
diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/ImmutableValue.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/ImmutableValue.java
index 49a2802e..640eb8f6 100644
--- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/ImmutableValue.java
+++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/ImmutableValue.java
@@ -2,18 +2,17 @@
import java.util.Objects;
import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.NotNull;
/**
* This is an internal inventory-framework API that should not be used from outside of
* this library. No compatibility guarantees are provided.
*/
@ApiStatus.Internal
-public final class ImmutableValue extends StateValue {
+public final class ImmutableValue extends AbstractStateValue {
private final Object value;
- public ImmutableValue(@NotNull State> state, Object value) {
+ public ImmutableValue(State> state, Object value) {
super(state);
this.value = value;
}
diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/InitialDataStateValue.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/InitialDataStateValue.java
index 16479abe..aed718bb 100644
--- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/InitialDataStateValue.java
+++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/InitialDataStateValue.java
@@ -11,7 +11,7 @@
* this library. No compatibility guarantees are provided.
*/
@ApiStatus.Internal
-public final class InitialDataStateValue extends StateValue {
+public final class InitialDataStateValue extends AbstractStateValue {
private final StateValue backingValue;
diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/LazyValue.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/LazyValue.java
index 256aa64b..9fd5ae53 100644
--- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/LazyValue.java
+++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/LazyValue.java
@@ -10,19 +10,19 @@
*
* The initial state value is set by a {@link LazyValue#computation}, and this value remains the
* {@link LazyValue#currValue current value} throughout the lifecycle of that value.
- *
+ *
* This is an internal inventory-framework API that should not be used from outside of
* this library. No compatibility guarantees are provided.
*/
@ApiStatus.Internal
-public final class LazyValue extends StateValue {
+public final class LazyValue extends AbstractStateValue {
private static final Object UNINITIALIZED = new Object();
private final Supplier> computation;
private Object currValue = UNINITIALIZED;
- public LazyValue(@NotNull State> state, @NotNull Supplier> computation) {
+ public LazyValue(State> state, @NotNull Supplier> computation) {
super(state);
this.computation = computation;
}
@@ -30,7 +30,6 @@ public LazyValue(@NotNull State> state, @NotNull Supplier> computation) {
@Override
public Object get() {
if (currValue.equals(UNINITIALIZED)) currValue = computation.get();
-
return currValue;
}
diff --git a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableValue.java b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableValue.java
index 7e011518..1bc8a8b4 100644
--- a/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableValue.java
+++ b/inventory-framework-core/src/main/java/me/devnatan/inventoryframework/state/MutableValue.java
@@ -2,18 +2,17 @@
import java.util.Objects;
import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.NotNull;
/**
* This is an internal inventory-framework API that should not be used from outside of
* this library. No compatibility guarantees are provided.
*/
@ApiStatus.Internal
-public class MutableValue extends StateValue {
+public class MutableValue extends AbstractStateValue {
private Object currValue;
- public MutableValue(@NotNull State> state, Object currValue) {
+ public MutableValue(State> state, Object currValue) {
super(state);
this.currValue = currValue;
}