package io.airlift.configuration;
import com.google.inject.Key;
import java.util.Optional;
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
public final class ConfigurationBinding<T>
{
private final Key<T> key;
private final Class<T> configClass;
private final Optional<String> prefix;
public ConfigurationBinding(Key<T> key, Class<T> configClass, Optional<String> prefix)
{
requireNonNull(key, "key");
requireNonNull(configClass, "configClass");
requireNonNull(prefix, "prefix is null");
checkArgument(!prefix.isPresent() || !prefix.get().isEmpty(), "prefix is empty");
this.key = key;
this.configClass = configClass;
this.prefix = prefix;
}
public Key<T> getKey()
{
return key;
}
public Class<T> getConfigClass()
{
return configClass;
}
public Optional<String> getPrefix()
{
return prefix;
}
@Override
public boolean equals(Object o)
{
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ConfigurationBinding<?> that = (ConfigurationBinding<?>) o;
if (!key.equals(that.key)) {
return false;
}
return true;
}
@Override
public int hashCode()
{
return key.hashCode();
}
@Override
public String toString()
{
return toStringHelper(this)
.omitNullValues()
.add("type", configClass)
.add("qualifier", Optional.ofNullable(key.getAnnotationType()).map(Class::getSimpleName).orElse(null))
.add("prefix", prefix.orElse(null))
.toString();
}
}