diff --git a/driver/src/main/java/org/neo4j/driver/BookmarkManagerConfig.java b/driver/src/main/java/org/neo4j/driver/BookmarkManagerConfig.java index da11f63f37..1b26caa3c4 100644 --- a/driver/src/main/java/org/neo4j/driver/BookmarkManagerConfig.java +++ b/driver/src/main/java/org/neo4j/driver/BookmarkManagerConfig.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.BiConsumer; @@ -29,13 +30,13 @@ */ public final class BookmarkManagerConfig { private final Map> initialBookmarks; - private final BiConsumer> bookmarkConsumer; - private final BookmarkSupplier bookmarkSupplier; + private final BiConsumer> bookmarksConsumer; + private final BookmarksSupplier bookmarksSupplier; private BookmarkManagerConfig(BookmarkManagerConfigBuilder builder) { this.initialBookmarks = builder.initialBookmarks; - this.bookmarkConsumer = builder.bookmarkConsumer; - this.bookmarkSupplier = builder.bookmarkSupplier; + this.bookmarksConsumer = builder.bookmarksConsumer; + this.bookmarksSupplier = builder.bookmarksSupplier; } /** @@ -57,21 +58,21 @@ public Map> initialBookmarks() { } /** - * Returns a bookmark update listener that will be notified when database bookmarks are updated. + * Returns bookmarks consumer that will be notified when database bookmarks are updated. * - * @return the update listener or {@code null} + * @return the bookmarks consumer */ - public BiConsumer> updateListener() { - return bookmarkConsumer; + public Optional>> bookmarksConsumer() { + return Optional.ofNullable(bookmarksConsumer); } /** - * Returns bookmark supplier that will be used by the bookmark manager when getting bookmarks. + * Returns bookmarks supplier that will be used by the bookmark manager when getting bookmarks. * - * @return the bookmark supplier or {@code null} + * @return the bookmark supplier */ - public BookmarkSupplier bookmarkSupplier() { - return bookmarkSupplier; + public Optional bookmarksSupplier() { + return Optional.ofNullable(bookmarksSupplier); } /** @@ -79,8 +80,8 @@ public BookmarkSupplier bookmarkSupplier() { */ public static class BookmarkManagerConfigBuilder { private Map> initialBookmarks = Collections.emptyMap(); - private BiConsumer> bookmarkConsumer; - private BookmarkSupplier bookmarkSupplier; + private BiConsumer> bookmarksConsumer; + private BookmarksSupplier bookmarksSupplier; private BookmarkManagerConfigBuilder() {} @@ -97,30 +98,30 @@ public BookmarkManagerConfigBuilder withInitialBookmarks(Map * The consumer will be called outside bookmark manager's synchronisation lock. * - * @param bookmarkConsumer bookmark consumer + * @param bookmarksConsumer bookmarks consumer * @return this builder */ - public BookmarkManagerConfigBuilder withBookmarkConsumer(BiConsumer> bookmarkConsumer) { - this.bookmarkConsumer = bookmarkConsumer; + public BookmarkManagerConfigBuilder withBookmarksConsumer(BiConsumer> bookmarksConsumer) { + this.bookmarksConsumer = bookmarksConsumer; return this; } /** - * Provide a bookmark supplier. + * Provide bookmarks supplier. *

* The supplied bookmarks will be served alongside the bookmarks served by the bookmark manager. The supplied bookmarks will not be stored nor managed by the bookmark manager. *

* The supplier will be called outside bookmark manager's synchronisation lock. * - * @param bookmarkSupplier the bookmarks supplier + * @param bookmarksSupplier the bookmarks supplier * @return this builder */ - public BookmarkManagerConfigBuilder withBookmarkSupplier(BookmarkSupplier bookmarkSupplier) { - this.bookmarkSupplier = bookmarkSupplier; + public BookmarkManagerConfigBuilder withBookmarksSupplier(BookmarksSupplier bookmarksSupplier) { + this.bookmarksSupplier = bookmarksSupplier; return this; } diff --git a/driver/src/main/java/org/neo4j/driver/BookmarkManagers.java b/driver/src/main/java/org/neo4j/driver/BookmarkManagers.java index 8f81ca1a85..83d4feb605 100644 --- a/driver/src/main/java/org/neo4j/driver/BookmarkManagers.java +++ b/driver/src/main/java/org/neo4j/driver/BookmarkManagers.java @@ -31,6 +31,9 @@ public interface BookmarkManagers { * @return the bookmark manager */ static BookmarkManager defaultManager(BookmarkManagerConfig config) { - return new Neo4jBookmarkManager(config.initialBookmarks(), config.updateListener(), config.bookmarkSupplier()); + return new Neo4jBookmarkManager( + config.initialBookmarks(), + config.bookmarksConsumer().orElse(null), + config.bookmarksSupplier().orElse(null)); } } diff --git a/driver/src/main/java/org/neo4j/driver/BookmarkSupplier.java b/driver/src/main/java/org/neo4j/driver/BookmarksSupplier.java similarity index 97% rename from driver/src/main/java/org/neo4j/driver/BookmarkSupplier.java rename to driver/src/main/java/org/neo4j/driver/BookmarksSupplier.java index 2d3949607d..02a44fdc21 100644 --- a/driver/src/main/java/org/neo4j/driver/BookmarkSupplier.java +++ b/driver/src/main/java/org/neo4j/driver/BookmarksSupplier.java @@ -25,7 +25,7 @@ *

* Implementations must avoid calling driver. */ -public interface BookmarkSupplier { +public interface BookmarksSupplier { /** * Supplies a set of bookmarks for a given database. * diff --git a/driver/src/main/java/org/neo4j/driver/internal/Neo4jBookmarkManager.java b/driver/src/main/java/org/neo4j/driver/internal/Neo4jBookmarkManager.java index 3ab4882fcc..54ca8a9db5 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/Neo4jBookmarkManager.java +++ b/driver/src/main/java/org/neo4j/driver/internal/Neo4jBookmarkManager.java @@ -34,7 +34,7 @@ import java.util.stream.Collectors; import org.neo4j.driver.Bookmark; import org.neo4j.driver.BookmarkManager; -import org.neo4j.driver.BookmarkSupplier; +import org.neo4j.driver.BookmarksSupplier; /** * A basic {@link BookmarkManager} implementation. @@ -47,16 +47,16 @@ public final class Neo4jBookmarkManager implements BookmarkManager { private final Map> databaseToBookmarks = new HashMap<>(); private final BiConsumer> updateListener; - private final BookmarkSupplier bookmarkSupplier; + private final BookmarksSupplier bookmarksSupplier; public Neo4jBookmarkManager( Map> initialBookmarks, BiConsumer> updateListener, - BookmarkSupplier bookmarkSupplier) { + BookmarksSupplier bookmarksSupplier) { Objects.requireNonNull(initialBookmarks, "initialBookmarks must not be null"); this.databaseToBookmarks.putAll(initialBookmarks); this.updateListener = updateListener; - this.bookmarkSupplier = bookmarkSupplier; + this.bookmarksSupplier = bookmarksSupplier; } @Override @@ -82,9 +82,9 @@ public void updateBookmarks(String database, Set previousBookmarks, Se public Set getBookmarks(String database) { var immutableBookmarks = executeWithLock( rwLock.readLock(), () -> databaseToBookmarks.getOrDefault(database, Collections.emptySet())); - if (bookmarkSupplier != null) { + if (bookmarksSupplier != null) { var bookmarks = new HashSet<>(immutableBookmarks); - bookmarks.addAll(bookmarkSupplier.getBookmarks(database)); + bookmarks.addAll(bookmarksSupplier.getBookmarks(database)); immutableBookmarks = Collections.unmodifiableSet(bookmarks); } return immutableBookmarks; @@ -95,9 +95,9 @@ public Set getAllBookmarks() { var immutableBookmarks = executeWithLock(rwLock.readLock(), () -> databaseToBookmarks.values().stream() .flatMap(Collection::stream)) .collect(Collectors.toUnmodifiableSet()); - if (bookmarkSupplier != null) { + if (bookmarksSupplier != null) { var bookmarks = new HashSet<>(immutableBookmarks); - bookmarks.addAll(bookmarkSupplier.getAllBookmarks()); + bookmarks.addAll(bookmarksSupplier.getAllBookmarks()); immutableBookmarks = Collections.unmodifiableSet(bookmarks); } return immutableBookmarks; diff --git a/driver/src/test/java/org/neo4j/driver/BookmarkManagerConfigTest.java b/driver/src/test/java/org/neo4j/driver/BookmarkManagerConfigTest.java index 7a83caeff5..25fdc6e21b 100644 --- a/driver/src/test/java/org/neo4j/driver/BookmarkManagerConfigTest.java +++ b/driver/src/test/java/org/neo4j/driver/BookmarkManagerConfigTest.java @@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; @@ -40,8 +39,8 @@ void shouldReturnDefaultValues() { // THEN assertNotNull(config.initialBookmarks()); assertTrue(config.initialBookmarks().isEmpty()); - assertNull(config.updateListener()); - assertNull(config.bookmarkSupplier()); + assertTrue(config.bookmarksConsumer().isEmpty()); + assertTrue(config.bookmarksSupplier().isEmpty()); } @Test @@ -54,8 +53,8 @@ void shouldReturnInitialBookmarks() { // WHEN & THEN assertEquals(bookmarks, config.initialBookmarks()); - assertNull(config.updateListener()); - assertNull(config.bookmarkSupplier()); + assertTrue(config.bookmarksConsumer().isEmpty()); + assertTrue(config.bookmarksSupplier().isEmpty()); } @Test @@ -65,30 +64,30 @@ void shouldReturnUpdateListener() { // WHEN config = BookmarkManagerConfig.builder() - .withBookmarkConsumer(updateListener) + .withBookmarksConsumer(updateListener) .build(); // WHEN & THEN assertNotNull(config.initialBookmarks()); assertTrue(config.initialBookmarks().isEmpty()); - assertEquals(updateListener, config.updateListener()); - assertNull(config.bookmarkSupplier()); + assertEquals(updateListener, config.bookmarksConsumer().orElse(null)); + assertTrue(config.bookmarksSupplier().isEmpty()); } @Test void shouldReturnBookmarkSupplier() { // GIVEN - var bookmarkSupplier = mock(BookmarkSupplier.class); + var bookmarkSupplier = mock(BookmarksSupplier.class); // WHEN config = BookmarkManagerConfig.builder() - .withBookmarkSupplier(bookmarkSupplier) + .withBookmarksSupplier(bookmarkSupplier) .build(); // WHEN & THEN assertNotNull(config.initialBookmarks()); assertTrue(config.initialBookmarks().isEmpty()); - assertNull(config.updateListener()); - assertEquals(bookmarkSupplier, config.bookmarkSupplier()); + assertTrue(config.bookmarksConsumer().isEmpty()); + assertEquals(bookmarkSupplier, config.bookmarksSupplier().orElse(null)); } } diff --git a/driver/src/test/java/org/neo4j/driver/internal/Neo4jBookmarkManagerTest.java b/driver/src/test/java/org/neo4j/driver/internal/Neo4jBookmarkManagerTest.java index 343425b1e1..37370361af 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/Neo4jBookmarkManagerTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/Neo4jBookmarkManagerTest.java @@ -31,7 +31,7 @@ import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.neo4j.driver.Bookmark; -import org.neo4j.driver.BookmarkSupplier; +import org.neo4j.driver.BookmarksSupplier; class Neo4jBookmarkManagerTest { Neo4jBookmarkManager manager; @@ -102,7 +102,7 @@ void shouldGetBookmarksFromBookmarkSupplier() { // GIVEN var initialBookmark = Bookmark.from("SY:000001"); var initialBookmarks = Map.of(DatabaseNameUtil.SYSTEM_DATABASE_NAME, Set.of(initialBookmark)); - var bookmarkSupplier = mock(BookmarkSupplier.class); + var bookmarkSupplier = mock(BookmarksSupplier.class); var supplierBookmark = Bookmark.from("SY:000002"); given(bookmarkSupplier.getBookmarks(DatabaseNameUtil.SYSTEM_DATABASE_NAME)) .willReturn(Set.of(supplierBookmark)); @@ -121,7 +121,7 @@ void shouldGetAllBookmarksFromBookmarkSupplier() { // GIVEN var initialBookmark = Bookmark.from("SY:000001"); var initialBookmarks = Map.of(DatabaseNameUtil.SYSTEM_DATABASE_NAME, Set.of(initialBookmark)); - var bookmarkSupplier = mock(BookmarkSupplier.class); + var bookmarkSupplier = mock(BookmarksSupplier.class); var supplierBookmark = Bookmark.from("SY:000002"); given(bookmarkSupplier.getAllBookmarks()).willReturn(Set.of(supplierBookmark)); manager = new Neo4jBookmarkManager(initialBookmarks, null, bookmarkSupplier); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java index fc22a6397c..7e7befe0a9 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/NewDriver.java @@ -128,12 +128,12 @@ public TestkitResponse process(TestkitState testkitState) { var managerConfigBuilder = org.neo4j.driver.BookmarkManagerConfig.builder().withInitialBookmarks(initialBookmarks); if (managerConfig.isBookmarksSupplierRegistered()) { - managerConfigBuilder = managerConfigBuilder.withBookmarkSupplier( - new TestkitBookmarkSupplier(testkitState, this::dispatchTestkitCallback)); + managerConfigBuilder = managerConfigBuilder.withBookmarksSupplier( + new TestkitBookmarksSupplier(testkitState, this::dispatchTestkitCallback)); } if (managerConfig.isBookmarksConsumerRegistered()) { - managerConfigBuilder = managerConfigBuilder.withBookmarkConsumer( - new TestkitBookmarkConsumer(testkitState, this::dispatchTestkitCallback)); + managerConfigBuilder = managerConfigBuilder.withBookmarksConsumer( + new TestkitBookmarksConsumer(testkitState, this::dispatchTestkitCallback)); } var manager = BookmarkManagers.defaultManager(managerConfigBuilder.build()); configBuilder.withBookmarkManager(manager); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkConsumer.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksConsumer.java similarity index 96% rename from testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkConsumer.java rename to testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksConsumer.java index d72a46c9bf..d5e2c41939 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkConsumer.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksConsumer.java @@ -30,7 +30,7 @@ import org.neo4j.driver.Bookmark; @RequiredArgsConstructor -class TestkitBookmarkConsumer implements BiConsumer> { +class TestkitBookmarksConsumer implements BiConsumer> { private final TestkitState testkitState; private final BiFunction> dispatchFunction; diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkSupplier.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksSupplier.java similarity index 96% rename from testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkSupplier.java rename to testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksSupplier.java index 724aebd5f9..9c43d0ddb4 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarkSupplier.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TestkitBookmarksSupplier.java @@ -28,10 +28,10 @@ import neo4j.org.testkit.backend.messages.responses.BookmarksSupplierRequest; import neo4j.org.testkit.backend.messages.responses.TestkitCallback; import org.neo4j.driver.Bookmark; -import org.neo4j.driver.BookmarkSupplier; +import org.neo4j.driver.BookmarksSupplier; @RequiredArgsConstructor -class TestkitBookmarkSupplier implements BookmarkSupplier { +class TestkitBookmarksSupplier implements BookmarksSupplier { private final TestkitState testkitState; private final BiFunction> dispatchFunction;