From c519f2bd3aa5e924dfc9dde8c54ecca4db2eb7e3 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Fri, 10 Jul 2009 23:42:39 +0000 Subject: [PATCH] string to map --- .../binding/support/GenericBinderTests.java | 1 - .../convert/support/GenericTypeConverter.java | 6 +++- .../convert/support/StringArrayToMap.java | 6 ---- .../core/convert/support/StringToMap.java | 36 +++++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToMap.java diff --git a/org.springframework.context/src/test/java/org/springframework/ui/binding/support/GenericBinderTests.java b/org.springframework.context/src/test/java/org/springframework/ui/binding/support/GenericBinderTests.java index 65685ec31eb..2392d2725af 100644 --- a/org.springframework.context/src/test/java/org/springframework/ui/binding/support/GenericBinderTests.java +++ b/org.springframework.context/src/test/java/org/springframework/ui/binding/support/GenericBinderTests.java @@ -372,7 +372,6 @@ public class GenericBinderTests { } @Test - @Ignore public void bindToMapSingleString() { binder.addBinding("favoriteFoodsByGroup"); Map values = new LinkedHashMap(); diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericTypeConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericTypeConverter.java index d6d8a011d0b..a9aa8082d63 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericTypeConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericTypeConverter.java @@ -220,7 +220,11 @@ public class GenericTypeConverter implements TypeConverter, ConverterRegistry { } if (targetType.isMap()) { // object to map - return null; + if (sourceType.getType().equals(String.class)) { + return new StringToMap(sourceType, targetType, this); + } else { + return null; + } } if (sourceType.isAssignableTo(targetType)) { return NoOpConversionExecutor.INSTANCE; diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringArrayToMap.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringArrayToMap.java index 5704c75fb6f..d1fada0931d 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringArrayToMap.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringArrayToMap.java @@ -34,12 +34,6 @@ class StringArrayToMap implements ConversionExecutor { private EntryConverter entryConverter; - /** - * Creates a new map-to-map converter - * @param sourceType the source map type - * @param targetType the target map type - * @param conversionService the conversion service - */ public StringArrayToMap(TypeDescriptor sourceType, TypeDescriptor targetType, GenericTypeConverter conversionService) { this.sourceType = sourceType; this.targetType = targetType; diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToMap.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToMap.java new file mode 100644 index 00000000000..e07eadf2b7f --- /dev/null +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/StringToMap.java @@ -0,0 +1,36 @@ +/* + * Copyright 2004-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.core.convert.support; + +import org.springframework.core.convert.ConversionFailedException; +import org.springframework.core.convert.TypeDescriptor; + +@SuppressWarnings("unchecked") +class StringToMap implements ConversionExecutor { + + private StringArrayToMap converter; + + public StringToMap(TypeDescriptor sourceType, TypeDescriptor targetType, GenericTypeConverter conversionService) { + converter = new StringArrayToMap(sourceType, targetType, conversionService); + } + + public Object execute(Object source) throws ConversionFailedException { + String string = (String) source; + String[] entries = string.split(" "); + return converter.execute(entries); + } + +}