Skip to content

Commit cf4ee36

Browse files
christophstroblmp911de
authored andcommitted
DATAKV-117 - Pass on type information to KV Adapter.
Original pull request: #18.
1 parent 426c2d2 commit cf4ee36

File tree

5 files changed

+94
-11
lines changed

5 files changed

+94
-11
lines changed

src/main/java/org/springframework/data/keyvalue/core/AbstractKeyValueAdapter.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,33 @@ protected AbstractKeyValueAdapter(QueryEngine<? extends KeyValueAdapter, ?, ?> e
5757
return engine;
5858
}
5959

60+
/*
61+
* (non-Javadoc)
62+
* @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class)
63+
*/
64+
@Override
65+
public <T> T get(Serializable id, Serializable keyspace, Class<T> type) {
66+
return (T) get(id, keyspace);
67+
}
68+
69+
/*
70+
* (non-Javadoc)
71+
* @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class)
72+
*/
73+
@Override
74+
public <T> T delete(Serializable id, Serializable keyspace, Class<T> type) {
75+
return (T) delete(id, keyspace);
76+
}
77+
78+
/*
79+
* (non-Javadoc)
80+
* @see org.springframework.data.keyvalue.core.KeyValueAdapter#get(java.io.Serializable, java.io.Serializable, java.lang.Class)
81+
*/
82+
@Override
83+
public <T> Iterable<T> find(KeyValueQuery<?> query, Serializable keyspace, Class<T> type) {
84+
return (Iterable<T>) engine.execute(query, keyspace, type);
85+
}
86+
6087
/*
6188
* (non-Javadoc)
6289
* @see org.springframework.data.keyvalue.core.KeyValueAdapter#find(org.springframework.data.keyvalue.core.query.KeyValueQuery, java.io.Serializable)

src/main/java/org/springframework/data/keyvalue/core/KeyValueAdapter.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ public interface KeyValueAdapter extends DisposableBean {
5858
*/
5959
Object get(Serializable id, Serializable keyspace);
6060

61+
/**
62+
* @param id
63+
* @param keyspace
64+
* @param type
65+
* @return
66+
* @since 1.1
67+
*/
68+
<T> T get(Serializable id, Serializable keyspace, Class<T> type);
69+
6170
/**
6271
* Delete and return the obect with given type and id.
6372
*
@@ -67,6 +76,15 @@ public interface KeyValueAdapter extends DisposableBean {
6776
*/
6877
Object delete(Serializable id, Serializable keyspace);
6978

79+
/**
80+
* @param id
81+
* @param keyspace
82+
* @param type
83+
* @return
84+
* @since 1.1
85+
*/
86+
<T> T delete(Serializable id, Serializable keyspace, Class<T> type);
87+
7088
/**
7189
* Get all elements for given keyspace.
7290
*
@@ -104,6 +122,15 @@ public interface KeyValueAdapter extends DisposableBean {
104122
*/
105123
Iterable<?> find(KeyValueQuery<?> query, Serializable keyspace);
106124

125+
/**
126+
* @param query
127+
* @param keyspace
128+
* @param type
129+
* @return
130+
* @since 1.1
131+
*/
132+
<T> Iterable<T> find(KeyValueQuery<?> query, Serializable keyspace, Class<T> type);
133+
107134
/**
108135
* Count number of objects within {@literal keyspace}.
109136
*

src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ public <T> T findById(final Serializable id, final Class<T> type) {
271271
@Override
272272
public T doInKeyValue(KeyValueAdapter adapter) {
273273

274-
Object result = adapter.get(id, keyspace);
274+
Object result = adapter.get(id, keyspace, type);
275275

276276
if (result == null || typeCheck(type, result)) {
277277
return (T) result;
@@ -342,10 +342,9 @@ public <T> T delete(final Serializable id, final Class<T> type) {
342342

343343
T result = execute(new KeyValueCallback<T>() {
344344

345-
@SuppressWarnings("unchecked")
346345
@Override
347346
public T doInKeyValue(KeyValueAdapter adapter) {
348-
return (T) adapter.delete(id, keyspace);
347+
return (T) adapter.delete(id, keyspace, type);
349348
}
350349
});
351350

@@ -394,7 +393,7 @@ public <T> Iterable<T> find(final KeyValueQuery<?> query, final Class<T> type) {
394393
@Override
395394
public Iterable<T> doInKeyValue(KeyValueAdapter adapter) {
396395

397-
Iterable<?> result = adapter.find(query, resolveKeySpace(type));
396+
Iterable<?> result = adapter.find(query, resolveKeySpace(type), type);
398397
if (result == null) {
399398
return Collections.emptySet();
400399
}

src/main/java/org/springframework/data/keyvalue/core/QueryEngine.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ public Collection<?> execute(KeyValueQuery<?> query, Serializable keyspace) {
5656
return execute(criteria, sort, query.getOffset(), query.getRows(), keyspace);
5757
}
5858

59+
/**
60+
* Extract query attributes and delegate to concrete execution.
61+
*
62+
* @param query
63+
* @param keyspace
64+
* @return
65+
*/
66+
public <T> Collection<T> execute(KeyValueQuery<?> query, Serializable keyspace, Class<T> type) {
67+
68+
CRITERIA criteria = this.criteriaAccessor != null ? this.criteriaAccessor.resolve(query) : null;
69+
SORT sort = this.sortAccessor != null ? this.sortAccessor.resolve(query) : null;
70+
71+
return execute(criteria, sort, query.getOffset(), query.getRows(), keyspace, type);
72+
}
73+
5974
/**
6075
* Extract query attributes and delegate to concrete execution.
6176
*
@@ -79,6 +94,21 @@ public long count(KeyValueQuery<?> query, Serializable keyspace) {
7994
*/
8095
public abstract Collection<?> execute(CRITERIA criteria, SORT sort, int offset, int rows, Serializable keyspace);
8196

97+
/**
98+
* @param criteria
99+
* @param sort
100+
* @param offset
101+
* @param rows
102+
* @param keyspace
103+
* @param type
104+
* @return
105+
* @since 1.1
106+
*/
107+
public <T> Collection<T> execute(CRITERIA criteria, SORT sort, int offset, int rows, Serializable keyspace,
108+
Class<T> type) {
109+
return (Collection<T>) execute(criteria, sort, offset, rows, keyspace);
110+
}
111+
82112
/**
83113
* @param criteria
84114
* @param keyspace

src/test/java/org/springframework/data/keyvalue/core/KeyValueTemplateUnitTests.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public void findByIdShouldReturnObjectWithMatchingIdAndType() {
212212

213213
template.findById("1", Foo.class);
214214

215-
verify(adapterMock, times(1)).get("1", Foo.class.getName());
215+
verify(adapterMock, times(1)).get("1", Foo.class.getName(), Foo.class);
216216
}
217217

218218
/**
@@ -250,7 +250,7 @@ public void findShouldCallFindOnAdapterToResolveMatching() {
250250

251251
template.find(STRING_QUERY, Foo.class);
252252

253-
verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName());
253+
verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName(), Foo.class);
254254
}
255255

256256
/**
@@ -264,7 +264,7 @@ public void findInRangeShouldRespectOffset() {
264264

265265
template.findInRange(1, 5, Foo.class);
266266

267-
verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName()));
267+
verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName()), eq(Foo.class));
268268
assertThat(captor.getValue().getOffset(), is(1));
269269
assertThat(captor.getValue().getRows(), is(5));
270270
assertThat(captor.getValue().getCritieria(), nullValue());
@@ -327,7 +327,7 @@ public void deleteShouldRemoveObjectCorrectly() {
327327

328328
template.delete("1", Foo.class);
329329

330-
verify(adapterMock, times(1)).delete("1", Foo.class.getName());
330+
verify(adapterMock, times(1)).delete("1", Foo.class.getName(), Foo.class);
331331
}
332332

333333
/**
@@ -341,7 +341,7 @@ public void deleteRemovesObjectUsingExtractedId() {
341341

342342
template.delete(source);
343343

344-
verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName());
344+
verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName(), ClassWithStringId.class);
345345
}
346346

347347
/**
@@ -616,7 +616,7 @@ public void shouldPublishBeforeDeleteEventCorrectly() {
616616
public void shouldPublishAfterDeleteEventCorrectly() {
617617

618618
setEventsToPublish(AfterDeleteEvent.class);
619-
when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()))).thenReturn(FOO_ONE);
619+
when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()), eq(Foo.class))).thenReturn(FOO_ONE);
620620

621621
template.delete("1", FOO_ONE.getClass());
622622

@@ -663,7 +663,7 @@ public void shouldPublishAfterGetEventCorrectly() {
663663

664664
setEventsToPublish(AfterGetEvent.class);
665665

666-
when(adapterMock.get(eq("1"), eq(FOO_ONE.getClass().getName()))).thenReturn(FOO_ONE);
666+
when(adapterMock.get(eq("1"), eq(FOO_ONE.getClass().getName()), eq(Foo.class))).thenReturn(FOO_ONE);
667667

668668
template.findById("1", FOO_ONE.getClass());
669669

0 commit comments

Comments
 (0)