|
24 | 24 | import java.nio.charset.StandardCharsets;
|
25 | 25 | import java.util.ArrayList;
|
26 | 26 | import java.util.Collection;
|
| 27 | +import java.util.HashMap; |
27 | 28 | import java.util.List;
|
| 29 | +import java.util.Map; |
28 | 30 | import java.util.UUID;
|
29 | 31 |
|
| 32 | +import com.couchbase.client.java.json.JsonArray; |
| 33 | +import com.couchbase.client.java.json.JsonObject; |
| 34 | +import com.couchbase.client.java.json.JsonValueModule; |
| 35 | +import com.fasterxml.jackson.core.type.TypeReference; |
| 36 | +import com.fasterxml.jackson.databind.JsonNode; |
| 37 | +import com.fasterxml.jackson.databind.node.JsonNodeFactory; |
| 38 | +import com.fasterxml.jackson.databind.node.ObjectNode; |
30 | 39 | import org.springframework.core.convert.converter.Converter;
|
31 | 40 | import org.springframework.data.convert.ReadingConverter;
|
32 | 41 | import org.springframework.data.convert.WritingConverter;
|
| 42 | +import org.springframework.data.couchbase.core.mapping.CouchbaseDocument; |
| 43 | +import org.springframework.data.couchbase.core.mapping.CouchbaseList; |
33 | 44 | import org.springframework.util.Base64Utils;
|
34 | 45 |
|
35 | 46 | import com.couchbase.client.core.encryption.CryptoManager;
|
@@ -66,6 +77,12 @@ private OtherConverters() {}
|
66 | 77 | converters.add(StringToCharArray.INSTANCE);
|
67 | 78 | converters.add(ClassToString.INSTANCE);
|
68 | 79 | converters.add(StringToClass.INSTANCE);
|
| 80 | + converters.add(MapToJsonNode.INSTANCE); |
| 81 | + converters.add(JsonNodeToMap.INSTANCE); |
| 82 | + converters.add(JsonObjectToMap.INSTANCE); |
| 83 | + converters.add(MapToJsonObject.INSTANCE); |
| 84 | + converters.add(JsonArrayToCouchbaseList.INSTANCE); |
| 85 | + converters.add(CouchbaseListToJsonArray.INSTANCE); |
69 | 86 | // EnumToObject, IntegerToEnumConverterFactory and StringToEnumConverterFactory are
|
70 | 87 | // registered in
|
71 | 88 | // {@link org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration#customConversions(
|
@@ -231,4 +248,85 @@ public Object convert(Enum<?> source) {
|
231 | 248 | }
|
232 | 249 | }
|
233 | 250 |
|
| 251 | + @WritingConverter |
| 252 | + public enum JsonNodeToMap implements Converter<JsonNode, CouchbaseDocument> { |
| 253 | + INSTANCE; |
| 254 | + static ObjectMapper mapper= new ObjectMapper().registerModule(new JsonValueModule()); |
| 255 | + @Override |
| 256 | + public CouchbaseDocument convert(JsonNode source) { |
| 257 | + if( source == null ){ |
| 258 | + return null; |
| 259 | + } |
| 260 | + return new CouchbaseDocument().setContent((Map)mapper.convertValue(source, new TypeReference<Map<String, Object>>(){})); |
| 261 | + } |
| 262 | + } |
| 263 | + |
| 264 | + @ReadingConverter |
| 265 | + public enum MapToJsonNode implements Converter<CouchbaseDocument, JsonNode> { |
| 266 | + INSTANCE; |
| 267 | + static ObjectMapper mapper= new ObjectMapper().registerModule(new JsonValueModule()); |
| 268 | + |
| 269 | + @Override |
| 270 | + public JsonNode convert(CouchbaseDocument source) { |
| 271 | + if( source == null ){ |
| 272 | + return null; |
| 273 | + } |
| 274 | + return mapper.valueToTree(source.export()); |
| 275 | + } |
| 276 | + } |
| 277 | + |
| 278 | + @WritingConverter |
| 279 | + public enum JsonObjectToMap implements Converter<JsonObject, CouchbaseDocument> { |
| 280 | + INSTANCE; |
| 281 | + |
| 282 | + @Override |
| 283 | + public CouchbaseDocument convert(JsonObject source) { |
| 284 | + if( source == null ){ |
| 285 | + return null; |
| 286 | + } |
| 287 | + return new CouchbaseDocument().setContent(source); |
| 288 | + } |
| 289 | + } |
| 290 | + |
| 291 | + @ReadingConverter |
| 292 | + public enum MapToJsonObject implements Converter<CouchbaseDocument, JsonObject> { |
| 293 | + INSTANCE; |
| 294 | + static ObjectMapper mapper= new ObjectMapper(); |
| 295 | + |
| 296 | + @Override |
| 297 | + public JsonObject convert(CouchbaseDocument source) { |
| 298 | + if( source == null ){ |
| 299 | + return null; |
| 300 | + } |
| 301 | + return JsonObject.from(source.export()); |
| 302 | + } |
| 303 | + } |
| 304 | + |
| 305 | + @WritingConverter |
| 306 | + public enum JsonArrayToCouchbaseList implements Converter<JsonArray, CouchbaseList> { |
| 307 | + INSTANCE; |
| 308 | + |
| 309 | + @Override |
| 310 | + public CouchbaseList convert(JsonArray source) { |
| 311 | + if( source == null ){ |
| 312 | + return null; |
| 313 | + } |
| 314 | + return new CouchbaseList(source.toList()); |
| 315 | + } |
| 316 | + } |
| 317 | + |
| 318 | + @ReadingConverter |
| 319 | + public enum CouchbaseListToJsonArray implements Converter<CouchbaseList, JsonArray> { |
| 320 | + INSTANCE; |
| 321 | + static ObjectMapper mapper= new ObjectMapper(); |
| 322 | + |
| 323 | + @Override |
| 324 | + public JsonArray convert(CouchbaseList source) { |
| 325 | + if( source == null ){ |
| 326 | + return null; |
| 327 | + } |
| 328 | + return JsonArray.from(source.export()); |
| 329 | + } |
| 330 | + } |
| 331 | + |
234 | 332 | }
|
0 commit comments