Skip to content

Commit d8675f1

Browse files
Merge pull request #79 from georgantasp/abstractConfigurationSettings
Abstract configuration settings
2 parents d0ea037 + bd849a6 commit d8675f1

21 files changed

+449
-219
lines changed

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

+61-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,32 @@
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.FailFastSettingImpl;
64+
import org.mybatis.guice.configuration.settings.LazyLoadingEnabledConfigurationSetting;
65+
import org.mybatis.guice.configuration.settings.LocalCacheScopeConfigurationSetting;
66+
import org.mybatis.guice.configuration.settings.MapUnderscoreToCamelCaseConfigurationSetting;
67+
import org.mybatis.guice.configuration.settings.MultipleResultSetsEnabledConfigurationSetting;
68+
import org.mybatis.guice.configuration.settings.ObjectFactoryConfigurationSetting;
69+
import org.mybatis.guice.configuration.settings.ObjectWrapperFactoryConfigurationSetting;
70+
import org.mybatis.guice.configuration.settings.UseColumnLabelConfigurationSetting;
71+
import org.mybatis.guice.configuration.settings.UseGeneratedKeysConfigurationSetting;
4872
import org.mybatis.guice.environment.EnvironmentProvider;
4973
import org.mybatis.guice.session.SqlSessionFactoryProvider;
5074
import org.mybatis.guice.type.TypeHandlerProvider;
5175

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;
76+
import com.google.inject.Scopes;
77+
import com.google.inject.TypeLiteral;
78+
import com.google.inject.multibindings.MapBinder;
79+
import com.google.inject.multibindings.Multibinder;
80+
import com.google.inject.util.Providers;
6481

6582
/**
6683
* Easy to use helper Module that alleviates users to write the boilerplate
@@ -93,6 +110,8 @@ public abstract class MyBatisModule extends AbstractMyBatisModule {
93110
private Multibinder<Interceptor> interceptors;
94111

95112
private Multibinder<Class<?>> mappers;
113+
114+
private Multibinder<ConfigurationSetting> configurationSettings;
96115

97116
/**
98117
* {@inheritDoc}
@@ -103,15 +122,18 @@ final void internalConfigure() {
103122
checkState( handlers == null, "Re-entry is not allowed." );
104123
checkState( interceptors == null, "Re-entry is not allowed." );
105124
checkState( mappers == null, "Re-entry is not allowed." );
125+
checkState( configurationSettings == null, "Re-entry is not allowed." );
106126

107127
aliases = newMapBinder(binder(), new TypeLiteral<String>(){}, new TypeLiteral<Class<?>>(){}, TypeAliases.class);
108128
handlers = newMapBinder(binder(), new TypeLiteral<Class<?>>(){}, new TypeLiteral<TypeHandler<?>>(){});
109129
interceptors = newSetBinder(binder(), Interceptor.class);
110130
mappingTypeHandlers = newSetBinder(binder(), new TypeLiteral<TypeHandler<?>>(){}, MappingTypeHandlers.class);
111131
mappers = newSetBinder(binder(), new TypeLiteral<Class<?>>(){}, Mappers.class);
132+
configurationSettings = newSetBinder(binder(), ConfigurationSetting.class, ConfigurationSettings.class);
112133

113134
try {
114135
initialize();
136+
115137
} finally {
116138
aliases = null;
117139
handlers = null;
@@ -129,8 +151,11 @@ final void internalConfigure() {
129151
// parametric bindings
130152
bind(ObjectFactory.class).to(objectFactoryType).in(Scopes.SINGLETON);
131153
bind(ObjectWrapperFactory.class).to(objectWrapperFactoryType).in(Scopes.SINGLETON);
132-
bind(new TypeLiteral<Class<? extends LanguageDriver>>() {}).toInstance(defaultScriptingLanguageType);
133154

155+
156+
bindConfigurationSettingProvider(new ObjectFactoryConfigurationSetting(objectFactoryType));
157+
bindConfigurationSettingProvider(new ObjectWrapperFactoryConfigurationSetting(objectWrapperFactoryType));
158+
bindConfigurationSetting(new DefaultScriptingLanguageTypeConfigurationSetting(defaultScriptingLanguageType));
134159
}
135160

136161
/**
@@ -148,47 +173,47 @@ protected final void environmentId(String environmentId) {
148173
* @param lazyLoadingEnabled
149174
*/
150175
protected final void lazyLoadingEnabled(boolean lazyLoadingEnabled) {
151-
bindBoolean("mybatis.configuration.lazyLoadingEnabled", lazyLoadingEnabled);
176+
bindConfigurationSetting(new LazyLoadingEnabledConfigurationSetting(lazyLoadingEnabled));
152177
}
153178

154179
/**
155180
*
156181
* @param aggressiveLazyLoading
157182
*/
158183
protected final void aggressiveLazyLoading(boolean aggressiveLazyLoading) {
159-
bindBoolean("mybatis.configuration.aggressiveLazyLoading", aggressiveLazyLoading);
184+
bindConfigurationSetting(new AggressiveLazyLoadingConfigurationSetting(aggressiveLazyLoading));
160185
}
161186

162187
/**
163188
*
164189
* @param multipleResultSetsEnabled
165190
*/
166191
protected final void multipleResultSetsEnabled(boolean multipleResultSetsEnabled) {
167-
bindBoolean("mybatis.configuration.multipleResultSetsEnabled", multipleResultSetsEnabled);
192+
bindConfigurationSetting(new MultipleResultSetsEnabledConfigurationSetting(multipleResultSetsEnabled));
168193
}
169194

170195
/**
171196
*
172197
* @param useGeneratedKeys
173198
*/
174199
protected final void useGeneratedKeys(boolean useGeneratedKeys) {
175-
bindBoolean("mybatis.configuration.useGeneratedKeys", useGeneratedKeys);
200+
bindConfigurationSetting(new UseGeneratedKeysConfigurationSetting(useGeneratedKeys));
176201
}
177202

178203
/**
179204
*
180205
* @param useColumnLabel
181206
*/
182207
protected final void useColumnLabel(boolean useColumnLabel) {
183-
bindBoolean("mybatis.configuration.useColumnLabel", useColumnLabel);
208+
bindConfigurationSetting(new UseColumnLabelConfigurationSetting(useColumnLabel));
184209
}
185210

186211
/**
187212
*
188213
* @param useCacheEnabled
189214
*/
190215
protected final void useCacheEnabled(boolean useCacheEnabled) {
191-
bindBoolean("mybatis.configuration.cacheEnabled", useCacheEnabled);
216+
bindConfigurationSetting(new CacheEnabledConfigurationSetting(useCacheEnabled));
192217
}
193218

194219
/**
@@ -210,7 +235,7 @@ protected final void useSqlSessionFactoryProvider(Class<? extends Provider<? ext
210235
* @param failFast
211236
*/
212237
protected final void failFast(boolean failFast) {
213-
bindBoolean("mybatis.configuration.failFast", failFast);
238+
bindConstant().annotatedWith(FailFastSettingImpl.get()).to(failFast);
214239
}
215240

216241
/**
@@ -219,7 +244,7 @@ protected final void failFast(boolean failFast) {
219244
* @param mapUnderscoreToCamelCase Toggles this settings value.
220245
*/
221246
protected final void mapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase) {
222-
bindBoolean("mybatis.configuration.mapUnderscoreToCamelCase", mapUnderscoreToCamelCase);
247+
bindConfigurationSetting(new MapUnderscoreToCamelCaseConfigurationSetting(mapUnderscoreToCamelCase));
223248
}
224249

225250
/**
@@ -228,20 +253,15 @@ protected final void mapUnderscoreToCamelCase(boolean mapUnderscoreToCamelCase)
228253
* @param defaultStatementTimeout default statement timeout in seconds.
229254
*/
230255
protected final void defaultStatementTimeout(Integer defaultStatementTimeout) {
231-
bindInteger("mybatis.configuration.defaultStatementTimeout", defaultStatementTimeout);
256+
bindConfigurationSetting(new DefaultStatementTimeoutConfigurationSetting(defaultStatementTimeout));
232257
}
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);
258+
259+
public void bindConfigurationSetting(final ConfigurationSetting configurationSetting){
260+
configurationSettings.addBinding().toProvider(Providers.of(configurationSetting));
241261
}
242-
243-
private final void bindInteger(String name, Integer value) {
244-
bind(Integer.class).annotatedWith(named(name)).toProvider(Providers.of(value));
262+
263+
public void bindConfigurationSettingProvider(final Provider<? extends ConfigurationSetting> configurationSettingProvider){
264+
configurationSettings.addBinding().toProvider(guicify(configurationSettingProvider));
245265
}
246266

247267
/**
@@ -251,7 +271,7 @@ private final void bindInteger(String name, Integer value) {
251271
*/
252272
protected final void executorType(ExecutorType executorType) {
253273
checkArgument(executorType != null, "Parameter 'executorType' must be not null");
254-
bindConstant().annotatedWith(named("mybatis.configuration.defaultExecutorType")).to(executorType);
274+
bindConfigurationSetting(new DefaultExecutorTypeConfigurationSetting(executorType));
255275
}
256276

257277
/**
@@ -262,7 +282,7 @@ protected final void executorType(ExecutorType executorType) {
262282
*/
263283
protected final void localCacheScope(LocalCacheScope localeCacheScope) {
264284
checkArgument(localeCacheScope != null, "Parameter 'localCacheScope' must be not null");
265-
bindConstant().annotatedWith(named("mybatis.configuration.localCacheScope")).to(localeCacheScope);
285+
bindConfigurationSetting(new LocalCacheScopeConfigurationSetting(localeCacheScope));
266286
}
267287

268288
/**
@@ -272,7 +292,7 @@ protected final void localCacheScope(LocalCacheScope localeCacheScope) {
272292
*/
273293
protected final void autoMappingBehavior(AutoMappingBehavior autoMappingBehavior) {
274294
checkArgument(autoMappingBehavior != null, "Parameter 'autoMappingBehavior' must be not null");
275-
bindConstant().annotatedWith(named("mybatis.configuration.autoMappingBehavior")).to(autoMappingBehavior);
295+
bindConfigurationSetting(new AutoMappingBehaviorConfigurationSetting(autoMappingBehavior));
276296
}
277297

278298
/**

0 commit comments

Comments
 (0)