
com.fathzer.jchess.uci.ParamsParser Maven / Gradle / Ivy
package com.fathzer.jchess.uci;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
class ParamsParser {
private final Consumer errConsumer;
private final BiPredicate valueValidator;
private final Function parser;
ParamsParser(Consumer errConsumer, Function parser, BiPredicate valueValidator) {
this.errConsumer = errConsumer;
this.valueValidator = valueValidator;
this.parser = parser;
}
Optional> parse(String[] tokens, List wordings, List defaultValues) {
if (wordings.size()!=defaultValues.size()) {
throw new IllegalArgumentException();
}
final int nb = wordings.size();
final List result = new ArrayList<>(nb);
for (int i = 0; i < nb; i++) {
final V value = parseToken(tokens, i, defaultValues.get(i), wordings.get(i));
if (value==null) {
return Optional.empty();
} else {
result.add(value);
}
}
// Ignore extra tokens
if (nb < tokens.length) {
errConsumer.accept("Extra tokens are ignored");
}
return Optional.of(result);
}
private V parseToken(String[] tokens, final int index, V defaultValue, String wording) {
if (tokens.length<=index) {
if (defaultValue==null) {
errConsumer.accept("Missing argument");
}
return defaultValue;
}
try {
final V value = parser.apply(tokens[index]);
return valueValidator.test(index, value) ? value : null;
} catch (IllegalArgumentException e) {
errConsumer.accept("invalid "+wording+" parameter: "+tokens[index]);
return null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy