package ru.vyarus.dropwizard.guice.module.context.option.internal;
import ru.vyarus.dropwizard.guice.module.context.option.Option;
/**
* Holds used options (set or read) info.
*
* @param <T> option value type (actually not used due to enums,
* but stayed to indicate option and value type connection)
* @author Vyacheslav Rusakov
* @since 09.08.2016
*/
public final class OptionHolder<T> {
private final Option<T> option;
private boolean used;
private boolean set;
private T value;
public OptionHolder(final Option<T> option) {
this.option = option;
value = option.getDefaultValue();
}
/**
* @return true if option value was read, false otherwise
*/
public boolean isUsed() {
return used;
}
/**
* @return true if custom option value was set, false otherwise
*/
public boolean isSet() {
return set;
}
/**
* @return option value (default of set)
*/
public T getValue() {
used = true;
return value;
}
@Override
public String toString() {
return option + " = " + value;
}
/**
* @param value new option value
*/
public void setValue(final T value) {
set = true;
this.value = value;
}
}