com.hubspot.dropwizard.guicier.ConfigurationAwareModule Maven / Gradle / Ivy
package com.hubspot.dropwizard.guicier;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import com.google.inject.Binder;
import com.google.inject.Module;
/**
* @author Henning P. Schmiedehausen
*/
public abstract class ConfigurationAwareModule implements Module {
private volatile Configuration configuration = null;
@Override
public final void configure(Binder binder) {
configure(decorate(binder), getConfiguration());
}
public void setConfiguration(Configuration configuration) {
checkState(this.configuration == null, "configuration was already set!");
this.configuration = checkNotNull(configuration, "configuration is null");
}
protected Configuration getConfiguration() {
return checkNotNull(this.configuration, "configuration was not set!");
}
protected abstract void configure(final Binder binder, final Configuration configuration);
private Binder decorate(final Binder binder) {
return new ForwardingBinder() {
@Override
protected Binder getDelegate() {
return binder;
}
@Override
@SuppressWarnings("unchecked")
public void install(Module module) {
if (module instanceof ConfigurationAwareModule>) {
((ConfigurationAwareModule) module).setConfiguration(getConfiguration());
}
super.install(module);
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy