Repository: johnzon
Updated Branches:
  refs/heads/master 2ca9baf80 -> 2ffe0f697


JOHNZON-143 make isDeduplicateObjects config a ternary flag.

The rule is now:
* _explicit_ decuplicateObjects set via config? -> use this
* otherwise -> check @JohnzonDeduplicateObjects annotation
* otherwise -> false


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/2ffe0f69
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/2ffe0f69
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/2ffe0f69

Branch: refs/heads/master
Commit: 2ffe0f69735021508cd0b064d88044492ccc234c
Parents: 2ca9baf
Author: Mark Struberg <[email protected]>
Authored: Thu Nov 2 14:45:33 2017 +0100
Committer: Mark Struberg <[email protected]>
Committed: Thu Nov 2 14:45:33 2017 +0100

----------------------------------------------------------------------
 .../java/org/apache/johnzon/mapper/Mapper.java  | 25 ++++++++++++--------
 .../apache/johnzon/mapper/MapperBuilder.java    | 11 +++++++--
 .../org/apache/johnzon/mapper/MapperConfig.java |  6 ++---
 .../johnzon/mapper/MappingParserImpl.java       | 12 ++--------
 4 files changed, 29 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/2ffe0f69/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
index 29bf3fd..52b57da 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
@@ -86,7 +86,8 @@ public class Mapper implements Closeable {
 
     public <T> void writeArray(final Collection<T> object, final Writer 
stream) {
         JsonGenerator generator = 
generatorFactory.createGenerator(stream(stream));
-        writeObject(object, generator, null, config.isDeduplicateObjects() ? 
new JsonPointerTracker(null, "/") : null);
+        boolean dedup = Boolean.TRUE.equals(config.isDeduplicateObjects());
+        writeObject(object, generator, null, dedup ? new 
JsonPointerTracker(null, "/") : null);
     }
 
     public <T> void writeIterable(final Iterable<T> object, final OutputStream 
stream) {
@@ -95,7 +96,8 @@ public class Mapper implements Closeable {
 
     public <T> void writeIterable(final Iterable<T> object, final Writer 
stream) {
         JsonGenerator generator = 
generatorFactory.createGenerator(stream(stream));
-        writeObject(object, generator, null, new JsonPointerTracker(null, 
"/"));
+        boolean dedup = Boolean.TRUE.equals(config.isDeduplicateObjects());
+        writeObject(object, generator, null, dedup ? new 
JsonPointerTracker(null, "/") : null);
     }
 
     public void writeObject(final Object object, final Writer stream) {
@@ -131,16 +133,15 @@ public class Mapper implements Closeable {
     }
 
     private boolean isDeduplicateObjects(Class<?> rootType) {
-        Boolean dedup = null;
-        Mappings.ClassMapping classMapping = 
mappings.findOrCreateClassMapping(rootType);
-        if (classMapping != null) {
-            dedup = classMapping.isDeduplicateObjects();
-        }
+        Boolean dedup = config.isDeduplicateObjects();
         if (dedup == null) {
-            dedup = config.isDeduplicateObjects();
+            Mappings.ClassMapping classMapping = 
mappings.findOrCreateClassMapping(rootType);
+            if (classMapping != null) {
+                dedup = classMapping.isDeduplicateObjects();
+            }
         }
 
-        return dedup;
+        return dedup != null ? dedup : false;
     }
 
     public void writeObject(final Object object, final OutputStream stream) {
@@ -248,7 +249,11 @@ public class Mapper implements Closeable {
 
 
     private <T> T mapObject(final Type clazz, final JsonReader reader) {
-        return new MappingParserImpl(config, mappings, reader, 
clazz).readObject(clazz);
+        boolean dedup = false;
+        if (clazz instanceof Class) {
+            dedup = isDeduplicateObjects((Class) clazz);
+        }
+        return new MappingParserImpl(config, mappings, reader, 
dedup).readObject(clazz);
     }
 
 

http://git-wip-us.apache.org/repos/asf/johnzon/blob/2ffe0f69/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
----------------------------------------------------------------------
diff --git 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
index 3c90309..387f3e6 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
@@ -133,7 +133,7 @@ public class MapperBuilder {
     private boolean failOnUnknownProperties;
     private SerializeValueFilter serializeValueFilter;
     private boolean useBigDecimalForFloats;
-    private boolean deduplicateObjects;
+    private Boolean deduplicateObjects = null;
 
     public Mapper build() {
         if (readerFactory == null || generatorFactory == null) {
@@ -443,8 +443,15 @@ public class MapperBuilder {
      *
      * When deserialised back Johnzon will automatically de-reference the 
JsonPointer
      * back to the correct instance.
+     *
+     * Possible values:
+     * <ul>
+     *     <li>{@code true}: deduplicate objects</li>
+     *     <li>{@code false}: do <b>not</b> deduplicate objects</li>
+     *     <li>{@code null}: dedupliate based on the {@link 
JohnzonDeduplicateObjects} annotation. This is the default</li>
+     * </ul>
      */
-    public MapperBuilder setDeduplicateObjects(boolean deduplicateObjects) {
+    public MapperBuilder setDeduplicateObjects(Boolean deduplicateObjects) {
         this.deduplicateObjects = deduplicateObjects;
         return this;
     }

http://git-wip-us.apache.org/repos/asf/johnzon/blob/2ffe0f69/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
----------------------------------------------------------------------
diff --git 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
index 71cb51a..44cea05 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java
@@ -66,7 +66,7 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig 
implements Cloneable {
     private final boolean failOnUnknown;
     private final SerializeValueFilter serializeValueFilter;
     private final boolean useBigDecimalForFloats;
-    private final boolean deduplicateObjects;
+    private final Boolean deduplicateObjects;
 
     private final Map<Class<?>, ObjectConverter.Writer<?>> 
objectConverterWriterCache;
     private final Map<Class<?>, ObjectConverter.Reader<?>> 
objectConverterReaderCache;
@@ -85,7 +85,7 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig 
implements Cloneable {
                         final boolean enforceQuoteString, final boolean 
failOnUnknown,
                         final SerializeValueFilter serializeValueFilter,
                         final boolean useBigDecimalForFloats,
-                        final boolean deduplicateObjects) {
+                        final Boolean deduplicateObjects) {
     //CHECKSTYLE:ON
         this.objectConverterWriters = objectConverterWriters;
         this.objectConverterReaders = objectConverterReaders;
@@ -306,7 +306,7 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig 
implements Cloneable {
         return useBigDecimalForFloats;
     }
 
-    public boolean isDeduplicateObjects() {
+    public Boolean isDeduplicateObjects() {
         return deduplicateObjects;
     }
 }

http://git-wip-us.apache.org/repos/asf/johnzon/blob/2ffe0f69/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
----------------------------------------------------------------------
diff --git 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index ce604bd..ab05b52 100644
--- 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -101,7 +101,7 @@ public class MappingParserImpl implements MappingParser {
     private Map<String, Object> jsonPointers;
 
 
-    public MappingParserImpl(MapperConfig config, Mappings mappings, 
JsonReader jsonReader, Type rootType) {
+    public MappingParserImpl(MapperConfig config, Mappings mappings, 
JsonReader jsonReader, boolean isDeduplicateObjects) {
         this.config = config;
         this.mappings = mappings;
 
@@ -110,15 +110,7 @@ public class MappingParserImpl implements MappingParser {
         reverseAdaptersRegistry = new 
ConcurrentHashMap<>(config.getAdapters().size());
 
 
-        Boolean dedup = null;
-        Mappings.ClassMapping classMapping = 
mappings.findOrCreateClassMapping(rootType);
-        if (classMapping != null) {
-            dedup = classMapping.isDeduplicateObjects();
-        }
-        if (dedup == null) {
-            dedup = config.isDeduplicateObjects();
-        }
-        this.isDeduplicateObjects = dedup;
+        this.isDeduplicateObjects = isDeduplicateObjects;
 
         if (isDeduplicateObjects) {
             jsonPointers = new HashMap<>();

Reply via email to