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;
+ }
+ }
+}