From 063cc0688bd7a0ed533f5dc844502f31ffbb4286 Mon Sep 17 00:00:00 2001 From: Patrick Doyle Date: Sun, 18 Feb 2024 09:45:00 -0500 Subject: [PATCH] More sealed types --- .../src/main/java/io/vena/bosk/AddressableByIdentifier.java | 2 +- .../src/main/java/io/vena/bosk/EnumerableByIdentifier.java | 2 +- .../io/vena/bosk/drivers/mongo/AbstractFormatDriver.java | 2 +- .../java/io/vena/bosk/drivers/mongo/DisconnectedDriver.java | 2 +- .../main/java/io/vena/bosk/drivers/mongo/FormatDriver.java | 4 +++- .../src/main/java/io/vena/bosk/drivers/mongo/MainDriver.java | 2 +- .../main/java/io/vena/bosk/drivers/mongo/MongoDriver.java | 5 ++++- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/bosk-core/src/main/java/io/vena/bosk/AddressableByIdentifier.java b/bosk-core/src/main/java/io/vena/bosk/AddressableByIdentifier.java index 7d0ea1fd..d2e9004d 100644 --- a/bosk-core/src/main/java/io/vena/bosk/AddressableByIdentifier.java +++ b/bosk-core/src/main/java/io/vena/bosk/AddressableByIdentifier.java @@ -1,6 +1,6 @@ package io.vena.bosk; -interface AddressableByIdentifier { +sealed interface AddressableByIdentifier permits EnumerableByIdentifier { /** * @return The item with the given id, or null if no such item exists. */ diff --git a/bosk-core/src/main/java/io/vena/bosk/EnumerableByIdentifier.java b/bosk-core/src/main/java/io/vena/bosk/EnumerableByIdentifier.java index b614596a..1ad24f78 100644 --- a/bosk-core/src/main/java/io/vena/bosk/EnumerableByIdentifier.java +++ b/bosk-core/src/main/java/io/vena/bosk/EnumerableByIdentifier.java @@ -2,6 +2,6 @@ import java.util.List; -public interface EnumerableByIdentifier extends AddressableByIdentifier { +sealed public interface EnumerableByIdentifier extends AddressableByIdentifier permits Catalog, SideTable { List ids(); } diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/AbstractFormatDriver.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/AbstractFormatDriver.java index a5c95ab5..3c26438f 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/AbstractFormatDriver.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/AbstractFormatDriver.java @@ -15,7 +15,7 @@ import static io.vena.bosk.drivers.mongo.Formatter.REVISION_ZERO; @RequiredArgsConstructor -abstract class AbstractFormatDriver implements FormatDriver { +non-sealed abstract class AbstractFormatDriver implements FormatDriver { final RootReference rootRef; final Formatter formatter; diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/DisconnectedDriver.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/DisconnectedDriver.java index c4795e7f..05e875b1 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/DisconnectedDriver.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/DisconnectedDriver.java @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory; @RequiredArgsConstructor -class DisconnectedDriver implements FormatDriver { +final class DisconnectedDriver implements FormatDriver { private final Throwable reason; @Override public void submitReplacement(Reference target, T newValue) { diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/FormatDriver.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/FormatDriver.java index 18f24904..60858b6f 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/FormatDriver.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/FormatDriver.java @@ -33,7 +33,9 @@ * Implementing {@link #initialRoot} or {@link #refurbish()} * */ -interface FormatDriver extends MongoDriver { +sealed interface FormatDriver + extends MongoDriver + permits AbstractFormatDriver, DisconnectedDriver { void onEvent(ChangeStreamDocument event) throws UnprocessableEventException; /** diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MainDriver.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MainDriver.java index 22abe00b..d932b587 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MainDriver.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MainDriver.java @@ -54,7 +54,7 @@ * are delegated to a {@link FormatDriver} object that can be swapped out dynamically * as the database evolves. */ -class MainDriver implements MongoDriver { +final class MainDriver implements MongoDriver { private final Bosk bosk; private final ChangeReceiver receiver; private final MongoDriverSettings driverSettings; diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MongoDriver.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MongoDriver.java index 916e53b1..6502e349 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MongoDriver.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/MongoDriver.java @@ -8,7 +8,10 @@ import io.vena.bosk.drivers.mongo.status.MongoStatus; import java.io.IOException; -public interface MongoDriver extends BoskDriver { +public sealed interface MongoDriver + extends BoskDriver + permits MainDriver, FormatDriver { + /** * Deserializes and re-serializes the entire bosk contents, * thus updating the database to match the current serialized format.