Keith Donald
15 years ago
7 changed files with 443 additions and 92 deletions
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
/* |
||||
* Copyright 2002-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 static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.lang.reflect.Array; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class ArrayToStringGenericConverter implements GenericConverter { |
||||
|
||||
private static final String DELIMITER = ","; |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public ArrayToStringGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
int length = Array.getLength(source); |
||||
if (length == 0) { |
||||
return ""; |
||||
} else { |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
if (sourceElementType.isAssignableTo(targetType)) { |
||||
StringBuilder string = new StringBuilder(); |
||||
for (int i = 0; i < length; i++) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
string.append(Array.get(source, i)); |
||||
} |
||||
return string.toString(); |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceElementType, targetType); |
||||
} |
||||
StringBuilder string = new StringBuilder(); |
||||
for (int i = 0; i < length; i++) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
Object sourceElement = Array.get(source, i); |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceElementType, targetType); |
||||
string.append(targetElement); |
||||
} |
||||
return string.toString(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,75 @@
@@ -0,0 +1,75 @@
|
||||
/* |
||||
* Copyright 2002-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 static org.springframework.core.convert.support.ConversionUtils.getElementType; |
||||
import static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.util.Collection; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
|
||||
final class CollectionToStringGenericConverter implements GenericConverter { |
||||
|
||||
private static final String DELIMITER = ","; |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public CollectionToStringGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
Collection sourceCollection = (Collection) source; |
||||
if (sourceCollection.size() == 0) { |
||||
return ""; |
||||
} else { |
||||
TypeDescriptor sourceElementType = sourceType.getElementTypeDescriptor(); |
||||
if (sourceElementType == TypeDescriptor.NULL) { |
||||
sourceElementType = getElementType(sourceCollection); |
||||
} |
||||
if (sourceElementType == TypeDescriptor.NULL || sourceElementType.isAssignableTo(targetType)) { |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object element : sourceCollection) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
string.append(element); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceElementType, targetType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceElementType, targetType); |
||||
} |
||||
StringBuilder string = new StringBuilder(); |
||||
int i = 0; |
||||
for (Object sourceElement : sourceCollection) { |
||||
if (i > 0) { |
||||
string.append(DELIMITER); |
||||
} |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceElementType, targetType); |
||||
string.append(targetElement); |
||||
i++; |
||||
} |
||||
return string.toString(); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
/* |
||||
* Copyright 2002-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 static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.lang.reflect.Array; |
||||
|
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
import org.springframework.util.StringUtils; |
||||
|
||||
final class StringToArrayGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public StringToArrayGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
String string = (String) source; |
||||
String[] fields = StringUtils.commaDelimitedListToStringArray(string); |
||||
TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); |
||||
if (sourceType.isAssignableTo(targetElementType)) { |
||||
return fields; |
||||
} else { |
||||
Object target = Array.newInstance(targetElementType.getType(), fields.length); |
||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceType, targetElementType); |
||||
} |
||||
for (int i = 0; i < fields.length; i++) { |
||||
Array.set(target, i, invokeConverter(converter, fields[i], sourceType, targetElementType)); |
||||
} |
||||
return target; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
/* |
||||
* Copyright 2002-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 static org.springframework.core.convert.support.ConversionUtils.invokeConverter; |
||||
|
||||
import java.util.Collection; |
||||
|
||||
import org.springframework.core.CollectionFactory; |
||||
import org.springframework.core.convert.ConverterNotFoundException; |
||||
import org.springframework.core.convert.TypeDescriptor; |
||||
import org.springframework.util.StringUtils; |
||||
|
||||
final class StringToCollectionGenericConverter implements GenericConverter { |
||||
|
||||
private final GenericConversionService conversionService; |
||||
|
||||
public StringToCollectionGenericConverter(GenericConversionService conversionService) { |
||||
this.conversionService = conversionService; |
||||
} |
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { |
||||
String string = (String) source; |
||||
String[] fields = StringUtils.commaDelimitedListToStringArray(string); |
||||
Collection target = CollectionFactory.createCollection(targetType.getType(), 1); |
||||
TypeDescriptor targetElementType = targetType.getElementTypeDescriptor(); |
||||
if (targetElementType == TypeDescriptor.NULL || sourceType.isAssignableTo(targetElementType)) { |
||||
for (int i = 0; i < fields.length; i++) { |
||||
target.add(fields[i]); |
||||
} |
||||
} else { |
||||
GenericConverter converter = this.conversionService.getConverter(sourceType, targetElementType); |
||||
if (converter == null) { |
||||
throw new ConverterNotFoundException(sourceType, targetElementType); |
||||
} |
||||
for (int i = 0; i < fields.length; i++) { |
||||
String sourceElement = fields[i]; |
||||
Object targetElement = invokeConverter(converter, sourceElement, sourceType, targetElementType); |
||||
target.add(targetElement); |
||||
} |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue