Skip to content

Commit fae6d41

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

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
@@ -215,7 +215,7 @@ public void findByIdShouldReturnObjectWithMatchingIdAndType() {
215215

216216
template.findById("1", Foo.class);
217217

218-
verify(adapterMock, times(1)).get("1", Foo.class.getName());
218+
verify(adapterMock, times(1)).get("1", Foo.class.getName(), Foo.class);
219219
}
220220

221221
/**
@@ -253,7 +253,7 @@ public void findShouldCallFindOnAdapterToResolveMatching() {
253253

254254
template.find(STRING_QUERY, Foo.class);
255255

256-
verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName());
256+
verify(adapterMock, times(1)).find(STRING_QUERY, Foo.class.getName(), Foo.class);
257257
}
258258

259259
/**
@@ -267,7 +267,7 @@ public void findInRangeShouldRespectOffset() {
267267

268268
template.findInRange(1, 5, Foo.class);
269269

270-
verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName()));
270+
verify(adapterMock, times(1)).find(captor.capture(), eq(Foo.class.getName()), eq(Foo.class));
271271
assertThat(captor.getValue().getOffset(), is(1));
272272
assertThat(captor.getValue().getRows(), is(5));
273273
assertThat(captor.getValue().getCritieria(), nullValue());
@@ -330,7 +330,7 @@ public void deleteShouldRemoveObjectCorrectly() {
330330

331331
template.delete("1", Foo.class);
332332

333-
verify(adapterMock, times(1)).delete("1", Foo.class.getName());
333+
verify(adapterMock, times(1)).delete("1", Foo.class.getName(), Foo.class);
334334
}
335335

336336
/**
@@ -344,7 +344,7 @@ public void deleteRemovesObjectUsingExtractedId() {
344344

345345
template.delete(source);
346346

347-
verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName());
347+
verify(adapterMock, times(1)).delete("some-id", ClassWithStringId.class.getName(), ClassWithStringId.class);
348348
}
349349

350350
/**
@@ -619,7 +619,7 @@ public void shouldPublishBeforeDeleteEventCorrectly() {
619619
public void shouldPublishAfterDeleteEventCorrectly() {
620620

621621
setEventsToPublish(AfterDeleteEvent.class);
622-
when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()))).thenReturn(FOO_ONE);
622+
when(adapterMock.delete(eq("1"), eq(FOO_ONE.getClass().getName()), eq(Foo.class))).thenReturn(FOO_ONE);
623623

624624
template.delete("1", FOO_ONE.getClass());
625625

@@ -666,7 +666,7 @@ public void shouldPublishAfterGetEventCorrectly() {
666666

667667
setEventsToPublish(AfterGetEvent.class);
668668

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

671671
template.findById("1", FOO_ONE.getClass());
672672

0 commit comments

Comments
 (0)