You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2016/06/03 14:15:18 UTC

incubator-johnzon git commit: restoring previous ability to extend our mapping to add generation features to it

Repository: incubator-johnzon
Updated Branches:
  refs/heads/master 18d8d372e -> 79b8157d2


restoring previous ability to extend our mapping to add generation features to it


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

Branch: refs/heads/master
Commit: 79b8157d2a1f970edf6533e1f7dbc2f783209bf3
Parents: 18d8d37
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Fri Jun 3 16:15:07 2016 +0200
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Fri Jun 3 16:15:07 2016 +0200

----------------------------------------------------------------------
 .../org/apache/johnzon/mapper/MapperConfig.java |  2 +-
 .../org/apache/johnzon/mapper/Mappings.java     | 41 +++++----
 .../java/org/superbiz/ExtendMappingTest.java    | 88 ++++++++++++++++++++
 3 files changed, 109 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/79b8157d/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 865bd0b..efb38f6 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
@@ -35,7 +35,7 @@ import java.util.concurrent.ConcurrentMap;
  * Contains internal configuration for all the mapper stuff.
  * It needs to be immutable and 100% runtime oriented.
  */
-class MapperConfig implements Cloneable {
+public /* DON'T MAKE IT HIDDEN */ class MapperConfig implements Cloneable {
 
     private static final ObjectConverter.Codec NO_CONVERTER = new ObjectConverter.Codec() {
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/79b8157d/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
index bf5149e..45a5690 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
@@ -53,13 +53,13 @@ import static org.apache.johnzon.mapper.reflection.Converters.matches;
 
 public class Mappings {
     public static class ClassMapping {
-        final Class<?> clazz;
-        final AccessMode.Factory factory;
-        final Map<String, Getter> getters;
-        final Map<String, Setter> setters;
-        final Adapter adapter;
-        final ObjectConverter.Reader reader;
-        final ObjectConverter.Writer writer;
+        public final Class<?> clazz;
+        public final AccessMode.Factory factory;
+        public final Map<String, Getter> getters;
+        public final Map<String, Setter> setters;
+        public final Adapter adapter;
+        public final ObjectConverter.Reader reader;
+        public final ObjectConverter.Writer writer;
 
         protected ClassMapping(final Class<?> clazz, final AccessMode.Factory factory,
                                final Map<String, Getter> getters, final Map<String, Setter> setters,
@@ -76,9 +76,9 @@ public class Mappings {
     }
 
     public static class CollectionMapping {
-        final Class<?> raw;
-        final Type arg;
-        final boolean primitive;
+        public final Class<?> raw;
+        public final Type arg;
+        public final boolean primitive;
 
         public CollectionMapping(final boolean primitive, final Class<?> collectionType, final Type fieldArgType) {
             this.raw = collectionType;
@@ -88,15 +88,15 @@ public class Mappings {
     }
 
     public static class Getter {
-        final AccessMode.Reader reader;
-        final int version;
-        final Adapter converter;
-        final Adapter itemConverter;
-        final ObjectConverter.Writer objectConverter;
-        final boolean primitive;
-        final boolean array;
-        final boolean map;
-        final boolean collection;
+        public final AccessMode.Reader reader;
+        public final int version;
+        public final Adapter converter;
+        public final Adapter itemConverter;
+        public final ObjectConverter.Writer objectConverter;
+        public final boolean primitive;
+        public final boolean array;
+        public final boolean map;
+        public final boolean collection;
 
         public Getter(final AccessMode.Reader reader,
                       final boolean primitive, final boolean array,
@@ -227,12 +227,11 @@ public class Mappings {
 
     protected final MapperConfig config;
 
-
     public Mappings(final MapperConfig config) {
         this.config = config;
     }
 
-    public <T> CollectionMapping findCollectionMapping(final ParameterizedType genericType) {
+    public CollectionMapping findCollectionMapping(final ParameterizedType genericType) {
         CollectionMapping collectionMapping = collections.get(genericType);
         if (collectionMapping == null) {
             collectionMapping = createCollectionMapping(genericType);

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/79b8157d/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java b/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java
new file mode 100644
index 0000000..14844bd
--- /dev/null
+++ b/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz;
+
+import org.apache.johnzon.mapper.Adapter;
+import org.apache.johnzon.mapper.MapperConfig;
+import org.apache.johnzon.mapper.Mappings;
+import org.apache.johnzon.mapper.ObjectConverter;
+import org.apache.johnzon.mapper.access.FieldAccessMode;
+import org.apache.johnzon.mapper.internal.AdapterKey;
+import org.junit.Test;
+
+import java.lang.reflect.Type;
+import java.nio.charset.Charset;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+// json libs have a meta registry like our Mappings
+// often other libs can use it to do advanced features without instantiating beans (swagger for instance)
+// this class ensure we can do it
+// that's why it is not in johnzon package
+public class ExtendMappingTest {
+    @Test // strictly speaking compilation checked 50% of the test
+    public void run() {
+        final MyMappings myMappings = new MyMappings();
+        final Mappings.ClassMapping model = myMappings.findOrCreateClassMapping(MyModel.class);
+        assertTrue(myMappings.classes().isEmpty());
+        assertEquals(1, model.getters.size());
+        assertEquals(1, model.setters.size());
+        assertNotNull(FieldAccessMode.FieldReader.class.cast(model.getters.values().iterator().next().reader).getType());
+        assertNotNull(FieldAccessMode.FieldWriter.class.cast(model.setters.values().iterator().next().writer).getType());
+    }
+
+    public static class MyModel {
+        public String name;
+    }
+
+    public static class MyMappings extends Mappings {
+        public MyMappings() {
+            super(new MapperConfig(
+                    new ConcurrentHashMap<AdapterKey, Adapter<?, ?>>(),
+                    new HashMap<Class<?>, ObjectConverter.Writer<?>>(),
+                    new HashMap<Class<?>, ObjectConverter.Reader<?>>(),
+                    -1, true, true, true, false, false, false,
+                    new FieldAccessMode(false, false),
+                    Charset.forName("UTF-8"),
+                    new Comparator<String>() {
+                        @Override
+                        public int compare(final String o1, final String o2) {
+                            return o1.compareTo(o2);
+                        }
+                    }, false));
+        }
+
+        @Override
+        public ClassMapping findOrCreateClassMapping(final Type clazz) {
+            final ClassMapping mapping = super.findOrCreateClassMapping(clazz);
+            classes.remove(clazz); // no leak for single usage cases
+            return mapping;
+        }
+
+        public Map<?, ?> classes() {
+            return classes;
+        }
+    }
+}