1 package com.vladmihalcea.hibernate.type.util;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.JsonNode;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6
7 import java.io.IOException;
8 import java.lang.reflect.Type;
9
10 /**
11  * Wraps a Jackson {@link ObjectMapper} so that you can supply your own {@link ObjectMapper} reference.
12  *
13  * @author Vlad Mihalcea
14  * @since 2.1.0
15  */

16 public class ObjectMapperWrapper {
17
18     public static final ObjectMapperWrapper INSTANCE = new ObjectMapperWrapper();
19
20     private final ObjectMapper objectMapper;
21
22     private JsonSerializer jsonSerializer = new ObjectMapperJsonSerializer(this);
23
24     public ObjectMapperWrapper() {
25         this.objectMapper = new ObjectMapper().findAndRegisterModules();
26     }
27
28     public ObjectMapperWrapper(ObjectMapper objectMapper) {
29         this.objectMapper = objectMapper;
30     }
31
32     public void setJsonSerializer(JsonSerializer jsonSerializer) {
33         this.jsonSerializer = jsonSerializer;
34     }
35
36     public ObjectMapper getObjectMapper() {
37         return objectMapper;
38     }
39
40     public <T> T fromString(String string, Class<T> clazz) {
41         try {
42             return objectMapper.readValue(string, clazz);
43         } catch (IOException e) {
44             throw new IllegalArgumentException("The given string value: " + string + " cannot be transformed to Json object", e);
45         }
46     }
47
48     public <T> T fromString(String string, Type type) {
49         try {
50             return objectMapper.readValue(string, objectMapper.getTypeFactory().constructType(type));
51         } catch (IOException e) {
52             throw new IllegalArgumentException("The given string value: " + string + " cannot be transformed to Json object", e);
53         }
54     }
55
56     public String toString(Object value) {
57         try {
58             return objectMapper.writeValueAsString(value);
59         } catch (JsonProcessingException e) {
60             throw new IllegalArgumentException("The given Json object value: " + value + " cannot be transformed to a String", e);
61         }
62     }
63
64     public JsonNode toJsonNode(String value) {
65         try {
66             return objectMapper.readTree(value);
67         } catch (IOException e) {
68             throw new IllegalArgumentException(e);
69         }
70     }
71
72     public <T> T clone(T value) {
73         return jsonSerializer.clone(value);
74     }
75 }
76