1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.dxo.impl;
17
18 import java.lang.reflect.Array;
19 import java.lang.reflect.Method;
20 import java.util.LinkedHashMap;
21 import java.util.Map;
22 import java.util.Map.Entry;
23
24 import org.seasar.extension.dxo.annotation.AnnotationReader;
25 import org.seasar.extension.dxo.command.impl.BeanToMapDxoCommand;
26 import org.seasar.extension.dxo.converter.ConversionContext;
27 import org.seasar.extension.dxo.converter.Converter;
28 import org.seasar.extension.dxo.converter.ConverterFactory;
29
30
31
32
33
34
35
36 class BeanToStringArrayMapDxoCommand extends BeanToMapDxoCommand {
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 @SuppressWarnings("unchecked")
53 public BeanToStringArrayMapDxoCommand(final Class dxoClass,
54 final Method method, final ConverterFactory converterFactory,
55 final AnnotationReader annotationReader, final String expression) {
56 super(dxoClass, method, converterFactory, annotationReader, expression);
57 valueType = String[].class;
58 }
59
60 @Override
61 @SuppressWarnings("unchecked")
62 protected Map convertValueType(final Map from,
63 final ConversionContext context) {
64 final Map<String, String[]> to = new LinkedHashMap<String, String[]>();
65 for (final Entry<String, Object> entry : castToObjectMap(from)
66 .entrySet()) {
67 final String key = entry.getKey();
68 final Object value = entry.getValue();
69 if (value == null || value instanceof String[]) {
70 to.put(key, (String[]) value);
71 } else {
72 if (value.getClass().isArray()) {
73 final Converter converter = converterFactory.getConverter(
74 value.getClass(), String[].class);
75 final String[] convertedValue = (String[]) converter
76 .convert(value, String[].class, context);
77 to.put(key, convertedValue);
78 } else {
79 final Converter converter = converterFactory.getConverter(
80 value.getClass(), String.class);
81 final String[] array = (String[]) Array.newInstance(
82 String.class, 1);
83 Array.set(array, 0, converter.convert(value, String.class,
84 context));
85 to.put(key, array);
86 }
87 }
88 }
89 return to;
90 }
91
92 @SuppressWarnings("unchecked")
93 private Map<String, Object> castToObjectMap(final Map from) {
94 return from;
95 }
96
97 }