You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bu...@apache.org on 2020/03/05 12:45:52 UTC
[cxf] 02/02: cxf-rt-rs-json-basic: update JsonMapObject
This is an automated email from the ASF dual-hosted git repository.
buhhunyx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 44a930752c799a6e784ad598079b80bd99efa362
Author: Alexey Markevich <bu...@gmail.com>
AuthorDate: Sun Mar 1 14:16:01 2020 +0300
cxf-rt-rs-json-basic: update JsonMapObject
---
.../apache/cxf/jaxrs/json/basic/JsonMapObject.java | 44 ++++++++++--------
.../cxf/jaxrs/json/basic/JsonMapObjectTest.java | 54 ++++++++++++++++++++++
2 files changed, 79 insertions(+), 19 deletions(-)
diff --git a/rt/rs/extensions/json-basic/src/main/java/org/apache/cxf/jaxrs/json/basic/JsonMapObject.java b/rt/rs/extensions/json-basic/src/main/java/org/apache/cxf/jaxrs/json/basic/JsonMapObject.java
index 859ed0a..5ee3ec2 100644
--- a/rt/rs/extensions/json-basic/src/main/java/org/apache/cxf/jaxrs/json/basic/JsonMapObject.java
+++ b/rt/rs/extensions/json-basic/src/main/java/org/apache/cxf/jaxrs/json/basic/JsonMapObject.java
@@ -21,18 +21,22 @@ package org.apache.cxf.jaxrs.json.basic;
import java.io.Serializable;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.Function;
import org.apache.cxf.helpers.CastUtils;
public class JsonMapObject implements Serializable {
private static final long serialVersionUID = 2620765136328623790L;
- Map<String, Integer> updateCount;
- Map<String, Object> values = new LinkedHashMap<>();
- public JsonMapObject() {
+ private final Map<String, Object> values;
+ private Map<String, Integer> updateCount;
+
+ public JsonMapObject() {
+ this(new LinkedHashMap<>());
}
public JsonMapObject(Map<String, Object> values) {
@@ -40,17 +44,12 @@ public class JsonMapObject implements Serializable {
}
public void setProperty(String name, Object value) {
- if (values.containsKey(name)) {
+ if (null != values.put(name, value instanceof JsonMapObject ? ((JsonMapObject)value).asMap() : value)) {
if (updateCount == null) {
- updateCount = new LinkedHashMap<>();
+ updateCount = new HashMap<>();
}
- final Integer count = updateCount.getOrDefault(name, 1) + 1;
- updateCount.put(name, count);
+ updateCount.compute(name, (k, v) -> (v == null) ? 2 : v + 1);
}
- if (value instanceof JsonMapObject) {
- value = ((JsonMapObject)value).asMap();
- }
- values.put(name, value);
}
public boolean containsProperty(String name) {
@@ -81,23 +80,30 @@ public class JsonMapObject implements Serializable {
return values;
}
public Integer getIntegerProperty(String name) {
- Object value = getProperty(name);
- if (value != null) {
- return value instanceof Integer ? (Integer)value : Integer.parseInt(value.toString());
+ Number number = getNumberProperty(name, Integer::valueOf);
+ if (number != null) {
+ return number instanceof Integer ? (Integer) number : Integer.valueOf(number.intValue());
}
return null;
}
public Long getLongProperty(String name) {
+ Number number = getNumberProperty(name, Long::valueOf);
+ if (number != null) {
+ return number instanceof Long ? (Long) number : Long.valueOf(number.longValue());
+ }
+ return null;
+ }
+ private Number getNumberProperty(String name, Function<String, Number> converter) {
Object value = getProperty(name);
if (value != null) {
- return value instanceof Long ? (Long)value : Long.parseLong(value.toString());
+ return value instanceof Number ? (Number) value : converter.apply(value.toString());
}
return null;
}
public Boolean getBooleanProperty(String name) {
Object value = getProperty(name);
if (value != null) {
- return value instanceof Boolean ? (Boolean)value : Boolean.parseBoolean(value.toString());
+ return value instanceof Boolean ? (Boolean)value : Boolean.valueOf(value.toString());
}
return null;
}
@@ -128,15 +134,15 @@ public class JsonMapObject implements Serializable {
}
public boolean equals(Object obj) {
- return obj instanceof JsonMapObject && ((JsonMapObject)obj).values.equals(this.values);
+ return this == obj || obj instanceof JsonMapObject && ((JsonMapObject)obj).values.equals(this.values);
}
-
+
public int size() {
return values.size();
}
public Map<String, Object> getUpdateCount() {
- return updateCount == null ? null : Collections.<String, Object>unmodifiableMap(updateCount);
+ return updateCount == null ? null : Collections.unmodifiableMap(updateCount);
}
public Object removeProperty(String name) {
diff --git a/rt/rs/extensions/json-basic/src/test/java/org/apache/cxf/jaxrs/json/basic/JsonMapObjectTest.java b/rt/rs/extensions/json-basic/src/test/java/org/apache/cxf/jaxrs/json/basic/JsonMapObjectTest.java
new file mode 100644
index 0000000..33fc6c1
--- /dev/null
+++ b/rt/rs/extensions/json-basic/src/test/java/org/apache/cxf/jaxrs/json/basic/JsonMapObjectTest.java
@@ -0,0 +1,54 @@
+/**
+ * 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.cxf.jaxrs.json.basic;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class JsonMapObjectTest {
+
+ @Test
+ public void testGetIntegerProperty() throws Exception {
+ final String json = "{\"a\":123,\"b\":\"456\"}";
+ final JsonMapObject obj = new JsonMapObject();
+ new JsonMapObjectReaderWriter().fromJson(obj, json);
+
+ assertEquals(Integer.valueOf(123), obj.getIntegerProperty("a"));
+ assertEquals(Integer.valueOf(456), obj.getIntegerProperty("b"));
+ }
+
+ @Test
+ public void testGetUpdateCount() throws Exception {
+ final JsonMapObject obj = new JsonMapObject();
+ final String key = "key";
+ obj.setProperty(key, 1);
+ assertNull(obj.getUpdateCount());
+
+ obj.setProperty(key, 2);
+ assertEquals(2, obj.getUpdateCount().get(key));
+ assertEquals(Integer.valueOf(2), obj.getIntegerProperty(key));
+
+ obj.setProperty(key, 3);
+ assertEquals(3, obj.getUpdateCount().get(key));
+ assertEquals(Integer.valueOf(3), obj.getIntegerProperty(key));
+ }
+}
\ No newline at end of file