package sk.stuba.fiit.perconik.elasticsearch.preferences;
import com.google.common.reflect.TypeToken;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.RatioValue;
import org.elasticsearch.common.unit.SizeValue;
import org.elasticsearch.common.unit.TimeValue;
import sk.stuba.fiit.perconik.utilities.configuration.OptionParser;
import static org.elasticsearch.common.unit.ByteSizeValue.parseBytesSizeValue;
import static org.elasticsearch.common.unit.RatioValue.parseRatioValue;
import static org.elasticsearch.common.unit.SizeValue.parseSizeValue;
import static org.elasticsearch.common.unit.TimeValue.parseTimeValue;
public final class ElasticsearchOptionParsers {
private ElasticsearchOptionParsers() {}
private enum ByteSizeValueParser implements OptionParser<ByteSizeValue> {
INSTANCE;
public ByteSizeValue parse(final Object object) {
return object instanceof ByteSizeValue ? (ByteSizeValue) object : parseBytesSizeValue(object.toString());
}
public TypeToken<ByteSizeValue> type() {
return TypeToken.of(ByteSizeValue.class);
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
}
public static OptionParser<ByteSizeValue> byteSizeParser() {
return ByteSizeValueParser.INSTANCE;
}
private enum RatioValueParser implements OptionParser<RatioValue> {
INSTANCE;
public RatioValue parse(final Object object) {
return object instanceof RatioValue ? (RatioValue) object : parseRatioValue(object.toString());
}
public TypeToken<RatioValue> type() {
return TypeToken.of(RatioValue.class);
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
}
public static OptionParser<RatioValue> ratioParser() {
return RatioValueParser.INSTANCE;
}
private enum SizeValueParser implements OptionParser<SizeValue> {
INSTANCE;
public SizeValue parse(final Object object) {
return object instanceof SizeValue ? (SizeValue) object : parseSizeValue(object.toString());
}
public TypeToken<SizeValue> type() {
return TypeToken.of(SizeValue.class);
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
}
public static OptionParser<SizeValue> sizeParser() {
return SizeValueParser.INSTANCE;
}
private enum TimeValueParser implements OptionParser<TimeValue> {
INSTANCE;
public TimeValue parse(final Object object) {
return object instanceof TimeValue ? (TimeValue) object : parseTimeValue(object.toString(), null);
}
public TypeToken<TimeValue> type() {
return TypeToken.of(TimeValue.class);
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
}
public static OptionParser<TimeValue> timeParser() {
return TimeValueParser.INSTANCE;
}
}