[Practicalxml-commits] SF.net SVN: practicalxml:[117] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-08-18 19:16:56
|
Revision: 117
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=117&view=rev
Author: kdgregory
Date: 2009-08-18 19:16:50 +0000 (Tue, 18 Aug 2009)
Log Message:
-----------
another class rename: ConversionHelper back to PrimitiveConversionHelper
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestConversionHelper.java
Added Paths:
-----------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/PrimitiveConversionHelper.java
Removed Paths:
-------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java 2009-08-18 18:52:26 UTC (rev 116)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlDriver.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -31,7 +31,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
import net.sf.practicalxml.converter.bean.Bean2XmlAppenders.*;
-import net.sf.practicalxml.converter.internal.ConversionHelper;
+import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
/**
@@ -41,14 +41,14 @@
*/
public class Bean2XmlDriver
{
- private ConversionHelper _helper;
+ private PrimitiveConversionHelper _helper;
private EnumSet<Bean2XmlOptions> _options = EnumSet.noneOf(Bean2XmlOptions.class);
public Bean2XmlDriver(Bean2XmlOptions... options)
{
for (Bean2XmlOptions option : options)
_options.add(option);
- _helper = new ConversionHelper(shouldUseXsdFormatting());
+ _helper = new PrimitiveConversionHelper(shouldUseXsdFormatting());
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 18:52:26 UTC (rev 116)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -37,7 +37,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
-import net.sf.practicalxml.converter.internal.ConversionHelper;
+import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
import net.sf.practicalxml.internal.StringUtils;
import org.w3c.dom.Element;
@@ -52,7 +52,7 @@
public class Xml2BeanDriver
{
private EnumSet<Xml2BeanOptions> _options;
- private ConversionHelper _helper;
+ private PrimitiveConversionHelper _helper;
private Map<Class<?>,Map<String,Method>> _introspectedClasses;
@@ -62,7 +62,7 @@
for (Xml2BeanOptions option : options)
_options.add(option);
- _helper = new ConversionHelper(_options.contains(Xml2BeanOptions.EXPECT_XSD_FORMAT));
+ _helper = new PrimitiveConversionHelper(_options.contains(Xml2BeanOptions.EXPECT_XSD_FORMAT));
_introspectedClasses = new HashMap<Class<?>,Map<String,Method>>();
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java 2009-08-18 18:52:26 UTC (rev 116)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -25,7 +25,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.converter.ConversionException;
-import net.sf.practicalxml.converter.internal.ConversionHelper;
+import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
import net.sf.practicalxml.internal.StringUtils;
@@ -38,7 +38,7 @@
public class Xml2BeanHandler
{
private EnumSet<Xml2BeanOptions> _options;
- private ConversionHelper _primitiveHelper;
+ private PrimitiveConversionHelper _primitiveHelper;
/**
@@ -50,7 +50,7 @@
for (Xml2BeanOptions option : options)
_options.add(option);
- _primitiveHelper = new ConversionHelper(true);
+ _primitiveHelper = new PrimitiveConversionHelper(true);
}
Deleted: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java 2009-08-18 18:52:26 UTC (rev 116)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -1,480 +0,0 @@
-// Copyright 2008-2009 severally by the contributors
-//
-// Licensed 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 net.sf.practicalxml.converter.internal;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.sf.practicalxml.XmlUtil;
-import net.sf.practicalxml.converter.ConversionException;
-
-
-/**
- * Responsible for converting "primitive" types -- those with unambiguous
- * string representations -- to/from such a representation.
- */
-public class ConversionHelper
-{
- private static Map<String,Class<?>> XSD_TYPE_TO_JAVA_CLASS
- = new HashMap<String,Class<?>>();
- static
- {
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:string", String.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:boolean", Boolean.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:byte", Byte.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:short", Short.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:int", Integer.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:long", Long.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:decimal", BigDecimal.class);
- XSD_TYPE_TO_JAVA_CLASS.put("xsd:dateTime", Date.class);
- }
-
-
- // this is not static because the helpers are inner classes
- private Map<Class<?>,ConversionHandler<?>> _helpers
- = new HashMap<Class<?>,ConversionHandler<?>>();
- {
- _helpers.put(String.class, new StringConversionHandler());
- _helpers.put(Character.class, new CharacterConversionHandler());
- _helpers.put(Boolean.class, new BooleanConversionHandler());
- _helpers.put(Byte.class, new ByteConversionHandler());
- _helpers.put(Short.class, new ShortConversionHandler());
- _helpers.put(Integer.class, new IntegerConversionHandler());
- _helpers.put(Long.class, new LongConversionHandler());
- _helpers.put(Float.class, new FloatConversionHandler());
- _helpers.put(Double.class, new DoubleConversionHandler());
- _helpers.put(BigInteger.class, new BigIntegerConversionHandler());
- _helpers.put(BigDecimal.class, new BigDecimalConversionHandler());
- _helpers.put(Date.class, new DateConversionHandler());
-
- _helpers.put(Boolean.TYPE, new BooleanConversionHandler());
- _helpers.put(Byte.TYPE, new ByteConversionHandler());
- _helpers.put(Short.TYPE, new ShortConversionHandler());
- _helpers.put(Integer.TYPE, new IntegerConversionHandler());
- _helpers.put(Long.TYPE, new LongConversionHandler());
- _helpers.put(Float.TYPE, new FloatConversionHandler());
- _helpers.put(Double.TYPE, new DoubleConversionHandler());
- }
-
- private boolean _useXsdFormatting;
-
-
- /**
- * Default constructor, which uses Java formatting.
- */
- public ConversionHelper()
- {
- // nothing to see here
- }
-
-
- /**
- * Constructor that allows selection of Java or XSD formatting.
- */
- public ConversionHelper(boolean useXsdFormatting)
- {
- _useXsdFormatting = useXsdFormatting;
- }
-
-
-//----------------------------------------------------------------------------
-// Public Methods
-//----------------------------------------------------------------------------
-
- /**
- * Returns the XSD type name to use for stringified objects of the
- * specified class, <code>null</code> if this converter can't convert
- * instances of the class.
- */
- public String getXsdType(Class<?> klass)
- {
- ConversionHandler<?> helper = _helpers.get(klass);
- return (helper == null) ? null : helper.getXsiType();
- }
-
-
- /**
- * Returns the Java type that best matches the given Schema type name,
- * <code>null</code> if we do not have an appropriate mapping.
- */
- public Class<?> getJavaType(String xsdTypename)
- {
- return XSD_TYPE_TO_JAVA_CLASS.get(xsdTypename);
- }
-
-
- /**
- * Converts the passed object into its string representation, according
- * to the options currently in effect. Passing <code>null</code> will
- * return <code>null</code>. Throws {@link ConversionException} if
- * unable to convert the passed object.
- */
- public String stringify(Object obj)
- {
- if (obj == null)
- return null;
-
- try
- {
- return getHelper(obj.getClass()).stringify(obj);
- }
- catch (Exception ee)
- {
- if (ee instanceof ConversionException)
- throw (ConversionException)ee;
- throw new ConversionException("unable to convert: " + obj, ee);
- }
- }
-
-
- /**
- * Parses the passed string into an object of the desired class. Passing
- * <code>null</code> will return <code>null</code>, passing an empty
- * string will typically throw a {@link ConversionException}.
- */
- public Object parse(String str, Class<?> klass)
- {
- if (str == null)
- return null;
-
- try
- {
- return getHelper(klass).parse(str);
- }
- catch (Exception ee)
- {
- if (ee instanceof ConversionException)
- throw (ConversionException)ee;
- throw new ConversionException("unable to parse: " + str, ee);
- }
- }
-
-
-//----------------------------------------------------------------------------
-// Internals
-//----------------------------------------------------------------------------
-
- /**
- * Returns the appropriate conversion helper or throws.
- */
- @SuppressWarnings(value="unchecked")
- private ConversionHandler getHelper(Class<?> klass)
- {
- ConversionHandler<?> helper = _helpers.get(klass);
- if (helper == null)
- throw new ConversionException("unable to get helper: " + klass.getName());
- return helper;
- }
-
-
- /**
- * Each primitive class has its own conversion handler that is responsible
- * for converting to/from a string representation. Handlers are guaranteed
- * to receive non-null objects/strings.
- * <p>
- * This interface is parameterized so that the compiler will generate
- * bridge methods for implementation classes. Elsewhere, we don't care
- * about parameterization, so wildcard or drop it (see {@link #getHelper}).
- * <p>
- * Implementation classes are expected to be inner classes, so that they
- * have access to configuration information (such as formatting rules).
- * <p>
- * Implementation classes are permitted to throw any exception; caller is
- * expected to catch them and translate to a {@link ConversionException}.
- */
- private static interface ConversionHandler<T>
- {
- public String getXsiType();
- public String stringify(T obj) throws Exception;
- public T parse(String str) throws Exception;
- }
-
-
- private class StringConversionHandler
- implements ConversionHandler<String>
- {
- public String getXsiType()
- {
- return "xsd:string";
- }
-
- public String stringify(String obj)
- {
- return String.valueOf(obj);
- }
-
- public String parse(String str)
- {
- return str;
- }
- }
-
-
- private class CharacterConversionHandler
- implements ConversionHandler<Character>
- {
- private final Character NUL = Character.valueOf('\0');
-
- public String getXsiType()
- {
- return "xsd:string";
- }
-
- public String stringify(Character obj)
- {
- if (obj.equals(NUL))
- return "";
- return obj.toString();
- }
-
- public Character parse(String str)
- {
- if (str.length() == 0)
- return NUL;
- if (str.length() > 1)
- throw new ConversionException(
- "attempted to convert multi-character string: \"" + str + "\"");
- return Character.valueOf(str.charAt(0));
- }
- }
-
-
- private class BooleanConversionHandler
- implements ConversionHandler<Boolean>
- {
- public String getXsiType()
- {
- return "xsd:boolean";
- }
-
- public String stringify(Boolean obj)
- {
- return _useXsdFormatting
- ? XmlUtil.formatXsdBoolean(obj.booleanValue())
- : obj.toString();
- }
-
- public Boolean parse(String str)
- {
- return _useXsdFormatting
- ? XmlUtil.parseXsdBoolean(str)
- : Boolean.parseBoolean(str);
- }
- }
-
-
- private class ByteConversionHandler
- implements ConversionHandler<Byte>
- {
- public String getXsiType()
- {
- return "xsd:byte";
- }
-
- public String stringify(Byte obj)
- {
- return obj.toString();
- }
-
- public Byte parse(String str)
- {
- return Byte.valueOf(str.trim());
- }
- }
-
-
- private class ShortConversionHandler
- implements ConversionHandler<Short>
- {
- public String getXsiType()
- {
- return "xsd:short";
- }
-
- public String stringify(Short obj)
- {
- return obj.toString();
- }
-
- public Short parse(String str)
- {
- return Short.valueOf(str.trim());
- }
- }
-
-
- private class IntegerConversionHandler
- implements ConversionHandler<Integer>
- {
- public String getXsiType()
- {
- return "xsd:int";
- }
-
- public String stringify(Integer obj)
- {
- return obj.toString();
- }
-
- public Integer parse(String str)
- {
- return Integer.valueOf(str.trim());
- }
- }
-
-
- private class LongConversionHandler
- implements ConversionHandler<Long>
- {
- public String getXsiType()
- {
- return "xsd:long";
- }
-
- public String stringify(Long obj)
- {
- return obj.toString();
- }
-
- public Long parse(String str)
- {
- return Long.valueOf(str.trim());
- }
- }
-
-
- private class FloatConversionHandler
- implements ConversionHandler<Float>
- {
- public String getXsiType()
- {
- return "xsd:decimal";
- }
-
- public String stringify(Float obj)
- {
- return _useXsdFormatting
- ? XmlUtil.formatXsdDecimal(obj)
- : obj.toString();
- }
-
- public Float parse(String str)
- {
- return Float.valueOf(str.trim());
- }
- }
-
-
- private class DoubleConversionHandler
- implements ConversionHandler<Double>
- {
- public String getXsiType()
- {
- return "xsd:decimal";
- }
-
- public String stringify(Double obj)
- {
- return _useXsdFormatting
- ? XmlUtil.formatXsdDecimal(obj)
- : obj.toString();
- }
-
- public Double parse(String str)
- {
- return Double.valueOf(str.trim());
- }
- }
-
-
- private class BigIntegerConversionHandler
- implements ConversionHandler<BigInteger>
- {
- public String getXsiType()
- {
- return "xsd:decimal";
- }
-
- public String stringify(BigInteger obj)
- {
- return obj.toString();
- }
-
- public BigInteger parse(String str)
- {
- return new BigInteger(str.trim());
- }
- }
-
-
- private class BigDecimalConversionHandler
- implements ConversionHandler<BigDecimal>
- {
- public String getXsiType()
- {
- return "xsd:decimal";
- }
-
- public String stringify(BigDecimal obj)
- {
- return obj.toString();
- }
-
- public BigDecimal parse(String str)
- {
- return new BigDecimal(str.trim());
- }
- }
-
-
- private class DateConversionHandler
- implements ConversionHandler<Date>
- {
- // format as specified by Date.toString() JavaDoc
- private DateFormat _defaultFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
-
- public String getXsiType()
- {
- return "xsd:dateTime";
- }
-
- public String stringify(Date obj)
- {
- return _useXsdFormatting
- ? XmlUtil.formatXsdDatetime(obj)
- : obj.toString();
- }
-
- public Date parse(String str)
- throws ParseException
- {
- if (_useXsdFormatting)
- return XmlUtil.parseXsdDatetime(str);
- else
- {
- synchronized (_defaultFormat)
- {
- return _defaultFormat.parse(str);
- }
- }
- }
- }
-}
Copied: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/PrimitiveConversionHelper.java (from rev 116, branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java)
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/PrimitiveConversionHelper.java (rev 0)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/PrimitiveConversionHelper.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -0,0 +1,480 @@
+// Copyright 2008-2009 severally by the contributors
+//
+// Licensed 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 net.sf.practicalxml.converter.internal;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.sf.practicalxml.XmlUtil;
+import net.sf.practicalxml.converter.ConversionException;
+
+
+/**
+ * Responsible for converting "primitive" types -- those with unambiguous
+ * string representations -- to/from such a representation.
+ */
+public class PrimitiveConversionHelper
+{
+ private static Map<String,Class<?>> XSD_TYPE_TO_JAVA_CLASS
+ = new HashMap<String,Class<?>>();
+ static
+ {
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:string", String.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:boolean", Boolean.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:byte", Byte.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:short", Short.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:int", Integer.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:long", Long.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:decimal", BigDecimal.class);
+ XSD_TYPE_TO_JAVA_CLASS.put("xsd:dateTime", Date.class);
+ }
+
+
+ // this is not static because the helpers are inner classes
+ private Map<Class<?>,ConversionHandler<?>> _helpers
+ = new HashMap<Class<?>,ConversionHandler<?>>();
+ {
+ _helpers.put(String.class, new StringConversionHandler());
+ _helpers.put(Character.class, new CharacterConversionHandler());
+ _helpers.put(Boolean.class, new BooleanConversionHandler());
+ _helpers.put(Byte.class, new ByteConversionHandler());
+ _helpers.put(Short.class, new ShortConversionHandler());
+ _helpers.put(Integer.class, new IntegerConversionHandler());
+ _helpers.put(Long.class, new LongConversionHandler());
+ _helpers.put(Float.class, new FloatConversionHandler());
+ _helpers.put(Double.class, new DoubleConversionHandler());
+ _helpers.put(BigInteger.class, new BigIntegerConversionHandler());
+ _helpers.put(BigDecimal.class, new BigDecimalConversionHandler());
+ _helpers.put(Date.class, new DateConversionHandler());
+
+ _helpers.put(Boolean.TYPE, new BooleanConversionHandler());
+ _helpers.put(Byte.TYPE, new ByteConversionHandler());
+ _helpers.put(Short.TYPE, new ShortConversionHandler());
+ _helpers.put(Integer.TYPE, new IntegerConversionHandler());
+ _helpers.put(Long.TYPE, new LongConversionHandler());
+ _helpers.put(Float.TYPE, new FloatConversionHandler());
+ _helpers.put(Double.TYPE, new DoubleConversionHandler());
+ }
+
+ private boolean _useXsdFormatting;
+
+
+ /**
+ * Default constructor, which uses Java formatting.
+ */
+ public PrimitiveConversionHelper()
+ {
+ // nothing to see here
+ }
+
+
+ /**
+ * Constructor that allows selection of Java or XSD formatting.
+ */
+ public PrimitiveConversionHelper(boolean useXsdFormatting)
+ {
+ _useXsdFormatting = useXsdFormatting;
+ }
+
+
+//----------------------------------------------------------------------------
+// Public Methods
+//----------------------------------------------------------------------------
+
+ /**
+ * Returns the XSD type name to use for stringified objects of the
+ * specified class, <code>null</code> if this converter can't convert
+ * instances of the class.
+ */
+ public String getXsdType(Class<?> klass)
+ {
+ ConversionHandler<?> helper = _helpers.get(klass);
+ return (helper == null) ? null : helper.getXsiType();
+ }
+
+
+ /**
+ * Returns the Java type that best matches the given Schema type name,
+ * <code>null</code> if we do not have an appropriate mapping.
+ */
+ public Class<?> getJavaType(String xsdTypename)
+ {
+ return XSD_TYPE_TO_JAVA_CLASS.get(xsdTypename);
+ }
+
+
+ /**
+ * Converts the passed object into its string representation, according
+ * to the options currently in effect. Passing <code>null</code> will
+ * return <code>null</code>. Throws {@link ConversionException} if
+ * unable to convert the passed object.
+ */
+ public String stringify(Object obj)
+ {
+ if (obj == null)
+ return null;
+
+ try
+ {
+ return getHelper(obj.getClass()).stringify(obj);
+ }
+ catch (Exception ee)
+ {
+ if (ee instanceof ConversionException)
+ throw (ConversionException)ee;
+ throw new ConversionException("unable to convert: " + obj, ee);
+ }
+ }
+
+
+ /**
+ * Parses the passed string into an object of the desired class. Passing
+ * <code>null</code> will return <code>null</code>, passing an empty
+ * string will typically throw a {@link ConversionException}.
+ */
+ public Object parse(String str, Class<?> klass)
+ {
+ if (str == null)
+ return null;
+
+ try
+ {
+ return getHelper(klass).parse(str);
+ }
+ catch (Exception ee)
+ {
+ if (ee instanceof ConversionException)
+ throw (ConversionException)ee;
+ throw new ConversionException("unable to parse: " + str, ee);
+ }
+ }
+
+
+//----------------------------------------------------------------------------
+// Internals
+//----------------------------------------------------------------------------
+
+ /**
+ * Returns the appropriate conversion helper or throws.
+ */
+ @SuppressWarnings(value="unchecked")
+ private ConversionHandler getHelper(Class<?> klass)
+ {
+ ConversionHandler<?> helper = _helpers.get(klass);
+ if (helper == null)
+ throw new ConversionException("unable to get helper: " + klass.getName());
+ return helper;
+ }
+
+
+ /**
+ * Each primitive class has its own conversion handler that is responsible
+ * for converting to/from a string representation. Handlers are guaranteed
+ * to receive non-null objects/strings.
+ * <p>
+ * This interface is parameterized so that the compiler will generate
+ * bridge methods for implementation classes. Elsewhere, we don't care
+ * about parameterization, so wildcard or drop it (see {@link #getHelper}).
+ * <p>
+ * Implementation classes are expected to be inner classes, so that they
+ * have access to configuration information (such as formatting rules).
+ * <p>
+ * Implementation classes are permitted to throw any exception; caller is
+ * expected to catch them and translate to a {@link ConversionException}.
+ */
+ private static interface ConversionHandler<T>
+ {
+ public String getXsiType();
+ public String stringify(T obj) throws Exception;
+ public T parse(String str) throws Exception;
+ }
+
+
+ private class StringConversionHandler
+ implements ConversionHandler<String>
+ {
+ public String getXsiType()
+ {
+ return "xsd:string";
+ }
+
+ public String stringify(String obj)
+ {
+ return String.valueOf(obj);
+ }
+
+ public String parse(String str)
+ {
+ return str;
+ }
+ }
+
+
+ private class CharacterConversionHandler
+ implements ConversionHandler<Character>
+ {
+ private final Character NUL = Character.valueOf('\0');
+
+ public String getXsiType()
+ {
+ return "xsd:string";
+ }
+
+ public String stringify(Character obj)
+ {
+ if (obj.equals(NUL))
+ return "";
+ return obj.toString();
+ }
+
+ public Character parse(String str)
+ {
+ if (str.length() == 0)
+ return NUL;
+ if (str.length() > 1)
+ throw new ConversionException(
+ "attempted to convert multi-character string: \"" + str + "\"");
+ return Character.valueOf(str.charAt(0));
+ }
+ }
+
+
+ private class BooleanConversionHandler
+ implements ConversionHandler<Boolean>
+ {
+ public String getXsiType()
+ {
+ return "xsd:boolean";
+ }
+
+ public String stringify(Boolean obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdBoolean(obj.booleanValue())
+ : obj.toString();
+ }
+
+ public Boolean parse(String str)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.parseXsdBoolean(str)
+ : Boolean.parseBoolean(str);
+ }
+ }
+
+
+ private class ByteConversionHandler
+ implements ConversionHandler<Byte>
+ {
+ public String getXsiType()
+ {
+ return "xsd:byte";
+ }
+
+ public String stringify(Byte obj)
+ {
+ return obj.toString();
+ }
+
+ public Byte parse(String str)
+ {
+ return Byte.valueOf(str.trim());
+ }
+ }
+
+
+ private class ShortConversionHandler
+ implements ConversionHandler<Short>
+ {
+ public String getXsiType()
+ {
+ return "xsd:short";
+ }
+
+ public String stringify(Short obj)
+ {
+ return obj.toString();
+ }
+
+ public Short parse(String str)
+ {
+ return Short.valueOf(str.trim());
+ }
+ }
+
+
+ private class IntegerConversionHandler
+ implements ConversionHandler<Integer>
+ {
+ public String getXsiType()
+ {
+ return "xsd:int";
+ }
+
+ public String stringify(Integer obj)
+ {
+ return obj.toString();
+ }
+
+ public Integer parse(String str)
+ {
+ return Integer.valueOf(str.trim());
+ }
+ }
+
+
+ private class LongConversionHandler
+ implements ConversionHandler<Long>
+ {
+ public String getXsiType()
+ {
+ return "xsd:long";
+ }
+
+ public String stringify(Long obj)
+ {
+ return obj.toString();
+ }
+
+ public Long parse(String str)
+ {
+ return Long.valueOf(str.trim());
+ }
+ }
+
+
+ private class FloatConversionHandler
+ implements ConversionHandler<Float>
+ {
+ public String getXsiType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(Float obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDecimal(obj)
+ : obj.toString();
+ }
+
+ public Float parse(String str)
+ {
+ return Float.valueOf(str.trim());
+ }
+ }
+
+
+ private class DoubleConversionHandler
+ implements ConversionHandler<Double>
+ {
+ public String getXsiType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(Double obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDecimal(obj)
+ : obj.toString();
+ }
+
+ public Double parse(String str)
+ {
+ return Double.valueOf(str.trim());
+ }
+ }
+
+
+ private class BigIntegerConversionHandler
+ implements ConversionHandler<BigInteger>
+ {
+ public String getXsiType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(BigInteger obj)
+ {
+ return obj.toString();
+ }
+
+ public BigInteger parse(String str)
+ {
+ return new BigInteger(str.trim());
+ }
+ }
+
+
+ private class BigDecimalConversionHandler
+ implements ConversionHandler<BigDecimal>
+ {
+ public String getXsiType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(BigDecimal obj)
+ {
+ return obj.toString();
+ }
+
+ public BigDecimal parse(String str)
+ {
+ return new BigDecimal(str.trim());
+ }
+ }
+
+
+ private class DateConversionHandler
+ implements ConversionHandler<Date>
+ {
+ // format as specified by Date.toString() JavaDoc
+ private DateFormat _defaultFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
+
+ public String getXsiType()
+ {
+ return "xsd:dateTime";
+ }
+
+ public String stringify(Date obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDatetime(obj)
+ : obj.toString();
+ }
+
+ public Date parse(String str)
+ throws ParseException
+ {
+ if (_useXsdFormatting)
+ return XmlUtil.parseXsdDatetime(str);
+ else
+ {
+ synchronized (_defaultFormat)
+ {
+ return _defaultFormat.parse(str);
+ }
+ }
+ }
+ }
+}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestConversionHelper.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestConversionHelper.java 2009-08-18 18:52:26 UTC (rev 116)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestConversionHelper.java 2009-08-18 19:16:50 UTC (rev 117)
@@ -18,7 +18,7 @@
import java.math.BigInteger;
import java.util.Date;
-import net.sf.practicalxml.converter.internal.ConversionHelper;
+import net.sf.practicalxml.converter.internal.PrimitiveConversionHelper;
public class TestConversionHelper
@@ -36,7 +36,7 @@
private void assertFailsConversionToObject(
String message,
- ConversionHelper helper,
+ PrimitiveConversionHelper helper,
String str,
Class<?> klass)
{
@@ -58,7 +58,7 @@
public void testClassToXsdType() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:string", helper.getXsdType(String.class));
assertEquals("xsd:string", helper.getXsdType(Character.class));
@@ -72,7 +72,7 @@
public void testUnknownClass() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertNull(helper.getXsdType(Class.class));
}
@@ -80,7 +80,7 @@
public void testConvertNull() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertNull(helper.stringify(null));
assertNull(helper.parse(null, Object.class));
@@ -89,7 +89,7 @@
public void testConvertString() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:string", helper.getXsdType(String.class));
@@ -103,7 +103,7 @@
public void testConvertCharacter() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:string", helper.getXsdType(Character.class));
@@ -123,7 +123,7 @@
public void testConvertBooleanDefault() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
// default boolean conversion is compatible with XSD type def
assertEquals("xsd:boolean", helper.getXsdType(Boolean.class));
@@ -143,7 +143,7 @@
public void testConvertBooleanXsd() throws Exception
{
- ConversionHelper helper = new ConversionHelper(true);
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
assertEquals("xsd:boolean", helper.getXsdType(Boolean.class));
@@ -167,7 +167,7 @@
public void testConvertByte() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:byte", helper.getXsdType(Byte.class));
@@ -205,7 +205,7 @@
public void testConvertShort() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:short", helper.getXsdType(Short.class));
@@ -243,7 +243,7 @@
public void testConvertInteger() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:int", helper.getXsdType(Integer.class));
@@ -281,7 +281,7 @@
public void testConvertLong() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:long", helper.getXsdType(Long.class));
@@ -319,7 +319,7 @@
public void testConvertFloatDefault() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
// default float conversion is compatible with XSD type def
assertEquals("xsd:decimal", helper.getXsdType(Float.class));
@@ -351,7 +351,7 @@
public void testConvertFloatXsd() throws Exception
{
- ConversionHelper helper = new ConversionHelper(true);
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
assertEquals("xsd:decimal", helper.getXsdType(Float.class));
@@ -381,7 +381,7 @@
public void testConvertDoubleDefault() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
// default double conversion is compatible with XSD type def
assertEquals("xsd:decimal", helper.getXsdType(Double.class));
@@ -413,7 +413,7 @@
public void testConvertDoubleXsd() throws Exception
{
- ConversionHelper helper = new ConversionHelper(true);
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
assertEquals("xsd:decimal", helper.getXsdType(Double.class));
@@ -444,7 +444,7 @@
public void testConvertBigInteger() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:decimal", helper.getXsdType(BigInteger.class));
@@ -474,7 +474,7 @@
public void testConvertBigDecimal() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
assertEquals("xsd:decimal", helper.getXsdType(BigDecimal.class));
@@ -500,7 +500,7 @@
public void testConvertDateDefault() throws Exception
{
- ConversionHelper helper = new ConversionHelper();
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
// default date conversion is NOT compatible with XSD type def,
// so this is misleading
@@ -525,7 +525,7 @@
public void testConvertDateXsd() throws Exception
{
- ConversionHelper helper = new ConversionHelper(true);
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
assertEquals("xsd:dateTime", helper.getXsdType(Date.class));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|