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.