2020-03-02 19:16:28 +01:00
|
|
|
package envoy.data;
|
|
|
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Contains a single {@link Config} value as well as the corresponding command
|
|
|
|
* line arguments and its default value.<br>
|
|
|
|
* <br>
|
|
|
|
* Project: <strong>envoy-clientChess</strong><br>
|
|
|
|
* File: <strong>ConfigItem.javaEvent.java</strong><br>
|
|
|
|
* Created: <strong>21.12.2019</strong><br>
|
|
|
|
*
|
|
|
|
* @author Kai S. K. Engelbart
|
|
|
|
* @param <T> the type of the config item's value
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
2020-08-22 13:37:07 +02:00
|
|
|
public final class ConfigItem<T> {
|
2020-03-02 19:16:28 +01:00
|
|
|
|
|
|
|
private final String commandLong, commandShort;
|
|
|
|
private final Function<String, T> parseFunction;
|
|
|
|
private final boolean mandatory;
|
|
|
|
|
|
|
|
private T value;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes a {@link ConfigItem}.
|
|
|
|
*
|
|
|
|
* @param commandLong the long command line argument to set this value
|
|
|
|
* @param commandShort the short command line argument to set this value
|
|
|
|
* @param parseFunction the {@code Function<String, T>} that parses the value
|
|
|
|
* from a string
|
|
|
|
* @param mandatory indicated that this config item must be initialized with
|
|
|
|
* a non-null value
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
2020-08-22 13:15:42 +02:00
|
|
|
public ConfigItem(String commandLong, String commandShort, Function<String, T> parseFunction, boolean mandatory) {
|
2020-03-02 19:16:28 +01:00
|
|
|
this.commandLong = commandLong;
|
|
|
|
this.commandShort = commandShort;
|
|
|
|
this.parseFunction = parseFunction;
|
|
|
|
this.mandatory = mandatory;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes an optional {@link ConfigItem} without a default value.
|
|
|
|
*
|
|
|
|
* @param commandLong the long command line argument to set this value
|
|
|
|
* @param commandShort the short command line argument to set this value
|
|
|
|
* @param parseFunction the {@code Function<String, T>} that parses the value
|
|
|
|
* from a string
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public ConfigItem(String commandLong, String commandShort, Function<String, T> parseFunction) {
|
2020-08-22 13:15:42 +02:00
|
|
|
this(commandLong, commandShort, parseFunction, false);
|
2020-03-02 19:16:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Parses this {@ConfigItem}'s value from a string.
|
|
|
|
*
|
|
|
|
* @param input the string to parse from
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public void parse(String input) { value = parseFunction.apply(input); }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return The long command line argument to set the value of this
|
|
|
|
* {@link ConfigItem}
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public String getCommandLong() { return commandLong; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return The short command line argument to set the value of this
|
|
|
|
* {@link ConfigItem}
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public String getCommandShort() { return commandShort; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the value of this {@link ConfigItem}
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public T get() { return value; }
|
|
|
|
|
2020-08-22 13:15:42 +02:00
|
|
|
/**
|
|
|
|
* @param value the value to set
|
|
|
|
* @since Envoy Common v0.2-beta
|
|
|
|
*/
|
|
|
|
protected void setValue(T value) { this.value = value; }
|
|
|
|
|
2020-03-02 19:16:28 +01:00
|
|
|
/**
|
|
|
|
* @return {@code true} if this {@link ConfigItem} is mandatory for successful
|
|
|
|
* application initialization
|
|
|
|
* @since Envoy Common v0.1-beta
|
|
|
|
*/
|
|
|
|
public boolean isMandatory() { return mandatory; }
|
|
|
|
}
|