From b0ec648fc6aec16e1394e69d434ed406bdbcbd62 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Sat, 5 Jul 2008 22:08:30 +0000 Subject: [PATCH] IN PROGRESS - issue SWF-720: Multiple checkboxes to Collection mapping http://jira.springframework.org/browse/SWF-720 --- ...FacesFlowBuilderServicesBeanDefinitionParserTests.java | 5 +++++ .../engine/builder/support/FlowBuilderContextImpl.java | 5 +++++ .../springframework/webflow/mvc/view/AbstractMvcView.java | 1 - .../springframework/webflow/mvc/view/BindingModel.java | 8 ++++++++ .../FlowBuilderServicesBeanDefinitionParserTests.java | 5 +++++ 5 files changed, 23 insertions(+), 1 deletion(-) 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 a6037145..ae443de9 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 @@ -2,6 +2,7 @@ package org.springframework.faces.config; import junit.framework.TestCase; +import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; @@ -71,6 +72,10 @@ public class FacesFlowBuilderServicesBeanDefinitionParserTests extends TestCase public static class TestConversionService implements ConversionService { + public Object executeConversion(Object source, Class targetClass) throws ConversionException { + throw new UnsupportedOperationException("Auto-generated method stub"); + } + public ConversionExecutor getConversionExecutor(Class sourceClass, Class targetClass) throws ConversionExecutionException { throw new UnsupportedOperationException("Auto-generated method stub"); 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 15fbb1e2..b2e1833b 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 @@ -15,6 +15,7 @@ */ package org.springframework.webflow.engine.builder.support; +import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; @@ -119,6 +120,10 @@ public class FlowBuilderContextImpl implements FlowBuilderContext { * A little proxy that refreshes the externally configured conversion service reference on each invocation. */ private class ParentConversionServiceProxy implements ConversionService { + public Object executeConversion(Object source, Class targetClass) throws ConversionException { + return getFlowBuilderServices().getConversionService().executeConversion(source, targetClass); + } + public ConversionExecutor getConversionExecutor(Class sourceClass, Class targetClass) throws ConversionExecutionException { return getFlowBuilderServices().getConversionService().getConversionExecutor(sourceClass, targetClass); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/AbstractMvcView.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/AbstractMvcView.java index e03072fc..8041e298 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/AbstractMvcView.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/AbstractMvcView.java @@ -274,7 +274,6 @@ public abstract class AbstractMvcView implements View { logger.debug("Setting up view->model mappings"); } DefaultMapper mapper = new DefaultMapper(); - mapper.setConversionService(conversionService); ParameterMap requestParameters = requestContext.getRequestParameters(); addDefaultMappings(mapper, requestParameters.asMap().keySet(), model); return mapper.map(requestParameters, model); diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/BindingModel.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/BindingModel.java index 04c5299b..0f01d7b5 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/BindingModel.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/BindingModel.java @@ -16,8 +16,10 @@ package org.springframework.webflow.mvc.view; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; @@ -142,6 +144,12 @@ public class BindingModel extends AbstractErrors { private ConversionExecutor getConverter(Expression fieldExpression) { if (conversionService != null) { Class valueType = fieldExpression.getValueType(boundObject); + // TODO -- this really is not accurate for Collection or Array or Map types + // This needs to be cleaned up + if (valueType.isArray() || Collection.class.isAssignableFrom(valueType) + || Map.class.isAssignableFrom(valueType)) { + return null; + } return conversionService.getConversionExecutor(valueType, String.class); } else { return null; 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 8b017c9b..c483e976 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 @@ -2,6 +2,7 @@ package org.springframework.webflow.config; import junit.framework.TestCase; +import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; @@ -54,6 +55,10 @@ public class FlowBuilderServicesBeanDefinitionParserTests extends TestCase { public static class TestConversionService implements ConversionService { + public Object executeConversion(Object source, Class targetClass) throws ConversionException { + throw new UnsupportedOperationException("Auto-generated method stub"); + } + public ConversionExecutor getConversionExecutor(Class sourceClass, Class targetClass) throws ConversionExecutionException { throw new UnsupportedOperationException("Auto-generated method stub");