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 2015/02/22 14:49:48 UTC
incubator-johnzon git commit: JOHNZON-37 @JohnzonProperty
Repository: incubator-johnzon
Updated Branches:
refs/heads/master ca56cd03d -> c60739d13
JOHNZON-37 @JohnzonProperty
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/c60739d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/c60739d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/c60739d1
Branch: refs/heads/master
Commit: c60739d134a8eeed39777a00146dcfcff66e5017
Parents: ca56cd0
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun Feb 22 14:49:36 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sun Feb 22 14:49:36 2015 +0100
----------------------------------------------------------------------
.../apache/johnzon/mapper/JohnzonProperty.java | 37 +++++++++++
.../johnzon/mapper/access/FieldAccessMode.java | 11 +++-
.../johnzon/mapper/access/MethodAccessMode.java | 10 ++-
.../org/apache/johnzon/mapper/MapperTest.java | 68 +++++++++++++++++---
4 files changed, 113 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
new file mode 100644
index 0000000..327f9e3
--- /dev/null
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
@@ -0,0 +1,37 @@
+/*
+ * 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.apache.johnzon.mapper;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ METHOD, FIELD })
+@Retention(RUNTIME)
+public @interface JohnzonProperty {
+ /**
+ * Example: @JohnzonProperty("not_java_name") will consider the decorated property as called "not_java_name" on JSON side.
+ *
+ * @return the JSON name for this property.
+ */
+ String value();
+}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
index 2df9bb6..1299cfa 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
@@ -18,6 +18,7 @@
*/
package org.apache.johnzon.mapper.access;
+import org.apache.johnzon.mapper.JohnzonProperty;
import org.apache.johnzon.mapper.MapperException;
import java.lang.annotation.Annotation;
@@ -36,7 +37,8 @@ public class FieldAccessMode implements AccessMode {
if (isIgnored(key)) {
continue;
}
- readers.put(key, new FieldReader(f.getValue()));
+
+ readers.put(extractKey(f.getValue(), key), new FieldReader(f.getValue()));
}
return readers;
}
@@ -49,11 +51,16 @@ public class FieldAccessMode implements AccessMode {
if (isIgnored(key)) {
continue;
}
- writers.put(key, new FieldWriter(f.getValue()));
+ writers.put(extractKey(f.getValue(), key), new FieldWriter(f.getValue()));
}
return writers;
}
+ private String extractKey(final Field f, final String key) {
+ final JohnzonProperty property = f.getAnnotation(JohnzonProperty.class);
+ return property != null ? property.value() : key;
+ }
+
protected boolean isIgnored(final String key) {
return key.contains("$");
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
index cd8f37d..62fee0f 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
@@ -18,6 +18,7 @@
*/
package org.apache.johnzon.mapper.access;
+import org.apache.johnzon.mapper.JohnzonProperty;
import org.apache.johnzon.mapper.MapperException;
import java.beans.IntrospectionException;
@@ -40,7 +41,7 @@ public class MethodAccessMode implements AccessMode {
if (isIgnored(descriptor.getName())) {
continue;
}
- readers.put(descriptor.getName(), new MethodReader(readMethod));
+ readers.put(extractKey(descriptor), new MethodReader(readMethod));
}
}
return readers;
@@ -56,12 +57,17 @@ public class MethodAccessMode implements AccessMode {
if (isIgnored(descriptor.getName())) {
continue;
}
- writers.put(descriptor.getName(), new MethodWriter(writeMethod));
+ writers.put(extractKey(descriptor), new MethodWriter(writeMethod));
}
}
return writers;
}
+ private String extractKey(final PropertyDescriptor f) {
+ final JohnzonProperty property = f.getReadMethod() == null ? null : f.getReadMethod().getAnnotation(JohnzonProperty.class);
+ return property != null ? property.value() : f.getName();
+ }
+
protected boolean isIgnored(final String name) {
return name.equals("metaClass") || name.contains("$");
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
index 55cc926..cf86ec8 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
@@ -18,12 +18,9 @@
*/
package org.apache.johnzon.mapper;
-import static java.util.Arrays.asList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
+import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
+import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -37,9 +34,12 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
-import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
-import org.junit.Test;
+import static java.util.Arrays.asList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class MapperTest {
private static final String BIG_OBJECT_STR = "{" + "\"name\":\"the string\"," + "\"integer\":56," + "\"longnumber\":118,"
@@ -429,6 +429,30 @@ public class MapperTest {
assertEquals("{}", value);
}
+ @Test
+ public void aliases() {
+ {
+ final Aliases aliases = new MapperBuilder().build().readObject(
+ new ByteArrayInputStream("{\"super_long_property\":\"ok\"}".getBytes()), Aliases.class);
+ assertEquals("ok", aliases.superLongProperty);
+ }
+ {
+ final Aliases aliases = new Aliases();
+ aliases.setSuperLongProperty("ok");
+ assertEquals("{\"super_long_property\":\"ok\"}", new MapperBuilder().build().writeObjectAsString(aliases));
+ }
+ {
+ final AliasesOnField aliases = new MapperBuilder().setAccessModeName("field").build().readObject(
+ new ByteArrayInputStream("{\"super_long_property\":\"ok\"}".getBytes()), AliasesOnField.class);
+ assertEquals("ok", aliases.superLongProperty);
+ }
+ {
+ final AliasesOnField aliases = new AliasesOnField();
+ aliases.setSuperLongProperty("ok");
+ assertEquals("{\"super_long_property\":\"ok\"}", new MapperBuilder().setAccessModeName("field").build().writeObjectAsString(aliases));
+ }
+ }
+
public static class NanHolder {
private Double nan = Double.NaN;
@@ -751,6 +775,32 @@ public class MapperTest {
}
+
+ public static class Aliases {
+ private String superLongProperty;
+
+ @JohnzonProperty("super_long_property")
+ public String getSuperLongProperty() {
+ return superLongProperty;
+ }
+
+ public void setSuperLongProperty(final String superLongProperty) {
+ this.superLongProperty = superLongProperty;
+ }
+ }
+
+ public static class AliasesOnField {
+ @JohnzonProperty("super_long_property")
+ private String superLongProperty;
+
+ public String getSuperLongProperty() {
+ return superLongProperty;
+ }
+
+ public void setSuperLongProperty(final String superLongProperty) {
+ this.superLongProperty = superLongProperty;
+ }
+ }
/*public static class ByteArray {
Fwd: incubator-johnzon git commit: JOHNZON-37 @JohnzonProperty
Posted by Romain Manni-Bucau <rm...@gmail.com>.
open point with this: do we merge @JohnzonIgnore and @JohnzonConverter
in @JohnzonProperty
Both makes sense for me so really open question ATM
Romain Manni-Bucau
@rmannibucau
http://www.tomitribe.com
http://rmannibucau.wordpress.com
https://github.com/rmannibucau
---------- Forwarded message ----------
From: <rm...@apache.org>
Date: 2015-02-22 14:49 GMT+01:00
Subject: incubator-johnzon git commit: JOHNZON-37 @JohnzonProperty
To: commits@johnzon.incubator.apache.org
Repository: incubator-johnzon
Updated Branches:
refs/heads/master ca56cd03d -> c60739d13
JOHNZON-37 @JohnzonProperty
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/c60739d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/c60739d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/c60739d1
Branch: refs/heads/master
Commit: c60739d134a8eeed39777a00146dcfcff66e5017
Parents: ca56cd0
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun Feb 22 14:49:36 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sun Feb 22 14:49:36 2015 +0100
----------------------------------------------------------------------
.../apache/johnzon/mapper/JohnzonProperty.java | 37 +++++++++++
.../johnzon/mapper/access/FieldAccessMode.java | 11 +++-
.../johnzon/mapper/access/MethodAccessMode.java | 10 ++-
.../org/apache/johnzon/mapper/MapperTest.java | 68 +++++++++++++++++---
4 files changed, 113 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
new file mode 100644
index 0000000..327f9e3
--- /dev/null
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/JohnzonProperty.java
@@ -0,0 +1,37 @@
+/*
+ * 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.apache.johnzon.mapper;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ METHOD, FIELD })
+@Retention(RUNTIME)
+public @interface JohnzonProperty {
+ /**
+ * Example: @JohnzonProperty("not_java_name") will consider the
decorated property as called "not_java_name" on JSON side.
+ *
+ * @return the JSON name for this property.
+ */
+ String value();
+}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
index 2df9bb6..1299cfa 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java
@@ -18,6 +18,7 @@
*/
package org.apache.johnzon.mapper.access;
+import org.apache.johnzon.mapper.JohnzonProperty;
import org.apache.johnzon.mapper.MapperException;
import java.lang.annotation.Annotation;
@@ -36,7 +37,8 @@ public class FieldAccessMode implements AccessMode {
if (isIgnored(key)) {
continue;
}
- readers.put(key, new FieldReader(f.getValue()));
+
+ readers.put(extractKey(f.getValue(), key), new
FieldReader(f.getValue()));
}
return readers;
}
@@ -49,11 +51,16 @@ public class FieldAccessMode implements AccessMode {
if (isIgnored(key)) {
continue;
}
- writers.put(key, new FieldWriter(f.getValue()));
+ writers.put(extractKey(f.getValue(), key), new
FieldWriter(f.getValue()));
}
return writers;
}
+ private String extractKey(final Field f, final String key) {
+ final JohnzonProperty property =
f.getAnnotation(JohnzonProperty.class);
+ return property != null ? property.value() : key;
+ }
+
protected boolean isIgnored(final String key) {
return key.contains("$");
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
index cd8f37d..62fee0f 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
@@ -18,6 +18,7 @@
*/
package org.apache.johnzon.mapper.access;
+import org.apache.johnzon.mapper.JohnzonProperty;
import org.apache.johnzon.mapper.MapperException;
import java.beans.IntrospectionException;
@@ -40,7 +41,7 @@ public class MethodAccessMode implements AccessMode {
if (isIgnored(descriptor.getName())) {
continue;
}
- readers.put(descriptor.getName(), new
MethodReader(readMethod));
+ readers.put(extractKey(descriptor), new
MethodReader(readMethod));
}
}
return readers;
@@ -56,12 +57,17 @@ public class MethodAccessMode implements AccessMode {
if (isIgnored(descriptor.getName())) {
continue;
}
- writers.put(descriptor.getName(), new
MethodWriter(writeMethod));
+ writers.put(extractKey(descriptor), new
MethodWriter(writeMethod));
}
}
return writers;
}
+ private String extractKey(final PropertyDescriptor f) {
+ final JohnzonProperty property = f.getReadMethod() == null ?
null : f.getReadMethod().getAnnotation(JohnzonProperty.class);
+ return property != null ? property.value() : f.getName();
+ }
+
protected boolean isIgnored(final String name) {
return name.equals("metaClass") || name.contains("$");
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/c60739d1/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
index 55cc926..cf86ec8 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
@@ -18,12 +18,9 @@
*/
package org.apache.johnzon.mapper;
-import static java.util.Arrays.asList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
+import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
+import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -37,9 +34,12 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.apache.johnzon.mapper.reflection.JohnzonCollectionType;
-import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
-import org.junit.Test;
+import static java.util.Arrays.asList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class MapperTest {
private static final String BIG_OBJECT_STR = "{" +
"\"name\":\"the string\"," + "\"integer\":56," + "\"longnumber\":118,"
@@ -429,6 +429,30 @@ public class MapperTest {
assertEquals("{}", value);
}
+ @Test
+ public void aliases() {
+ {
+ final Aliases aliases = new MapperBuilder().build().readObject(
+ new
ByteArrayInputStream("{\"super_long_property\":\"ok\"}".getBytes()),
Aliases.class);
+ assertEquals("ok", aliases.superLongProperty);
+ }
+ {
+ final Aliases aliases = new Aliases();
+ aliases.setSuperLongProperty("ok");
+ assertEquals("{\"super_long_property\":\"ok\"}", new
MapperBuilder().build().writeObjectAsString(aliases));
+ }
+ {
+ final AliasesOnField aliases = new
MapperBuilder().setAccessModeName("field").build().readObject(
+ new
ByteArrayInputStream("{\"super_long_property\":\"ok\"}".getBytes()),
AliasesOnField.class);
+ assertEquals("ok", aliases.superLongProperty);
+ }
+ {
+ final AliasesOnField aliases = new AliasesOnField();
+ aliases.setSuperLongProperty("ok");
+ assertEquals("{\"super_long_property\":\"ok\"}", new
MapperBuilder().setAccessModeName("field").build().writeObjectAsString(aliases));
+ }
+ }
+
public static class NanHolder {
private Double nan = Double.NaN;
@@ -751,6 +775,32 @@ public class MapperTest {
}
+
+ public static class Aliases {
+ private String superLongProperty;
+
+ @JohnzonProperty("super_long_property")
+ public String getSuperLongProperty() {
+ return superLongProperty;
+ }
+
+ public void setSuperLongProperty(final String superLongProperty) {
+ this.superLongProperty = superLongProperty;
+ }
+ }
+
+ public static class AliasesOnField {
+ @JohnzonProperty("super_long_property")
+ private String superLongProperty;
+
+ public String getSuperLongProperty() {
+ return superLongProperty;
+ }
+
+ public void setSuperLongProperty(final String superLongProperty) {
+ this.superLongProperty = superLongProperty;
+ }
+ }
/*public static class ByteArray {