Skip to content

Commit 77091b8

Browse files
author
Peter Georgantas
committed
Moved all configuration settings into multiSet
1 parent d0ea037 commit 77091b8

19 files changed

+412
-219
lines changed

src/main/java/org/mybatis/guice/MyBatisModule.java

+60-41
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@
1515
*/
1616
package org.mybatis.guice;
1717

18-
import com.google.inject.Scopes;
19-
import com.google.inject.TypeLiteral;
20-
import com.google.inject.multibindings.MapBinder;
21-
import com.google.inject.multibindings.Multibinder;
18+
import static com.google.inject.multibindings.MapBinder.newMapBinder;
19+
import static com.google.inject.multibindings.Multibinder.newSetBinder;
20+
import static com.google.inject.name.Names.named;
21+
import static com.google.inject.util.Providers.guicify;
22+
import static org.mybatis.guice.Preconditions.checkArgument;
23+
import static org.mybatis.guice.Preconditions.checkState;
24+
25+
import java.util.Collection;
26+
import java.util.Set;
27+
28+
import javax.inject.Provider;
29+
import javax.sql.DataSource;
2230

23-
import com.google.inject.util.Providers;
2431
import org.apache.ibatis.io.ResolverUtil;
2532
import org.apache.ibatis.mapping.DatabaseIdProvider;
2633
import org.apache.ibatis.mapping.Environment;
@@ -45,22 +52,31 @@
4552
import org.mybatis.guice.configuration.Mappers;
4653
import org.mybatis.guice.configuration.MappingTypeHandlers;
4754
import org.mybatis.guice.configuration.TypeAliases;
55+
import org.mybatis.guice.configuration.settings.AggressiveLazyLoadingConfigurationSetting;
56+
import org.mybatis.guice.configuration.settings.AutoMappingBehaviorConfigurationSetting;
57+
import org.mybatis.guice.configuration.settings.CacheEnabledConfigurationSetting;
58+
import org.mybatis.guice.configuration.settings.ConfigurationSetting;
59+
import org.mybatis.guice.configuration.settings.ConfigurationSettings;
60+
import org.mybatis.guice.configuration.settings.DefaultExecutorTypeConfigurationSetting;
61+
import org.mybatis.guice.configuration.settings.DefaultScriptingLanguageTypeConfigurationSetting;
62+
import org.mybatis.guice.configuration.settings.DefaultStatementTimeoutConfigurationSetting;
63+
import org.mybatis.guice.configuration.settings.LazyLoadingEnabledConfigurationSetting;
64+
import org.mybatis.guice.configuration.settings.LocalCacheScopeConfigurationSetting;
65+
import org.mybatis.guice.configuration.settings.MapUnderscoreToCamelCaseConfigurationSetting;
66+
import org.mybatis.guice.configuration.settings.MultipleResultSetsEnabledConfigurationSetting;
67+
import org.mybatis.guice.configuration.settings.ObjectFactoryConfigurationSetting;
68+
import org.mybatis.guice.configuration.settings.ObjectWrapperFactoryConfigurationSetting;
69+
import org.mybatis.guice.configuration.settings.UseColumnLabelConfigurationSetting;
70+
import org.mybatis.guice.configuration.settings.UseGeneratedKeysConfigurationSetting;
4871
import org.mybatis.guice.environment.EnvironmentProvider;
4972
import org.mybatis.guice.session.SqlSessionFactoryProvider;
5073
import org.mybatis.guice.type.TypeHandlerProvider;
5174

52-
import javax.inject.Provider;
53-
import javax.sql.DataSource;
54-
55-
import java.util.Collection;
56-
import java.util.Set;
57-
58-
import static com.google.inject.multibindings.MapBinder.newMapBinder;
59-
import static com.google.inject.multibindings.Multibinder.newSetBinder;
60-
import static com.google.inject.name.Names.named;
61-
import static com.google.inject.util.Providers.guicify;
62-
import static org.mybatis.guice.Preconditions.checkArgument;
63-
import static org.mybatis.guice.Preconditions.checkState;
75+
import com.google.inject.Scopes;
76+
import com.google.inject.TypeLiteral;
77+
import com.google.inject.multibindings.MapBinder;
78+
import com.google.inject.multibindings.Multibinder;
79+
import com.google.inject.util.Providers;
6480

6581
/**
6682
* Easy to use helper Module that alleviates users to write the boilerplate
@@ -93,6 +109,8 @@ public abstract class MyBatisModule extends AbstractMyBatisModule {
93109
private Multibinder<Interceptor> interceptors;
94110

95111
private Multibinder<Class<?>> mappers;
112+
113+
private Multibinder<ConfigurationSetting> configurationSettings;
96114

97115
/**
98116
* {@inheritDoc}
@@ -103,15 +121,18 @@ final void internalConfigure() {
103121
checkState( handlers == null, "Re-entry is not allowed." );
104122
checkState( interceptors == null, "Re-entry is not allowed." );
105123
checkState( mappers == null, "Re-entry is not allowed." );
124+
checkState( configurationSettings == null, "Re-entry is not allowed." );
106125

107126
aliases = newMapBinder(binder(), new TypeLiteral<String>(){}, new TypeLiteral<Class<?>>(){}, TypeAliases.class);
108127
handlers = newMapBinder(binder(), new TypeLiteral<Class<?>>(){}, new TypeLiteral<TypeHandler<?>>(){});
109128
interceptors = newSetBinder(binder(), Interceptor.class);
110129
mappingTypeHandlers = newSetBinder(binder(), new TypeLiteral<TypeHandler<?>>(){}, MappingTypeHandlers.class);
111130
mappers = newSetBinder(binder(), new TypeLiteral<Class<?>>(){}, Mappers.class);
131+
configurationSettings = newSetBinder(binder(), ConfigurationSetting.class, ConfigurationSettings.class);
112132

113133
try {
114134
initialize();
135+
115136
} finally {
116137
aliases = null;
117138
handlers = null;
@@ -129,8 +150,11 @@ final void internalConfigure() {
129150
// parametric bindings
130151
bind(ObjectFactory.class).to(objectFactoryType).in(Scopes.SINGLETON);
131152
bind(ObjectWrapperFactory.class).to(objectWrapperFactoryType).in(Scopes.SINGLETON);
132-
bind(new TypeLiteral<Class<? extends LanguageDriver>>() {}).toInstance(defaultScriptingLanguageType);
133153

154+
155+
bindConfigurationSettingProvider(new ObjectFactoryConfigurationSetting(objectFactoryType));
156+
bindConfigurationSettingProvider(new ObjectWrapperFactoryConfigurationSetting(objectWrapperFactoryType));
157+
bindConfigurationSetting(new DefaultScriptingLanguageTypeConfigurationSetting(defaultScriptingLanguageType));
134158
}
135159

136160
/**
@@ -148,47 +172,47 @@ protected final void environmentId(String environmentId) {
148172
* @param lazyLoadingEnabled
149173
*/
150174
protected final void lazyLoadingEnabled(boolean lazyLoadingEnabled) {
151-
bindBoolean("mybatis.configuration.lazyLoadingEnabled", lazyLoadingEnabled);
175+
bindConfigurationSetting(new LazyLoadingEnabledConfigurationSetting(lazyLoadingEnabled));
152176
}
153177

154178
/**
155179
*
156180
* @param aggressiveLazyLoading
157181
*/
158182
protected final void aggressiveLazyLoading(boolean aggressiveLazyLoading) {
159-
bindBoolean("mybatis.configuration.aggressiveLazyLoading", aggressiveLazyLoading);
183+
bindConfigurationSetting(new AggressiveLazyLoadingConfigurationSetting(aggressiveLazyLoading));
160184
}
161185

162186
/**
163187
*
164188
* @param multipleResultSetsEnabled
165189
*/
166190
protected final void multipleResultSetsEnabled(boolean multipleResultSetsEnabled) {
167-
bindBoolean("mybatis.configuration.multipleResultSetsEnabled", multipleResultSetsEnabled);
191+
bindConfigurationSetting(new MultipleResultSetsEnabledConfigurationSetting(multipleResultSetsEnabled));
168192
}
169193

170194
/**
171195
*
172196
* @param useGeneratedKeys
173197
*/
174198
protected final void useGeneratedKeys(boolean useGeneratedKeys) {
175-
bindBoolean("mybatis.configuration.useGeneratedKeys", useGeneratedKeys);
199+
bindConfigurationSetting(new UseGeneratedKeysConfigurationSetting(useGeneratedKeys));
176200
}
177201

178202
/**
179203
*
180204
* @param useColumnLabel
181205
*/
182206
protected final void useColumnLabel(boolean useColumnLabel) {
183-
bindBoolean("mybatis.configuration.useColumnLabel", useColumnLabel);
207+
bindConfigurationSetting(new UseColumnLabelConfigurationSetting(useColumnLabel));
184208
}
185209

186210
/**
187211
*
188212
* @param useCacheEnabled
189213
*/
190214
protected final void useCacheEnabled(boolean useCacheEnabled) {
191-
bindBoolean("mybatis.configuration.cacheEnabled", useCacheEnabled);
215+
bindConfigurationSetting(new CacheEnabledConfigurationSetting(useCacheEnabled));
192216
}
193217

194218
/**
@@ -210,7 +234,7 @@ protected final void useSqlSessionFactoryProvider(Class<? extends Provider<? ext
210234
* @param failFast
211235
*/
212236
protected final void failFast(boolean failFast) {
213-
bindBoolean("mybatis.configuration.failFast", failFast);
237+
// bindBoolean("mybatis.configuration.failFast", failFast);
214238
}
215239

216240
/**
@@ -219,7 +243,7 @@ protected final void failFast(boolean failFast) {
219243
* @param mapUnderscoreToCamelCase Toggles this settings value.
220244
*/
221245
protected final void mapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase) {
222-
bindBoolean("mybatis.configuration.mapUnderscoreToCamelCase", mapUnderscoreToCamelCase);
246+
bindConfigurationSetting(new MapUnderscoreToCamelCaseConfigurationSetting(mapUnderscoreToCamelCase));
223247
}
224248

225249
/**
@@ -228,20 +252,15 @@ protected final void mapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase)
228252
* @param defaultStatementTimeout default statement timeout in seconds.
229253
*/
230254
protected final void defaultStatementTimeout(Integer defaultStatementTimeout) {
231-
bindInteger("mybatis.configuration.defaultStatementTimeout", defaultStatementTimeout);
255+
bindConfigurationSetting(new DefaultStatementTimeoutConfigurationSetting(defaultStatementTimeout));
232256
}
233-
234-
/**
235-
*
236-
* @param name
237-
* @param value
238-
*/
239-
private final void bindBoolean(String name, boolean value) {
240-
bindConstant().annotatedWith(named(name)).to(value);
257+
258+
public void bindConfigurationSetting(final ConfigurationSetting configurationSetting){
259+
configurationSettings.addBinding().toProvider(Providers.of(configurationSetting));
241260
}
242-
243-
private final void bindInteger(String name, Integer value) {
244-
bind(Integer.class).annotatedWith(named(name)).toProvider(Providers.of(value));
261+
262+
public void bindConfigurationSettingProvider(final Provider<? extends ConfigurationSetting> configurationSettingProvider){
263+
configurationSettings.addBinding().toProvider(guicify(configurationSettingProvider));
245264
}
246265

247266
/**
@@ -251,7 +270,7 @@ private final void bindInteger(String name, Integer value) {
251270
*/
252271
protected final void executorType(ExecutorType executorType) {
253272
checkArgument(executorType != null, "Parameter 'executorType' must be not null");
254-
bindConstant().annotatedWith(named("mybatis.configuration.defaultExecutorType")).to(executorType);
273+
bindConfigurationSetting(new DefaultExecutorTypeConfigurationSetting(executorType));
255274
}
256275

257276
/**
@@ -262,7 +281,7 @@ protected final void executorType(ExecutorType executorType) {
262281
*/
263282
protected final void localCacheScope(LocalCacheScope localeCacheScope) {
264283
checkArgument(localeCacheScope != null, "Parameter 'localCacheScope' must be not null");
265-
bindConstant().annotatedWith(named("mybatis.configuration.localCacheScope")).to(localeCacheScope);
284+
bindConfigurationSetting(new LocalCacheScopeConfigurationSetting(localeCacheScope));
266285
}
267286

268287
/**
@@ -272,7 +291,7 @@ protected final void localCacheScope(LocalCacheScope localeCacheScope) {
272291
*/
273292
protected final void autoMappingBehavior(AutoMappingBehavior autoMappingBehavior) {
274293
checkArgument(autoMappingBehavior != null, "Parameter 'autoMappingBehavior' must be not null");
275-
bindConstant().annotatedWith(named("mybatis.configuration.autoMappingBehavior")).to(autoMappingBehavior);
294+
bindConfigurationSetting(new AutoMappingBehaviorConfigurationSetting(autoMappingBehavior));
276295
}
277296

278297
/**

0 commit comments

Comments
 (0)