diff --git a/src/main/java/org/springframework/data/keyvalue/core/AbstractKeyValueAdapter.java b/src/main/java/org/springframework/data/keyvalue/core/AbstractKeyValueAdapter.java index 2a11a0a..942f891 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/AbstractKeyValueAdapter.java +++ b/src/main/java/org/springframework/data/keyvalue/core/AbstractKeyValueAdapter.java @@ -57,6 +57,33 @@ public abstract class AbstractKeyValueAdapter implements KeyValueAdapter { return engine; } + /* + * (non-Javadoc) + * @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class) + */ + @Override + public T get(Serializable id, Serializable keyspace, Class type) { + return (T) get(id, keyspace); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class) + */ + @Override + public T delete(Serializable id, Serializable keyspace, Class type) { + return (T) delete(id, keyspace); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class) + */ + @Override + public Iterable find(KeyValueQuery query, Serializable keyspace, Class type) { + return (Iterable) engine.execute(query, keyspace, type); + } + /* * (non-Javadoc) * @see org.springframework.data.keyvalue.core.KeyValueAdapter#find(org.springframework.data.keyvalue.core.query.KeyValueQuery, java.io.Serializable) 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 1f47f18..f72fd09 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java +++ b/src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java @@ -58,6 +58,15 @@ public interface KeyValueAdapter extends DisposableBean { */ Object get(Serializable id, Serializable keyspace); + /** + * @param id + * @param keyspace + * @param type + * @return + * @since 1.1 + */ + T get(Serializable id, Serializable keyspace, Class type); + /** * Delete and return the obect with given type and id. * @@ -67,6 +76,15 @@ public interface KeyValueAdapter extends DisposableBean { */ Object delete(Serializable id, Serializable keyspace); + /** + * @param id + * @param keyspace + * @param type + * @return + * @since 1.1 + */ + T delete(Serializable id, Serializable keyspace, Class type); + /** * Get all elements for given keyspace. * @@ -104,6 +122,15 @@ public interface KeyValueAdapter extends DisposableBean { */ Iterable find(KeyValueQuery query, Serializable keyspace); + /** + * @param query + * @param keyspace + * @param type + * @return + * @since 1.1 + */ + Iterable find(KeyValueQuery query, Serializable keyspace, Class type); + /** * Count number of objects within {@literal keyspace}. * 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 8d73945..452fbc6 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java +++ b/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java @@ -271,7 +271,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub @Override public T doInKeyValue(KeyValueAdapter adapter) { - Object result = adapter.get(id, keyspace); + Object result = adapter.get(id, keyspace, type); if (result == null || typeCheck(type, result)) { return (T) result; @@ -342,10 +342,9 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub T result = execute(new KeyValueCallback() { - @SuppressWarnings("unchecked") @Override public T doInKeyValue(KeyValueAdapter adapter) { - return (T) adapter.delete(id, keyspace); + return (T) adapter.delete(id, keyspace, type); } }); @@ -394,7 +393,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub @Override public Iterable doInKeyValue(KeyValueAdapter adapter) { - Iterable result = adapter.find(query, resolveKeySpace(type)); + Iterable result = adapter.find(query, resolveKeySpace(type), type); if (result == null) { return Collections.emptySet(); } diff --git a/src/main/java/org/springframework/data/keyvalue/core/QueryEngine.java b/src/main/java/org/springframework/data/keyvalue/core/QueryEngine.java index 16c26a8..4fab579 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/QueryEngine.java +++ b/src/main/java/org/springframework/data/keyvalue/core/QueryEngine.java @@ -56,6 +56,21 @@ public abstract class QueryEngine Collection execute(KeyValueQuery query, Serializable keyspace, Class type) { + + CRITERIA criteria = this.criteriaAccessor != null ? this.criteriaAccessor.resolve(query) : null; + SORT sort = this.sortAccessor != null ? this.sortAccessor.resolve(query) : null; + + return execute(criteria, sort, query.getOffset(), query.getRows(), keyspace, type); + } + /** * Extract query attributes and delegate to concrete execution. * @@ -79,6 +94,21 @@ public abstract class QueryEngine execute(CRITERIA criteria, SORT sort, int offset, int rows, Serializable keyspace); + /** + * @param criteria + * @param sort + * @param offset + * @param rows + * @param keyspace + * @param type + * @return + * @since 1.1 + */ + public Collection execute(CRITERIA criteria, SORT sort, int offset, int rows, Serializable keyspace, + Class type) { + return (Collection) execute(criteria, sort, offset, rows, keyspace); + } + /** * @param criteria * @param keyspace 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 ec872d0..15cec55 100644 --- a/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java +++ b/src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java @@ -215,7 +215,7 @@ public class KeyValueTemplateUnitTests { template.findById("1", Foo.class); - verify(adapterMock, times(1)).get("1", Foo.class.getName()); + verify(adapterMock, times(1)).get("1", Foo.class.getName(), Foo.class); } /** @@ -253,7 +253,7 @@ public class KeyValueTemplateUnitTests { template.find(STRING_QUERY, Foo.class); - verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName()); + verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName(), Foo.class); } /** @@ -267,7 +267,7 @@ public class KeyValueTemplateUnitTests { template.findInRange(1, 5, Foo.class); - verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName())); + verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName()), eq(Foo.class)); assertThat(captor.getValue().getOffset(), is(1)); assertThat(captor.getValue().getRows(), is(5)); assertThat(captor.getValue().getCritieria(), nullValue()); @@ -330,7 +330,7 @@ public class KeyValueTemplateUnitTests { template.delete("1", Foo.class); - verify(adapterMock, times(1)).delete("1", Foo.class.getName()); + verify(adapterMock, times(1)).delete("1", Foo.class.getName(), Foo.class); } /** @@ -344,7 +344,7 @@ public class KeyValueTemplateUnitTests { template.delete(source); - verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName()); + verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName(), ClassWithStringId.class); } /** @@ -619,7 +619,7 @@ public class KeyValueTemplateUnitTests { public void shouldPublishAfterDeleteEventCorrectly() { setEventsToPublish(AfterDeleteEvent.class); - when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()))).thenReturn(FOO_ONE); + when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()), eq(Foo.class))).thenReturn(FOO_ONE); template.delete("1", FOO_ONE.getClass()); @@ -666,7 +666,7 @@ public class KeyValueTemplateUnitTests { setEventsToPublish(AfterGetEvent.class); - when(adapterMock.get(eq("1"), eq(FOO_ONE.getClass().getName()))).thenReturn(FOO_ONE); + when(adapterMock.get(eq("1"), eq(FOO_ONE.getClass().getName()), eq(Foo.class))).thenReturn(FOO_ONE); template.findById("1", FOO_ONE.getClass());