All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fathzer.jchess.uci.ParamsParser Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
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