Skip to content

Commit 51630ae

Browse files
committed
TxJsonNode
1 parent 160b798 commit 51630ae

File tree

7 files changed

+107
-97
lines changed

7 files changed

+107
-97
lines changed

src/main/java/com/arangodb/springframework/config/ArangoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public <T> T deserialize(byte[] content, Class<T> clazz) {
9393
@Override
9494
public <T> T deserialize(byte[] content, Class<T> clazz, RequestContext ctx) {
9595
try {
96-
return converter.read(clazz, om.readTree(content), new TransactionMappingContext(ctx));
96+
return converter.read(clazz, new TxJsonNode(om.readTree(content), new TransactionMappingContext(ctx)));
9797
} catch (Exception e) {
9898
throw new MappingException("Exception while deserializing.", e);
9999
}

src/main/java/com/arangodb/springframework/core/convert/ArangoEntityReader.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,17 @@
2121
package com.arangodb.springframework.core.convert;
2222

2323
import com.arangodb.springframework.core.mapping.TransactionMappingContext;
24-
2524
import com.fasterxml.jackson.databind.JsonNode;
25+
import org.springframework.data.convert.EntityReader;
2626

2727
/**
2828
* @author Mark Vollmary
2929
* @author Christian Lechner
3030
*/
31-
public interface ArangoEntityReader {
31+
public interface ArangoEntityReader extends EntityReader<Object, TxJsonNode> {
3232

33-
// FIXME: remove
3433
default <R> R read(Class<R> type, JsonNode source) {
35-
return read(type, source, TransactionMappingContext.EMPTY);
34+
return read(type, new TxJsonNode(source, TransactionMappingContext.EMPTY));
3635
}
3736

38-
/**
39-
* Reads the given source into the given type.
40-
*
41-
* @param type they type to convert the given source to.
42-
* @param source the source to create an object of the given type from.
43-
*/
44-
<R> R read(Class<R> type, JsonNode source, TransactionMappingContext ctx);
4537
}

src/main/java/com/arangodb/springframework/core/convert/DefaultArangoConverter.java

Lines changed: 78 additions & 76 deletions
Large diffs are not rendered by default.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.arangodb.springframework.core.convert;
2+
3+
import com.arangodb.springframework.core.mapping.TransactionMappingContext;
4+
import com.fasterxml.jackson.databind.JsonNode;
5+
6+
/**
7+
* JsonNode with TransactionMappingContext
8+
*/
9+
public record TxJsonNode(
10+
JsonNode value,
11+
TransactionMappingContext transactionContext
12+
) {
13+
}

src/main/java/com/arangodb/springframework/repository/query/AbstractArangoQuery.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import java.util.HashMap;
2424
import java.util.Map;
2525

26+
import com.arangodb.springframework.core.convert.TxJsonNode;
2627
import com.arangodb.springframework.core.mapping.ArangoMappingContext;
27-
import com.fasterxml.jackson.databind.JsonNode;
2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;
3030
import org.springframework.data.repository.query.RepositoryQuery;
@@ -186,7 +186,7 @@ private Class<?> getTypeToRead(final ResultProcessor processor) {
186186
}
187187

188188
if (method.isGeoQuery()) {
189-
return JsonNode.class;
189+
return TxJsonNode.class;
190190
}
191191

192192
final Class<?> typeToRead = processor.getReturnedType().getTypeToRead();

src/main/java/com/arangodb/springframework/repository/query/ArangoResultConverter.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.stream.Collectors;
3030
import java.util.stream.StreamSupport;
3131

32+
import com.arangodb.springframework.core.convert.TxJsonNode;
3233
import com.fasterxml.jackson.databind.JsonNode;
3334
import org.springframework.data.domain.Page;
3435
import org.springframework.data.domain.PageImpl;
@@ -142,20 +143,21 @@ private GeoResult<?> buildGeoResult(final ArangoCursor<?> cursor) {
142143
// FIXME
143144
while (cursor.hasNext() && geoResult == null) {
144145
final Object object = cursor.next();
145-
if (!(object instanceof JsonNode)) {
146+
if (!(object instanceof TxJsonNode)) {
146147
// FIXME
147148
continue;
148149
}
149150

150-
final JsonNode slice = (JsonNode) object;
151+
final TxJsonNode data = (TxJsonNode) object;
152+
final JsonNode slice = data.value();
151153
final JsonNode distSlice = slice.get("_distance");
152154
final Double distanceInMeters = distSlice.isDouble() ? distSlice.doubleValue() : null;
153155
if (distanceInMeters == null) {
154156
// FIXME
155157
continue;
156158
}
157159

158-
final Object entity = operations.getConverter().read(domainClass, slice);
160+
final Object entity = operations.getConverter().read(domainClass, data);
159161
final Distance distance = new Distance(distanceInMeters / 1000, Metrics.KILOMETERS);
160162
geoResult = new GeoResult<>(entity, distance);
161163
}
@@ -169,20 +171,21 @@ private GeoResult<?> buildGeoResult(final ArangoCursor<?> cursor) {
169171
* @return GeoResult object
170172
*/
171173
private GeoResult<?> buildGeoResult(final Object object) {
172-
if (object == null || !(object instanceof JsonNode)) {
174+
if (object == null || !(object instanceof TxJsonNode)) {
173175
// FIXME
174176
return null;
175177
}
176178

177-
final JsonNode slice = (JsonNode) object;
179+
final TxJsonNode data = (TxJsonNode) object;
180+
final JsonNode slice = data.value();
178181
final JsonNode distSlice = slice.get("_distance");
179182
final Double distanceInMeters = distSlice.isDouble() ? distSlice.doubleValue() : null;
180183
if (distanceInMeters == null) {
181184
// FIXME
182185
return null;
183186
}
184187

185-
final Object entity = operations.getConverter().read(domainClass, slice);
188+
final Object entity = operations.getConverter().read(domainClass, data);
186189
final Distance distance = new Distance(distanceInMeters / 1000, Metrics.KILOMETERS);
187190
return new GeoResult<>(entity, distance);
188191
}

src/test/java/com/arangodb/springframework/core/mapping/GeneralMappingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public void geoMapping() throws JSONException, JsonProcessingException {
235235
String jsonString = jsonMapper.writeValueAsString(written);
236236
JSONObject json = new JSONObject(jsonString);
237237

238-
GeoTestEntity read = converter.read(GeoTestEntity.class, written, TransactionMappingContext.EMPTY);
238+
GeoTestEntity read = converter.read(GeoTestEntity.class, written);
239239
assertThat(read.geoJson, is(entity.geoJson));
240240
JSONAssert.assertEquals(
241241
"{ type: Point, coordinates: [1.1, 2.2] }",

0 commit comments

Comments
 (0)