1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.plugins.guice;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Set;
24
25 import org.seasar.cubby.controller.FormatPattern;
26 import org.seasar.cubby.controller.MessagesBehaviour;
27 import org.seasar.cubby.controller.RequestParser;
28 import org.seasar.cubby.controller.impl.DefaultFormatPattern;
29 import org.seasar.cubby.controller.impl.DefaultMessagesBehaviour;
30 import org.seasar.cubby.controller.impl.DefaultRequestParser;
31 import org.seasar.cubby.controller.impl.MultipartRequestParser;
32 import org.seasar.cubby.converter.Converter;
33 import org.seasar.cubby.converter.impl.BigDecimalConverter;
34 import org.seasar.cubby.converter.impl.BigIntegerConverter;
35 import org.seasar.cubby.converter.impl.BooleanConverter;
36 import org.seasar.cubby.converter.impl.ByteArrayFileItemConverter;
37 import org.seasar.cubby.converter.impl.ByteConverter;
38 import org.seasar.cubby.converter.impl.CharacterConverter;
39 import org.seasar.cubby.converter.impl.DateConverter;
40 import org.seasar.cubby.converter.impl.DoubleConverter;
41 import org.seasar.cubby.converter.impl.EnumConverter;
42 import org.seasar.cubby.converter.impl.FloatConverter;
43 import org.seasar.cubby.converter.impl.InputStreamFileItemConverter;
44 import org.seasar.cubby.converter.impl.IntegerConverter;
45 import org.seasar.cubby.converter.impl.LongConverter;
46 import org.seasar.cubby.converter.impl.ShortConverter;
47 import org.seasar.cubby.converter.impl.SqlDateConverter;
48 import org.seasar.cubby.converter.impl.SqlTimeConverter;
49 import org.seasar.cubby.converter.impl.SqlTimestampConverter;
50 import org.seasar.cubby.plugins.guice.spi.GuiceContainerProvider;
51 import org.seasar.cubby.plugins.guice.spi.GuiceConverterProvider;
52 import org.seasar.cubby.plugins.guice.spi.GuicePathResolverProvider;
53 import org.seasar.cubby.plugins.guice.spi.GuiceRequestParserProvider;
54 import org.seasar.cubby.routing.PathResolver;
55 import org.seasar.cubby.spi.BeanDescProvider;
56 import org.seasar.cubby.spi.ContainerProvider;
57 import org.seasar.cubby.spi.ConverterProvider;
58 import org.seasar.cubby.spi.PathResolverProvider;
59 import org.seasar.cubby.spi.RequestParserProvider;
60 import org.seasar.cubby.spi.beans.impl.DefaultBeanDescProvider;
61
62 import com.google.inject.AbstractModule;
63 import com.google.inject.Inject;
64 import com.google.inject.Injector;
65 import com.google.inject.Module;
66 import com.google.inject.Provider;
67 import com.google.inject.Singleton;
68 import com.google.inject.TypeLiteral;
69
70
71
72
73
74
75 public abstract class AbstractCubbyModule extends AbstractModule {
76
77
78
79
80 @Override
81 public void configure() {
82
83 bind(ContainerProvider.class).to(GuiceContainerProvider.class).in(
84 Singleton.class);
85
86
87 bind(BeanDescProvider.class).to(DefaultBeanDescProvider.class).in(
88 Singleton.class);
89
90
91 bind(new TypeLiteral<Collection<RequestParser>>() {
92 }).toProvider(new Provider<Collection<RequestParser>>() {
93
94 @Inject
95 public Injector injector;
96
97 public Collection<RequestParser> get() {
98 return createRequestParsers(injector);
99 }
100
101 }).in(Singleton.class);
102 bind(RequestParserProvider.class).to(GuiceRequestParserProvider.class)
103 .in(Singleton.class);
104
105
106 bind(new TypeLiteral<Collection<Converter>>() {
107 }).toProvider(new Provider<Collection<Converter>>() {
108
109 @Inject
110 public Injector injector;
111
112 public Collection<Converter> get() {
113 return createConverters(injector);
114 }
115
116 }).in(Singleton.class);
117 bind(ConverterProvider.class).to(GuiceConverterProvider.class).in(
118 Singleton.class);
119
120
121 bind(PathResolver.class).toInstance(getPathResolver());
122 bind(PathResolverProvider.class).to(GuicePathResolverProvider.class)
123 .in(Singleton.class);
124
125 configureMessagesBehaviour();
126 configureFormatPattern();
127 }
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 protected Collection<RequestParser> createRequestParsers(
152 final Injector injector) {
153 final List<RequestParser> requestParsers = new ArrayList<RequestParser>();
154 requestParsers.add(injector.getInstance(MultipartRequestParser.class));
155 requestParsers.add(injector.getInstance(DefaultRequestParser.class));
156 return Collections.unmodifiableCollection(requestParsers);
157 }
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188 protected Collection<Converter> createConverters(final Injector injector) {
189 final Set<Converter> converters = new HashSet<Converter>();
190 converters.add(injector.getInstance(BigDecimalConverter.class));
191 converters.add(injector.getInstance(BigIntegerConverter.class));
192 converters.add(injector.getInstance(BooleanConverter.class));
193 converters.add(injector.getInstance(ByteArrayFileItemConverter.class));
194 converters.add(injector.getInstance(ByteConverter.class));
195 converters.add(injector.getInstance(CharacterConverter.class));
196 converters.add(injector.getInstance(DateConverter.class));
197 converters.add(injector.getInstance(DoubleConverter.class));
198 converters.add(injector.getInstance(EnumConverter.class));
199 converters.add(injector.getInstance(FloatConverter.class));
200 converters
201 .add(injector.getInstance(InputStreamFileItemConverter.class));
202 converters.add(injector.getInstance(IntegerConverter.class));
203 converters.add(injector.getInstance(LongConverter.class));
204 converters.add(injector.getInstance(ShortConverter.class));
205 converters.add(injector.getInstance(SqlDateConverter.class));
206 converters.add(injector.getInstance(SqlTimeConverter.class));
207 converters.add(injector.getInstance(SqlTimestampConverter.class));
208 return Collections.unmodifiableCollection(converters);
209 }
210
211
212
213
214
215
216
217
218
219 protected abstract PathResolver getPathResolver();
220
221
222
223
224
225
226
227 protected void configureMessagesBehaviour() {
228 bind(MessagesBehaviour.class).to(DefaultMessagesBehaviour.class).in(
229 Singleton.class);
230 }
231
232
233
234
235
236
237
238 protected void configureFormatPattern() {
239 bind(FormatPattern.class).to(DefaultFormatPattern.class).in(
240 Singleton.class);
241 }
242
243 }