From a696d78bd18f53d614f98783d97b6824ade47d36 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Tue, 2 Jun 2009 22:29:27 +0000 Subject: [PATCH] polish --- .../springframework/ui/binding/Binder.java | 28 ++++++------- .../ui/binding/BindingConfiguration.java | 9 +---- .../ui/binding/BinderTests.java | 40 ++++++++++--------- 3 files changed, 35 insertions(+), 42 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java b/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java index cc4a9920017..158d6de3a2f 100644 --- a/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java +++ b/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java @@ -40,7 +40,7 @@ public class Binder { private TypeConverter typeConverter; - private boolean optimisticBinding = true; + private boolean strict = false; private static Formatter defaultFormatter = new Formatter() { @@ -75,6 +75,10 @@ public class Binder { expressionParser = new SpelExpressionParser(parserConfig); typeConverter = new DefaultTypeConverter(); } + + public void setStrict(boolean strict) { + this.strict = strict; + } public Binding add(BindingConfiguration binding) { Binding newBinding; @@ -91,12 +95,11 @@ public class Binder { if (propertyType == null) { propertyType = formatter.getFormattedObjectType(); } - typeFormatters.put(propertyType, formatter); - } - - public void addAnnotationBasedFormatter(Formatter formatter, - Class propertyAnnotationClass) { - annotationFormatters.put(propertyAnnotationClass, formatter); + if (propertyType.isAnnotation()) { + annotationFormatters.put(propertyType, formatter); + } else { + typeFormatters.put(propertyType, formatter); + } } public T getModel() { @@ -105,8 +108,8 @@ public class Binder { public Binding getBinding(String property) { Binding binding = bindings.get(property); - if (binding == null && optimisticBinding) { - return add(new BindingConfiguration(property, null, false)); + if (binding == null && !strict) { + return add(new BindingConfiguration(property, null)); } else { return binding; } @@ -133,13 +136,10 @@ public class Binder { private Formatter formatter; - private boolean required; - public BindingImpl(BindingConfiguration config) throws org.springframework.expression.ParseException { property = expressionParser.parseExpression(config.getProperty()); formatter = config.getFormatter(); - required = config.isRequired(); } public String getValue() { @@ -198,10 +198,6 @@ public class Binder { setValue(values); } - public boolean isRequired() { - return required; - } - public BindingFailures getFailures() { return null; } diff --git a/org.springframework.context/src/main/java/org/springframework/ui/binding/BindingConfiguration.java b/org.springframework.context/src/main/java/org/springframework/ui/binding/BindingConfiguration.java index c7a9a24f614..c6247de0627 100644 --- a/org.springframework.context/src/main/java/org/springframework/ui/binding/BindingConfiguration.java +++ b/org.springframework.context/src/main/java/org/springframework/ui/binding/BindingConfiguration.java @@ -8,12 +8,9 @@ public class BindingConfiguration { private Formatter formatter; - private boolean required; - - public BindingConfiguration(String property, Formatter formatter, boolean required) { + public BindingConfiguration(String property, Formatter formatter) { this.property = property; this.formatter = formatter; - this.required = required; } public String getProperty() { @@ -24,8 +21,4 @@ public class BindingConfiguration { return formatter; } - public boolean isRequired() { - return required; - } - } diff --git a/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java b/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java index bc77156f18a..b1bee3b9192 100644 --- a/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java +++ b/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java @@ -2,6 +2,7 @@ package org.springframework.ui.binding; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.lang.annotation.Retention; @@ -18,7 +19,6 @@ import junit.framework.Assert; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.ui.format.DateFormatter; @@ -63,7 +63,7 @@ public class BinderTests { @Test public void bindSingleValuePropertyFormatterParsing() throws ParseException { Binder binder = new Binder(new TestBean()); - binder.add(new BindingConfiguration("date", new DateFormatter(), false)); + binder.add(new BindingConfiguration("date", new DateFormatter())); Map propertyValues = new HashMap(); propertyValues.put("date", "2009-06-01"); binder.bind(propertyValues); @@ -74,7 +74,7 @@ public class BinderTests { @Test(expected=IllegalArgumentException.class) public void bindSingleValuePropertyFormatterParseException() { Binder binder = new Binder(new TestBean()); - binder.add(new BindingConfiguration("date", new DateFormatter(), false)); + binder.add(new BindingConfiguration("date", new DateFormatter())); Map propertyValues = new HashMap(); propertyValues.put("date", "bogus"); binder.bind(propertyValues); @@ -93,7 +93,7 @@ public class BinderTests { @Test public void bindSingleValueAnnotationFormatterParsing() throws ParseException { Binder binder = new Binder(new TestBean()); - binder.addAnnotationBasedFormatter(new CurrencyFormatter(), Currency.class); + binder.add(new CurrencyFormatter(), Currency.class); Map propertyValues = new HashMap(); propertyValues.put("currency", "$23.56"); binder.bind(propertyValues); @@ -110,10 +110,24 @@ public class BinderTests { assertEquals("5", b.getValue()); } + @Test + public void getBindingStrict() { + Binder binder = new Binder(new TestBean()); + binder.setStrict(true); + Binding b = binder.getBinding("integer"); + assertNull(b); + binder.add(new BindingConfiguration("integer", null)); + b = binder.getBinding("integer"); + assertFalse(b.isCollection()); + assertEquals("0", b.getValue()); + b.setValue("5"); + assertEquals("5", b.getValue()); + } + @Test public void getBindingCustomFormatter() { Binder binder = new Binder(new TestBean()); - binder.add(new BindingConfiguration("currency", new CurrencyFormatter(), false)); + binder.add(new BindingConfiguration("currency", new CurrencyFormatter())); Binding b = binder.getBinding("currency"); assertFalse(b.isCollection()); assertEquals("", b.getValue()); @@ -125,7 +139,7 @@ public class BinderTests { public void getBindingMultiValued() { Binder binder = new Binder(new TestBean()); Binding b = binder.getBinding("foos"); - // TODO should work - assertTrue(b.isCollection()); + assertTrue(b.isCollection()); assertEquals(0, b.getValues().length); b.setValues(new String[] { "BAR", "BAZ", "BOOP" }); assertEquals(FooEnum.BAR, binder.getModel().getFoos().get(0)); @@ -142,7 +156,7 @@ public class BinderTests { public void getBindingMultiValuedTypeConversionError() { Binder binder = new Binder(new TestBean()); Binding b = binder.getBinding("foos"); - // TODO should work -- assertTrue(b.isCollection()); + assertTrue(b.isCollection()); assertEquals(0, b.getValues().length); b.setValues(new String[] { "BAR", "BOGUS", "BOOP" }); } @@ -186,21 +200,11 @@ public class BinderTests { @Test public void formatPossibleValue() { Binder binder = new Binder(new TestBean()); - binder.add(new BindingConfiguration("currency", new CurrencyFormatter(), false)); + binder.add(new BindingConfiguration("currency", new CurrencyFormatter())); Binding b = binder.getBinding("currency"); assertEquals("$5.00", b.format(new BigDecimal("5"))); } - @Test - public void getBindingRequiredConstraint() { - Binder binder = new Binder(new TestBean()); - // TODO add constraint API - binder.add(new BindingConfiguration("string", null, true)); - Binding b = binder.getBinding("string"); - assertEquals("", b.getValue()); - b.setValue(""); - } - public static enum FooEnum { BAR, BAZ, BOOP; }