svn commit: r910112 - in /ofbiz/trunk/framework/base/src: META-INF/services/ org/ofbiz/base/conversion/ org/ofbiz/base/conversion/test/ org/ofbiz/base/json/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r910112 - in /ofbiz/trunk/framework/base/src: META-INF/services/ org/ofbiz/base/conversion/ org/ofbiz/base/conversion/test/ org/ofbiz/base/json/

doogie-3
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;