package io.airlift.airship.coordinator;
import com.google.inject.Binder;
import com.google.inject.Module;
import io.airlift.configuration.ConfigurationAwareModule;
import io.airlift.configuration.ConfigurationFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
class ConditionalModule
implements ConfigurationAwareModule
{
public static ConfigurationAwareModule installIfPropertyEquals(Module module, String property, String expectedValue)
{
return new ConditionalModule(module, property, expectedValue);
}
private final Module module;
private final String property;
private final String expectedValue;
private ConfigurationFactory configurationFactory;
private ConditionalModule(Module module, String property, String expectedValue)
{
this.module = checkNotNull(module, "module is null");
this.property = checkNotNull(property, "property is null");
this.expectedValue = checkNotNull(expectedValue, "expectedValue is null");
}
@Override
public void setConfigurationFactory(ConfigurationFactory configurationFactory)
{
this.configurationFactory = checkNotNull(configurationFactory, "configurationFactory is null");
configurationFactory.consumeProperty(property);
}
@Override
public void configure(Binder binder)
{
checkState(configurationFactory != null, "configurationFactory was not set");
if (!configurationFactory.getProperties().containsKey(property)) {
binder.addError("Required configuration property '%s' was not set", property);
}
if (expectedValue.equals(configurationFactory.getProperties().get(property))) {
binder.install(module);
}
}
}