diff --git a/pom.xml b/pom.xml index 83608da5..01fb0c33 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-keyvalue - 2.5.0-SNAPSHOT + 2.5.0-GH-1995-SNAPSHOT Spring Data KeyValue diff --git a/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java b/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java index 1e7bf140..3cbbe9d8 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java +++ b/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java @@ -102,6 +102,19 @@ public interface KeyValueAdapter extends DisposableBean { */ Iterable getAllOf(String keyspace); + /** + * Get all elements for given keyspace. + * + * @param type must not be {@literal null}. + * @param keyspace must not be {@literal null}. + * @return empty {@link Collection} if nothing found. + * @since 2.5 + */ + @SuppressWarnings("unchecked") + default Iterable getAllOf(String keyspace, Class type) { + return (Iterable) getAllOf(keyspace); + } + /** * Returns a {@link CloseableIterator} that iterates over all entries. * @@ -110,6 +123,19 @@ public interface KeyValueAdapter extends DisposableBean { */ CloseableIterator> entries(String keyspace); + /** + * Returns a {@link CloseableIterator} that iterates over all entries. + * + * @param type must not be {@literal null}. + * @param keyspace must not be {@literal null}. + * @return + * @since 2.5 + */ + @SuppressWarnings("unchecked") + default CloseableIterator> entries(String keyspace, Class type) { + return (CloseableIterator) entries(keyspace); + } + /** * Remove all objects of given type. * @@ -129,7 +155,9 @@ public interface KeyValueAdapter extends DisposableBean { * @param keyspace must not be {@literal null}. * @return empty {@link Collection} if no match found. */ - Iterable find(KeyValueQuery query, String keyspace); + default Iterable find(KeyValueQuery query, String keyspace) { + return find(query, keyspace, Object.class); + } /** * @param query must not be {@literal null}. diff --git a/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java b/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java index 28517b7c..bfef5cd8 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java +++ b/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java @@ -237,7 +237,7 @@ public Iterable findAll(Class type) { return executeRequired(adapter -> { - Iterable values = adapter.getAllOf(resolveKeySpace(type)); + Iterable values = adapter.getAllOf(resolveKeySpace(type), type); ArrayList filtered = new ArrayList<>(); for (Object candidate : values) { diff --git a/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java b/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java index d3dc44c0..fe030ed3 100644 --- a/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java +++ b/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java @@ -190,7 +190,7 @@ void findAllOfShouldReturnEntireCollection() { template.findAll(Foo.class); - verify(adapterMock, times(1)).getAllOf(Foo.class.getName()); + verify(adapterMock, times(1)).getAllOf(Foo.class.getName(), Foo.class); } @Test // DATACMNS-525 @@ -327,7 +327,7 @@ void insertShouldRespectTypeAliasOnSubClass() { void findAllOfShouldRespectTypeAliasAndFilterNonMatchingTypes() { Collection foo = Arrays.asList(ALIASED_USING_ALIAS_FOR, SUBCLASS_OF_ALIASED_USING_ALIAS_FOR); - when(adapterMock.getAllOf("aliased")).thenReturn(foo); + when(adapterMock.getAllOf("aliased", SUBCLASS_OF_ALIASED_USING_ALIAS_FOR.getClass())).thenReturn(foo); assertThat((Iterable) template.findAll(SUBCLASS_OF_ALIASED_USING_ALIAS_FOR.getClass())) .contains(SUBCLASS_OF_ALIASED_USING_ALIAS_FOR);