From 2962d438be1a3e3d1035e568f6426d17c3dba5e1 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 30 Jun 2008 23:05:40 +0000 Subject: [PATCH] IN PROGRESS - issue SWF-720: Multiple checkboxes to Collection mapping http://jira.springframework.org/browse/SWF-720 --- .../binding/convert/ConversionService.java | 9 +++--- .../converters/PropertyEditorConverter.java | 28 +++++++++++++++++++ .../service/GenericConversionService.java | 14 ++-------- ...lderServicesBeanDefinitionParserTests.java | 2 +- .../faces/ui/DojoDecorationRendererTests.java | 1 - .../config/FlowExecutorFactoryBean.java | 2 +- .../config/FlowRegistryFactoryBean.java | 2 +- .../builder/model/FlowModelFlowBuilder.java | 2 +- .../support/FlowBuilderContextImpl.java | 4 +-- ...lderServicesBeanDefinitionParserTests.java | 2 +- 10 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 spring-binding/src/main/java/org/springframework/binding/convert/converters/PropertyEditorConverter.java diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java index 0a1adb64..e6f171ef 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionService.java @@ -40,11 +40,10 @@ public interface ConversionService { throws ConversionExecutorNotFoundException; /** - * Lookup a class by its fully qualified name or alias. As an example, for Long.class the fully qualified class name - * is java.lang.Long and the alias is long. - * @param name the fully qualified class name or alias - * @return the class + * Lookup a class by it alias. For example, long for java.lang.Long + * @param alias the class alias + * @return the class, or null if no alias exists */ - public Class getClassByName(String name); + public Class getClassForAlias(String alias); } \ No newline at end of file diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/converters/PropertyEditorConverter.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/PropertyEditorConverter.java new file mode 100644 index 00000000..43424695 --- /dev/null +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/PropertyEditorConverter.java @@ -0,0 +1,28 @@ +package org.springframework.binding.convert.converters; + +import java.beans.PropertyEditor; + +public class PropertyEditorConverter extends StringToObject { + + private PropertyEditor propertyEditor; + + public PropertyEditorConverter(PropertyEditor propertyEditor, Class targetClass) { + super(targetClass); + this.propertyEditor = propertyEditor; + } + + protected Object toObject(String string, Class targetClass) throws Exception { + synchronized (propertyEditor) { + propertyEditor.setAsText(string); + return propertyEditor.getValue(); + } + } + + protected String toString(Object object) throws Exception { + synchronized (propertyEditor) { + propertyEditor.setValue(object); + return propertyEditor.getAsText(); + } + } + +} diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java index cd5a88ef..96e5c676 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java @@ -32,7 +32,6 @@ import org.springframework.binding.convert.converters.ObjectToArray; import org.springframework.binding.convert.converters.ReverseConverter; import org.springframework.binding.convert.converters.TwoWayConverter; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; /** * Base implementation of a conversion service. Initially empty, e.g. no converters are registered by default. @@ -160,22 +159,15 @@ public class GenericConversionService implements ConversionService { } } - public Class getClassByName(String name) throws IllegalArgumentException { + public Class getClassForAlias(String name) throws IllegalArgumentException { Class clazz = (Class) aliasMap.get(name); if (clazz != null) { return clazz; } else { if (parent != null) { - return parent.getClassByName(name); + return parent.getClassForAlias(name); } else { - try { - return ClassUtils.forName(name); - } catch (ClassNotFoundException e) { - IllegalArgumentException iae = new IllegalArgumentException( - "No Class alias or instance found with name '" + name + "' in this ConversionService"); - iae.initCause(e); - throw iae; - } + return null; } } } diff --git a/spring-faces/src/test/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParserTests.java b/spring-faces/src/test/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParserTests.java index 9de063f0..d7f30c90 100644 --- a/spring-faces/src/test/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParserTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/config/FacesFlowBuilderServicesBeanDefinitionParserTests.java @@ -76,7 +76,7 @@ public class FacesFlowBuilderServicesBeanDefinitionParserTests extends TestCase throw new UnsupportedOperationException("Auto-generated method stub"); } - public Class getClassByName(String name) throws ConversionExecutionException { + public Class getClassForAlias(String name) throws ConversionExecutionException { throw new UnsupportedOperationException("Auto-generated method stub"); } } diff --git a/spring-faces/src/test/java/org/springframework/faces/ui/DojoDecorationRendererTests.java b/spring-faces/src/test/java/org/springframework/faces/ui/DojoDecorationRendererTests.java index a63986fd..52d316a1 100644 --- a/spring-faces/src/test/java/org/springframework/faces/ui/DojoDecorationRendererTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/ui/DojoDecorationRendererTests.java @@ -44,7 +44,6 @@ public class DojoDecorationRendererTests extends TestCase { UIInput childComponent = new UIInput(); childComponent.setValue(new TestValue()); DojoDecorationRenderer renderer = new DojoDecorationRenderer(); - try { renderer.getValueAsString(jsf.facesContext(), childComponent); fail("getValueAsString should throw exception if no converter is found"); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java index df5682c7..3a4de595 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java @@ -219,6 +219,6 @@ class FlowExecutorFactoryBean implements FactoryBean, ApplicationContextAware, I } private Class fromStringToClass(String name) { - return conversionService.getClassByName(name); + return conversionService.getClassForAlias(name); } } \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowRegistryFactoryBean.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowRegistryFactoryBean.java index c4097f08..b03f4fde 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowRegistryFactoryBean.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowRegistryFactoryBean.java @@ -237,7 +237,7 @@ class FlowRegistryFactoryBean implements FactoryBean, InitializingBean { } private Class fromStringToClass(String type) { - return flowBuilderServices.getConversionService().getClassByName(type); + return flowBuilderServices.getConversionService().getClassForAlias(type); } private FlowDefinition buildFlowDefinition(FlowBuilderInfo builderInfo) { diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java index e164acbf..d8130b45 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java @@ -910,7 +910,7 @@ public class FlowModelFlowBuilder extends AbstractFlowBuilder { } private Class toClass(String name) { - return getLocalContext().getConversionService().getClassByName(name); + return getLocalContext().getConversionService().getClassForAlias(name); } private static class FlowRelativeResourceLoader implements ResourceLoader { diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java index 0dc3d209..aef036f1 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java @@ -124,8 +124,8 @@ public class FlowBuilderContextImpl implements FlowBuilderContext { return getFlowBuilderServices().getConversionService().getConversionExecutor(sourceClass, targetClass); } - public Class getClassByName(String name) { - return getFlowBuilderServices().getConversionService().getClassByName(name); + public Class getClassForAlias(String name) { + return getFlowBuilderServices().getConversionService().getClassForAlias(name); } } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java b/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java index 904bbb02..48315a78 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java @@ -59,7 +59,7 @@ public class FlowBuilderServicesBeanDefinitionParserTests extends TestCase { throw new UnsupportedOperationException("Auto-generated method stub"); } - public Class getClassByName(String alias) throws ConversionExecutionException { + public Class getClassForAlias(String alias) throws ConversionExecutionException { throw new UnsupportedOperationException("Auto-generated method stub"); }