1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.controller.impl;
17
18 import java.lang.reflect.Array;
19 import java.util.Collection;
20
21 import org.seasar.cubby.controller.FormWrapper;
22 import org.seasar.cubby.controller.FormWrapperFactory;
23 import org.seasar.cubby.converter.ConversionHelper;
24 import org.seasar.cubby.converter.Converter;
25 import org.seasar.cubby.converter.ConverterFactory;
26 import org.seasar.framework.beans.BeanDesc;
27 import org.seasar.framework.beans.PropertyDesc;
28 import org.seasar.framework.beans.factory.BeanDescFactory;
29
30
31
32
33
34
35
36 public class FormWrapperFactoryImpl implements FormWrapperFactory {
37
38
39 private ConverterFactory converterFactory;
40
41
42 private ConversionHelper conversionHelper;
43
44
45
46
47
48
49
50 public void setConverterFactory(final ConverterFactory converterFactory) {
51 this.converterFactory = converterFactory;
52 }
53
54
55
56
57
58
59
60 public void setConversionHelper(final ConversionHelper conversionHelper) {
61 this.conversionHelper = conversionHelper;
62 }
63
64
65
66
67 public FormWrapper create(final Object form) {
68 final FormWrapper formObject = new FormWrapperImpl(form);
69 return formObject;
70 }
71
72
73
74
75
76
77
78 private class FormWrapperImpl implements FormWrapper {
79
80
81 private final Object form;
82
83
84
85
86
87
88
89
90
91 private FormWrapperImpl(final Object form) {
92 this.form = form;
93 }
94
95
96
97
98 public String[] getValues(final String name) {
99 if (this.form == null) {
100 return null;
101 }
102 final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(this.form
103 .getClass());
104 if (!beanDesc.hasPropertyDesc(name)) {
105 return null;
106 }
107 final PropertyDesc propertyDesc = beanDesc.getPropertyDesc(name);
108 final Object value = propertyDesc.getValue(this.form);
109 if (value == null) {
110 return null;
111 } else if (value instanceof String[]) {
112 return (String[]) value;
113 } else {
114 if (value.getClass().isArray()) {
115 final int length = Array.getLength(value);
116 final String[] array = (String[]) Array.newInstance(
117 String.class, length);
118 for (int i = 0; i < length; i++) {
119 final Object element = Array.get(value, i);
120 final String converted = convert(element);
121 Array.set(array, i, converted);
122 }
123 return array;
124 } else if (value instanceof Collection) {
125 final Collection<?> collection = (Collection<?>) value;
126 final String[] array = (String[]) Array.newInstance(
127 String.class, collection.size());
128 int i = 0;
129 for (final Object element : collection) {
130 final String converted = convert(element);
131 Array.set(array, i++, converted);
132 }
133 return array;
134 } else {
135 final String[] array = (String[]) Array.newInstance(
136 String.class, 1);
137 final String converted = convert(value);
138 Array.set(array, 0, converted);
139 return array;
140 }
141 }
142 }
143
144
145
146
147
148
149
150
151 private String convert(final Object value) {
152 final Converter converter = converterFactory.getConverter(null,
153 value.getClass());
154 if (converter == null) {
155 return value.toString();
156 } else {
157 return converter.convertToString(value, conversionHelper);
158 }
159 }
160
161 }
162 }