
com.hubspot.singularity.runner.base.config.ConfigurationBinder Maven / Gradle / Ivy
package com.hubspot.singularity.runner.base.config;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import com.google.common.base.Optional;
import com.google.inject.Binder;
import com.google.inject.Scopes;
import com.google.inject.multibindings.Multibinder;
import com.hubspot.singularity.runner.base.configuration.BaseRunnerConfiguration;
import com.hubspot.singularity.runner.base.configuration.Configuration;
public class ConfigurationBinder {
private final Binder binder;
private final Multibinder multibinder;
public static ConfigurationBinder newBinder(Binder binder) {
return new ConfigurationBinder(binder);
}
private ConfigurationBinder(Binder binder) {
this.binder = binder;
this.multibinder = Multibinder.newSetBinder(binder, BaseRunnerConfiguration.class);
}
public ConfigurationBinder bindPrimaryConfiguration(Class configurationClass, Optional filename) {
bindConfiguration(configurationClass, filename);
binder.bind(BaseRunnerConfiguration.class).to(configurationClass);
return this;
}
public ConfigurationBinder bindConfiguration(Class configurationClass, Optional filename) {
checkNotNull(configurationClass, "configurationClass");
checkState(configurationClass.getAnnotation(Configuration.class) != null, "%s must be annotated with @Configuration", configurationClass.getSimpleName());
binder.bind(configurationClass).toProvider(new SingularityRunnerConfigurationProvider(configurationClass, filename)).in(Scopes.SINGLETON);
multibinder.addBinding().to(configurationClass);
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy