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 class BeanToStringArrayMapDxoCommand extends BeanToMapDxoCommand {
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 @SuppressWarnings("unchecked")
52 public BeanToStringArrayMapDxoCommand(final Class dxoClass,
53 final Method method, final ConverterFactory converterFactory,
54 final AnnotationReader annotationReader, final String expression) {
55 super(dxoClass, method, converterFactory, annotationReader, expression);
56 valueType = String[].class;
57 }
58
59 @Override
60 @SuppressWarnings("unchecked")
61 protected Map convertValueType(final Map from,
62 final ConversionContext context) {
63 final Map<String, String[]> to = new LinkedHashMap<String, String[]>();
64 for (final Entry<String, Object> entry : castToObjectMap(from)
65 .entrySet()) {
66 final String key = entry.getKey();
67 final Object value = entry.getValue();
68 if (value == null || value instanceof String[]) {
69 to.put(key, (String[]) value);
70 } else {
71 if (value.getClass().isArray()) {
72 final Converter converter = converterFactory.getConverter(
73 value.getClass(), String[].class);
74 final String[] convertedValue = (String[]) converter
75 .convert(value, String[].class, context);
76 to.put(key, convertedValue);
77 } else {
78 final Converter converter = converterFactory.getConverter(
79 value.getClass(), String.class);
80 final String[] array = (String[]) Array.newInstance(
81 String.class, 1);
82 Array.set(array, 0, converter.convert(value, String.class,
83 context));
84 to.put(key, array);
85 }
86 }
87 }
88 return to;
89 }
90
91 @SuppressWarnings("unchecked")
92 private Map<String, Object> castToObjectMap(final Map from) {
93 return from;
94 }
95
96 }