diff --git a/org.springframework.context/.classpath b/org.springframework.context/.classpath index 33ef53a0bc0..3dfd470a92d 100644 --- a/org.springframework.context/.classpath +++ b/org.springframework.context/.classpath @@ -36,5 +36,6 @@ + diff --git a/org.springframework.context/ivy.xml b/org.springframework.context/ivy.xml index 2d5a59eaa06..062ba96d1da 100644 --- a/org.springframework.context/ivy.xml +++ b/org.springframework.context/ivy.xml @@ -46,6 +46,7 @@ + diff --git a/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java b/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java new file mode 100644 index 00000000000..6a22b855e8f --- /dev/null +++ b/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java @@ -0,0 +1,56 @@ +/* + * Copyright 2002-2009 the original author or authors. + * + * 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 org.springframework.ui.format.jodatime; + +import java.text.ParseException; +import java.util.Locale; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.springframework.ui.format.Formatter; + +/** + * {@link Formatter} implementation to handle JodaTime {@link DateTime} instances. + * @author Oliver Gierke + */ +public class DateTimeFormatter implements Formatter { + + private org.joda.time.format.DateTimeFormatter formatter; + + /** + * Creates a new {@link DateTimeFormatter} for the given JodaTime formatting pattern. + * @param pattern + * @see DateTimeFormat + */ + public DateTimeFormatter(String pattern) { + this.formatter = DateTimeFormat.forPattern(pattern); + } + + /** + * Creates a new {@link DateTimeFormatter} for the given JodaTime formatter. + */ + public DateTimeFormatter(org.joda.time.format.DateTimeFormatter formatter) { + this.formatter = formatter; + } + + public String format(DateTime object, Locale locale) { + return null == object ? "" : object.toString(formatter); + } + + public DateTime parse(String formatted, Locale locale) throws ParseException { + return formatter.withLocale(locale).parseDateTime(formatted); + } +} diff --git a/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java b/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java new file mode 100644 index 00000000000..0973887cf4d --- /dev/null +++ b/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java @@ -0,0 +1,47 @@ +/* + * Copyright 2002-2009 the original author or authors. + * + * 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 org.springframework.ui.format.jodatime; + +import static org.junit.Assert.assertEquals; + +import java.text.ParseException; +import java.util.Locale; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.junit.Test; + +/** + * @author Keith Donald + */ +public class DateTimeFormatterTests { + + private DateTimeFormatter formatter = new DateTimeFormatter("yyyy-MM-dd"); + + @Test + public void formatValue() { + DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2009-06-01"); + assertEquals("2009-06-01", formatter.format(dateTime, Locale.US)); + } + + @Test + public void parseValue() throws ParseException { + DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2009-06-01"); + assertEquals(dateTime, formatter.parse("2009-06-01", Locale.US)); + } + +} diff --git a/org.springframework.context/template.mf b/org.springframework.context/template.mf index c51781e522b..42e04d527a3 100644 --- a/org.springframework.context/template.mf +++ b/org.springframework.context/template.mf @@ -29,6 +29,7 @@ Import-Template: org.apache.commons.logging.*;version="[1.1.1, 2.0.0)", org.aspectj.weaver.*;version="[1.5.4, 2.0.0)";resolution:=optional, org.codehaus.groovy.*;version="[1.5.0, 2.0.0)";resolution:=optional, + org.joda.*;version="[1.6.0, 2.0.0)";resolution:=optional, org.jruby.*;version="[1.1.0, 2.0.0)";resolution:=optional, org.omg.CORBA.*;version="0";resolution:=optional, org.springframework.aop.*;version="[3.0.0, 3.0.1)";resolution:=optional, diff --git a/spring-framework-reference/src/validation.xml b/spring-framework-reference/src/validation.xml index 703625eb5e1..4858d2025f8 100644 --- a/spring-framework-reference/src/validation.xml +++ b/spring-framework-reference/src/validation.xml @@ -962,6 +962,7 @@ public interface Formatter { Several Formatter implementations are provided in subpackages of ui.format as a convenience. The date package provides a DateFormatter to format java.util.Date objects with a java.text.DateFormat. The number package provides a DecimalFormatter, IntegerFormatter, CurrencyFormatter, and PercentFormatter to format java.lang.Number objects using a java.text.NumberFormat. + The jodatime package provides a DateTimeFormatter to format Joda DateTime objects, a popular alternative to java.util.Date/Calendar. Consider DateFormatter as an example Formatter implementation: @@ -1000,7 +1001,6 @@ public final class DateFormatter implements Formatter { }]]> The Spring team welcomes community-driven Formatter contributions; see http://jira.springframework.org to contribute. - In particular, the team hopes to integrate support for Joda Time and Money Formatters in the future.