package dev.kske.chess.uci;
import java.util.*;
/**
* Project: Chess
* File: UCIOption.java
* Created: 22.07.2019
*
* @since Chess v0.3-alpha
* @author Kai S. K. Engelbart
*/
public class UCIOption {
private String name, defaultVal, minVal, maxVal;
private GUIType type;
private List varList;
public UCIOption(String line) {
varList = new ArrayList<>();
String[] tokens = line.split(" ");
for (int i = 0; i < tokens.length; i++)
switch (tokens[i]) {
case "name":
StringJoiner nameJoiner = new StringJoiner(" ");
while (
!Arrays.asList("type", "default", "min", "max", "var")
.contains(tokens[i + 1])
)
nameJoiner.add(tokens[++i]);
name = nameJoiner.toString();
break;
case "type":
type = GUIType.valueOf(tokens[++i].toUpperCase());
break;
case "default":
// Default string may be empty
defaultVal = i == tokens.length - 1 ? "" : tokens[++i];
break;
case "min":
minVal = tokens[++i];
break;
case "max":
maxVal = tokens[++i];
break;
case "var":
varList.add(tokens[++i]);
break;
default:
System.err.printf(
"Unknown parameter '%s' for command 'option' found!%n",
tokens[i]
);
}
}
public String getName() { return name; }
public String getDefaultVal() { return defaultVal; }
public String getMinVal() { return minVal; }
public String getMaxVal() { return maxVal; }
public GUIType getType() { return type; }
public List getVarList() { return varList; }
public enum GUIType {
CHECK, SPIN, COMBO, BUTTON, STRING
}
}