diff --git a/spring-binding/src/main/java/org/springframework/binding/format/factories/BooleanFormatterFactory.java b/spring-binding/src/main/java/org/springframework/binding/format/factories/BooleanFormatterFactory.java new file mode 100644 index 00000000..b4f77605 --- /dev/null +++ b/spring-binding/src/main/java/org/springframework/binding/format/factories/BooleanFormatterFactory.java @@ -0,0 +1,49 @@ +package org.springframework.binding.format.factories; + +import org.springframework.binding.format.Formatter; +import org.springframework.binding.format.FormatterFactory; +import org.springframework.binding.format.FormatterFactoryContext; +import org.springframework.binding.format.InvalidFormatException; +import org.springframework.util.StringUtils; + +public class BooleanFormatterFactory implements FormatterFactory { + + public Class getFormattedClass() { + return Boolean.class; + } + + public Formatter createFormatter(FormatterFactoryContext context) { + return new BooleanFormatter(); + } + + public static class BooleanFormatter implements Formatter { + + public String formatValue(Object value) throws IllegalArgumentException { + if (value == null) { + return ""; + } + if (Boolean.TRUE.equals(value)) { + return "true"; + } else if (Boolean.FALSE.equals(value)) { + return "false"; + } else { + throw new IllegalArgumentException("Must be a Boolean " + value); + } + } + + public Object parseValue(String formattedString) throws InvalidFormatException { + formattedString = (formattedString != null ? formattedString.trim() : null); + if (!StringUtils.hasText(formattedString)) { + return null; + } + if (formattedString.equals("true")) { + return Boolean.TRUE; + } else if (formattedString.equals("false")) { + return Boolean.FALSE; + } else { + throw new InvalidFormatException(formattedString, "true | false"); + } + } + } + +} diff --git a/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java b/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java index 192146e4..dd90bbd0 100644 --- a/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java +++ b/spring-faces/src/main/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParser.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.binding.expression.el.DefaultExpressionFactoryUtils; import org.springframework.binding.format.FormatterRegistry; +import org.springframework.binding.format.factories.BooleanFormatterFactory; import org.springframework.binding.format.factories.DateFormatterFactory; import org.springframework.binding.format.factories.NumberFormatterFactory; import org.springframework.binding.format.impl.FormatterRegistryImpl; @@ -122,6 +123,7 @@ public class FacesFlowBuilderServicesBeanDefinitionParser extends AbstractSingle FormatterRegistryImpl registry = new FormatterRegistryImpl(); registry.registerFormatter(new NumberFormatterFactory()); registry.registerFormatter(new DateFormatterFactory()); + registry.registerFormatter(new BooleanFormatterFactory()); return registry; } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java index 5e56928f..9f0099b0 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.binding.convert.support.DefaultConversionService; import org.springframework.binding.format.FormatterRegistry; +import org.springframework.binding.format.factories.BooleanFormatterFactory; import org.springframework.binding.format.factories.DateFormatterFactory; import org.springframework.binding.format.factories.NumberFormatterFactory; import org.springframework.binding.format.impl.FormatterRegistryImpl; @@ -116,6 +117,7 @@ class FlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefiniti FormatterRegistryImpl registry = new FormatterRegistryImpl(); registry.registerFormatter(new NumberFormatterFactory()); registry.registerFormatter(new DateFormatterFactory()); + registry.registerFormatter(new BooleanFormatterFactory()); return registry; }