[Practicalxml-commits] SF.net SVN: practicalxml:[84] trunk
Brought to you by:
kdgregory
From: Auto-Generated S. C. M. <pra...@li...> - 2009-07-14 14:06:16
|
Revision: 84 http://practicalxml.svn.sourceforge.net/practicalxml/?rev=84&view=rev Author: kdgregory Date: 2009-07-14 14:06:13 +0000 (Tue, 14 Jul 2009) Log Message: ----------- add XmlUtil.formatXsdDecimal() Modified Paths: -------------- trunk/pom.xml trunk/src/main/java/net/sf/practicalxml/XmlUtil.java trunk/src/test/java/net/sf/practicalxml/TestXmlUtil.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2009-07-14 12:26:58 UTC (rev 83) +++ trunk/pom.xml 2009-07-14 14:06:13 UTC (rev 84) @@ -5,7 +5,7 @@ <groupId>net.sf.practicalxml</groupId> <artifactId>practicalxml</artifactId> <packaging>jar</packaging> - <version>1.0.2</version> + <version>1.0.3</version> <name>practicalxml</name> <url>http://sourceforge.net/projects/practicalxml/</url> Modified: trunk/src/main/java/net/sf/practicalxml/XmlUtil.java =================================================================== --- trunk/src/main/java/net/sf/practicalxml/XmlUtil.java 2009-07-14 12:26:58 UTC (rev 83) +++ trunk/src/main/java/net/sf/practicalxml/XmlUtil.java 2009-07-14 14:06:13 UTC (rev 84) @@ -15,6 +15,7 @@ package net.sf.practicalxml; import java.text.DateFormat; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @@ -99,6 +100,31 @@ /** + * Converts a Java <code>double</code> to a string, using the format + * specified by XML Schema for <code>decimal</code> elements. This + * method wraps the value and calls {@link #formatXsdDecimal(Number)}, + * so call that method if you already have an object. + */ + public static String formatXsdDecimal(double value) + { + return formatXsdDecimal(Double.valueOf(value)); + } + + + /** + * Converts a Java <code>double</code> to a string, using the format + * specified by XML Schema for <code>decimal</code> elements. If + * passed <code>null</code>, returns an empty string + */ + public static String formatXsdDecimal(Number value) + { + if (value == null) + return ""; + return getXsdDecimalFormatter().format(value); + } + + + /** * Parses an XML Schema <code>dateTime</code> object, accepting any of * the legal formats. Note that this method can also be used to parse * a generic ISO-8601 date. @@ -231,6 +257,9 @@ private static ThreadLocal<DateFormat> _xsdDatetimeFormatter = new ThreadLocal<DateFormat>(); + // used by getXsdDecimalFormatter() + private static ThreadLocal<DecimalFormat> _xsdDecimalFormatter = new ThreadLocal<DecimalFormat>(); + /** * Does the actual work of {@link isLegal(String)}. */ @@ -247,7 +276,8 @@ /** - * Returns a DateFormat that will output our standard XSD dateTime format. + * Returns a DateFormat that will output the standard XSD dateTime format. + * This is managed as a ThreadLocal because formatters are not threadsafe. */ private static DateFormat getXsdDatetimeFormatter() { @@ -263,6 +293,30 @@ /** + * Returns a DecimalFormat that will output the standard XSD decimalformat. + * This is managed as a ThreadLocal because formatters are not threadsafe. + * <p> + * Note: output is limited to 17 digits to the right of the decimal point, + * because we assume a <code>double</code> input. For that reason, while + * you can use this method for <code>BigDecimal</code> values, that class' + * <code>toString()</code> is a better choice. + * <p> + * Note 2: there is no corresponding parse method; <code>Double.parseDouble() + * </code> will do the job for you. + */ + private static DecimalFormat getXsdDecimalFormatter() + { + DecimalFormat format = _xsdDecimalFormatter.get(); + if (format == null) + { + format = new DecimalFormat("#0.0################;-#"); + _xsdDecimalFormatter.set(format); + } + return format; + } + + + /** * Used by {@link parseXsdDatetime} to process individual fields of the * dateTime string and store them into a calendar object. It expects to * be called with <code>index</code> pointing to the start of the field, Modified: trunk/src/test/java/net/sf/practicalxml/TestXmlUtil.java =================================================================== --- trunk/src/test/java/net/sf/practicalxml/TestXmlUtil.java 2009-07-14 12:26:58 UTC (rev 83) +++ trunk/src/test/java/net/sf/practicalxml/TestXmlUtil.java 2009-07-14 14:06:13 UTC (rev 84) @@ -77,6 +77,17 @@ } + public void testFormatXsdDecimal() throws Exception + { + assertEquals("", XmlUtil.formatXsdDecimal(null)); + assertEquals("0.0", XmlUtil.formatXsdDecimal(0)); + assertEquals("1234.0", XmlUtil.formatXsdDecimal(1234)); + assertEquals("-1234.0", XmlUtil.formatXsdDecimal(-1234)); + assertEquals("1234.5", XmlUtil.formatXsdDecimal(1234.5)); + assertEquals("1234567890.123456", XmlUtil.formatXsdDecimal(1234567890.123456)); + } + + public void testEscape() throws Exception { assertEquals("", XmlUtil.escape(null)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |