Author: doogie
Date: Sun Feb 14 22:44:39 2010
New Revision: 910112
URL: http://svn.apache.org/viewvc?rev=910112&view=rev
Log:
Move all JSON converters to a separate class, change the collection
converters that used to use JSON back to calling toString, and implement
separate JSON conversion.
Added:
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONConverters.java
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONResult.java
Modified:
ofbiz/trunk/framework/base/src/META-INF/services/org.ofbiz.base.conversion.ConverterLoader
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/CollectionConverters.java
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java
ofbiz/trunk/framework/base/src/org/ofbiz/base/json/JSONWriter.java
Modified:
ofbiz/trunk/framework/base/src/META-INF/services/org.ofbiz.base.conversion.ConverterLoader
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/META-INF/services/org.ofbiz.base.conversion.ConverterLoader?rev=910112&r1=910111&r2=910112&view=diff
==============================================================================
---
ofbiz/trunk/framework/base/src/META-INF/services/org.ofbiz.base.conversion.ConverterLoader
(original)
+++
ofbiz/trunk/framework/base/src/META-INF/services/org.ofbiz.base.conversion.ConverterLoader
Sun Feb 14 22:44:39 2010
@@ -18,6 +18,7 @@
org.ofbiz.base.conversion.BooleanConverters
org.ofbiz.base.conversion.CollectionConverters
org.ofbiz.base.conversion.DateTimeConverters
+org.ofbiz.base.conversion.JSONConverters
org.ofbiz.base.conversion.MiscConverters
org.ofbiz.base.conversion.NetConverters
org.ofbiz.base.conversion.NumberConverters
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/CollectionConverters.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/CollectionConverters.java?rev=910112&r1=910111&r2=910112&view=diff
==============================================================================
---
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/CollectionConverters.java
(original)
+++
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/CollectionConverters.java
Sun Feb 14 22:44:39 2010
@@ -19,16 +19,13 @@
package org.ofbiz.base.conversion;
import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ofbiz.base.util.ObjectType;
-import org.ofbiz.base.json.JSON;
-import org.ofbiz.base.json.JSONWriter;
+import org.ofbiz.base.util.StringUtil;
import javolution.util.FastList;
import javolution.util.FastSet;
@@ -56,13 +53,7 @@
}
public String convert(List<T> obj) throws ConversionException {
- StringWriter sw = new StringWriter();
- try {
- new JSONWriter(sw).write(obj);
- } catch (IOException e) {
- throw new ConversionException(e);
- }
- return sw.toString();
+ return obj.toString();
}
}
@@ -96,62 +87,51 @@
}
public String convert(Map<K, V> obj) throws ConversionException {
- StringWriter sw = new StringWriter();
- try {
- new JSONWriter(sw).write(obj);
- } catch (IOException e) {
- throw new ConversionException(e);
- }
- return sw.toString();
+ return obj.toString();
}
}
- public static class StringToList extends AbstractConverter<String,
List<Object>> {
+ public static class StringToList extends AbstractConverter<String,
List<String>> {
public StringToList() {
super(String.class, List.class);
}
- public List<Object> convert(String obj) throws ConversionException {
- try {
- return new JSON(new StringReader(obj)).JSONArray();
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ConversionException(e);
+ public List<String> convert(String obj) throws ConversionException {
+ if (obj.startsWith("[") && obj.endsWith("]")) {
+ return StringUtil.toList(obj);
+ } else {
+ List<String> tempList = FastList.newInstance();
+ tempList.add(obj);
+ return tempList;
}
}
}
- public static class StringToMap extends AbstractConverter<String,
Map<String, Object>> {
+ public static class StringToMap extends AbstractConverter<String,
Map<String, String>> {
public StringToMap() {
super(String.class, Map.class);
}
- public Map<String, Object> convert(String obj) throws
ConversionException {
- try {
- return new JSON(new StringReader(obj)).JSONObject();
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ConversionException(e);
+ public Map<String, String> convert(String obj) throws
ConversionException {
+ if (obj.startsWith("{") && obj.endsWith("}")) {
+ return StringUtil.toMap(obj);
}
+ throw new ConversionException("Could not convert " + obj + " to
Map: ");
}
}
- public static class StringToSet extends AbstractConverter<String,
Set<Object>> {
+ public static class StringToSet extends AbstractConverter<String,
Set<String>> {
public StringToSet() {
super(String.class, Set.class);
}
- public Set<Object> convert(String obj) throws ConversionException {
- try {
- Set<Object> set = FastSet.newInstance();
- set.addAll(new JSON(new StringReader(obj)).JSONArray());
- return set;
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- throw new ConversionException(e);
+ public Set<String> convert(String obj) throws ConversionException {
+ if (obj.startsWith("[") && obj.endsWith("]")) {
+ return StringUtil.toSet(obj);
+ } else {
+ Set<String> tempSet = FastSet.newInstance();
+ tempSet.add(obj);
+ return tempSet;
}
}
}
Added:
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONConverters.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONConverters.java?rev=910112&view=auto
==============================================================================
---
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONConverters.java
(added)
+++
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONConverters.java
Sun Feb 14 22:44:39 2010
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * 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.ofbiz.base.conversion;
+
+import java.io.StringReader;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.ofbiz.base.util.UtilGenerics;
+import org.ofbiz.base.json.JSON;
+import org.ofbiz.base.json.JSONWriter;
+
+import javolution.util.FastList;
+import javolution.util.FastSet;
+
+/** JSON Converter classes. */
+public class JSONConverters implements ConverterLoader {
+ public static class ObjectToJSONResultCreator<R extends JSONResult>
implements ConverterCreater, ConverterLoader {
+ public void loadConverters() {
+ Converters.registerCreater(this);
+ }
+
+ public <S, T> Converter<S, T> createConverter(Class<S> sourceClass,
Class<T> targetClass) {
+ if (!JSONResult.class.isAssignableFrom(targetClass)) {
+ return null;
+ }
+ if (Collection.class.isAssignableFrom(sourceClass)) {
+ } else if (Map.class.isAssignableFrom(sourceClass)) {
+ } else if (Byte.class == sourceClass) {
+ } else if (Character.class == sourceClass) {
+ } else if (Double.class == sourceClass) {
+ } else if (Float.class == sourceClass) {
+ } else if (Integer.class == sourceClass) {
+ } else if (Long.class == sourceClass) {
+ } else if (Short.class == sourceClass) {
+ } else {
+ return null;
+ }
+ return UtilGenerics.cast(new ObjectToJSONWriterResult<S,
JSONResult>(sourceClass, UtilGenerics.<Class<JSONResult>>cast(targetClass)));
+ }
+ }
+
+ private static class ObjectToJSONWriterResult<S, T extends JSONResult>
extends AbstractConverter<S, T> {
+ public ObjectToJSONWriterResult(Class<S> sourceClass, Class<T>
targetClass) {
+ super(sourceClass, targetClass);
+ }
+
+ public T convert(S obj) throws ConversionException {
+ try {
+ T result =
UtilGenerics.<T>cast(getTargetClass().newInstance());
+ result.getWriter().write(obj);
+ return result;
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToByte extends AbstractConverter<JSON, Byte> {
+ public JSONToByte() {
+ super(JSON.class, Byte.class);
+ }
+
+ public Byte convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONLong().byteValue();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToDouble extends AbstractConverter<JSON, Double> {
+ public JSONToDouble() {
+ super(JSON.class, Double.class);
+ }
+
+ public Double convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONFloat();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToFloat extends AbstractConverter<JSON, Float> {
+ public JSONToFloat() {
+ super(JSON.class, Float.class);
+ }
+
+ public Float convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONFloat().floatValue();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToInteger extends AbstractConverter<JSON, Integer>
{
+ public JSONToInteger() {
+ super(JSON.class, Integer.class);
+ }
+
+ public Integer convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONLong().intValue();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToList extends AbstractConverter<JSON,
List<Object>> {
+ public JSONToList() {
+ super(JSON.class, List.class);
+ }
+
+ public List<Object> convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONArray();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToLong extends AbstractConverter<JSON, Long> {
+ public JSONToLong() {
+ super(JSON.class, Long.class);
+ }
+
+ public Long convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONLong();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToMap extends AbstractConverter<JSON, Map<String,
Object>> {
+ public JSONToMap() {
+ super(JSON.class, Map.class);
+ }
+
+ public Map<String, Object> convert(JSON obj) throws
ConversionException {
+ try {
+ return obj.JSONObject();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToShort extends AbstractConverter<JSON, Short> {
+ public JSONToShort() {
+ super(JSON.class, Short.class);
+ }
+
+ public Short convert(JSON obj) throws ConversionException {
+ try {
+ return obj.JSONLong().shortValue();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public static class JSONToSet extends AbstractConverter<JSON, Set<Object>>
{
+ public JSONToSet() {
+ super(JSON.class, Set.class);
+ }
+
+ public Set<Object> convert(JSON obj) throws ConversionException {
+ try {
+ Set<Object> set = FastSet.newInstance();
+ set.addAll(obj.JSONArray());
+ return set;
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new ConversionException(e);
+ }
+ }
+ }
+
+ public void loadConverters() {
+ Converters.loadContainedConverters(JSONConverters.class);
+ }
+}
Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONResult.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONResult.java?rev=910112&view=auto
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONResult.java
(added)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/JSONResult.java
Sun Feb 14 22:44:39 2010
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * 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.ofbiz.base.conversion;
+
+import java.io.StringWriter;
+
+import org.ofbiz.base.json.JSONWriter;
+
+public interface JSONResult {
+ JSONWriter getWriter();
+ String getResult();
+
+ public static final class Indenting implements JSONResult {
+ private final StringWriter sw = new StringWriter();
+ private final JSONWriter writer = new JSONWriter(sw);
+
+ public JSONWriter getWriter() {
+ return writer;
+ }
+
+ public String getResult() {
+ return sw.toString();
+ }
+ }
+}
+
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java?rev=910112&r1=910111&r2=910112&view=diff
==============================================================================
---
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java
(original)
+++
ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java
Sun Feb 14 22:44:39 2010
@@ -34,6 +34,7 @@
import org.ofbiz.base.concurrent.TTLObject;
import org.ofbiz.base.conversion.Converter;
import org.ofbiz.base.conversion.Converters;
+import org.ofbiz.base.conversion.JSONResult;
import org.ofbiz.base.test.GenericTestCaseBase;
import org.ofbiz.base.util.UtilGenerics;
import org.ofbiz.base.util.UtilMisc;
@@ -45,15 +46,15 @@
super(name);
}
- private static <S, T> void assertConversion(String label, String wanted,
Class<T> targetClass, Object source, Class<S> sourceClass) throws Exception {
+ private static <S, T extends JSONResult.Indenting> void
assertConversion(String label, String wanted, Class<T> targetClass, Object
source, Class<S> sourceClass) throws Exception {
Converter<S, T> converter = Converters.getConverter(sourceClass,
targetClass);
assertTrue(label + " can convert", converter.canConvert(sourceClass,
targetClass));
- assertEquals(label, wanted,
converter.convert(UtilGenerics.<S>cast(source)));
+ assertEquals(label, wanted,
converter.convert(UtilGenerics.<S>cast(source)).getResult());
}
public void testExtendsImplements() throws Exception {
List<String> arraysList = Arrays.asList("a", "b", "c");
- assertConversion("", "[\n \"a\",\n \"b\",\n \"c\"\n]", String.class,
arraysList, arraysList.getClass());
+ assertConversion("", "[\n \"a\",\n \"b\",\n \"c\"\n]",
JSONResult.Indenting.class, arraysList, arraysList.getClass());
Exception caught = null;
try {
Converters.getConverter(MiscTests.class, String.class);
@@ -64,7 +65,7 @@
}
LRUMap<String, String> map = new LRUMap<String, String>();
map.put("a", "1");
- assertConversion("", "{\n \"a\": \"1\"\n}", String.class, map,
LRUMap.class);
+ assertConversion("", "{\n \"a\": \"1\"\n}",
JSONResult.Indenting.class, map, LRUMap.class);
}
public static <S> void assertPassThru(Object wanted, Class<S> sourceClass)
throws Exception {
Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/json/JSONWriter.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/json/JSONWriter.java?rev=910112&r1=910111&r2=910112&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/json/JSONWriter.java
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/json/JSONWriter.java Sun Feb
14 22:44:39 2010
@@ -19,6 +19,7 @@
package org.ofbiz.base.json;
import java.io.IOException;
+import java.io.StringWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.Iterator;