1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.guice.provision;
17
18 import com.google.inject.Binder;
19 import com.google.inject.MembersInjector;
20 import com.google.inject.spi.ProvisionListener;
21
22 import jakarta.inject.Provider;
23
24 import org.mybatis.guice.configuration.ConfigurationSettingListener;
25 import org.mybatis.guice.configuration.settings.ConfigurationSetting;
26 import org.mybatis.guice.configuration.settings.MapperConfigurationSetting;
27
28 public final class ConfigurationProviderProvisionListener implements ProvisionListener {
29
30 private final ConfigurationProviderProvisionAction action;
31
32 ConfigurationProviderProvisionListener(ConfigurationProviderProvisionAction action) {
33 this.action = action;
34 }
35
36 @Override
37 public <T> void onProvision(ProvisionInvocation<T> provision) {
38 ConfigurationSettingListener configurationSettingListener = (ConfigurationSettingListener) provision.provision();
39 this.action.perform(configurationSettingListener);
40 }
41
42 public static <P extends Provider<? extends ConfigurationSetting>> ConfigurationProviderProvisionListener create(
43 final P configurationSettingProvider, final Binder binder) {
44 @SuppressWarnings("unchecked")
45 final MembersInjector<P> membersInjector = (MembersInjector<P>) binder
46 .getMembersInjector(configurationSettingProvider.getClass());
47 return new ConfigurationProviderProvisionListener(configurationSettingListener -> {
48 membersInjector.injectMembers(configurationSettingProvider);
49 configurationSettingListener.addConfigurationSetting(configurationSettingProvider.get());
50 });
51 }
52
53 public static ConfigurationProviderProvisionListener create(final ConfigurationSetting configurationSetting) {
54 return new ConfigurationProviderProvisionListener(
55 configurationSettingListener -> configurationSettingListener.addConfigurationSetting(configurationSetting));
56 }
57
58 public static ConfigurationProviderProvisionListener create(
59 final MapperConfigurationSetting mapperConfigurationSetting) {
60 return new ConfigurationProviderProvisionListener(configurationSettingListener -> configurationSettingListener
61 .addMapperConfigurationSetting(mapperConfigurationSetting));
62 }
63
64 private interface ConfigurationProviderProvisionAction {
65 void perform(ConfigurationSettingListener configurationSettingListener);
66 }
67 }