package chess;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
public class Parameters {
public static enum Type {
CHECK,
SPIN,
COMBO,
BUTTON,
STRING
}
public static class ParamBase {
public String name;
public Type type;
public boolean visible;
}
public static final class CheckParam extends ParamBase {
public boolean value;
public boolean defaultValue;
CheckParam(String name, boolean visible, boolean def) {
this.name = name;
this.type = Type.CHECK;
this.visible = visible;
this.value = def;
this.defaultValue = def;
}
}
public static final class SpinParam extends ParamBase {
public int minValue;
public int maxValue;
public int value;
public int defaultValue;
SpinParam(String name, boolean visible, int minV, int maxV, int def) {
this.name = name;
this.type = Type.SPIN;
this.visible = visible;
this.minValue = minV;
this.maxValue = maxV;
this.value = def;
this.defaultValue = def;
}
}
public static final class ComboParam extends ParamBase {
public String[] allowedValues;
public String value;
public String defaultValue;
ComboParam(String name, boolean visible, String[] allowed, String def) {
this.name = name;
this.type = Type.COMBO;
this.visible = visible;
this.allowedValues = allowed;
this.value = def;
this.defaultValue = def;
}
}
public static final class ButtonParam extends ParamBase {
ButtonParam(String name, boolean visible) {
this.name = name;
this.type = Type.BUTTON;
this.visible = visible;
}
}
public static final class StringParam extends ParamBase {
public String value;
public String defaultValue;
StringParam(String name, boolean visible, String def) {
this.name = name;
this.type = Type.STRING;
this.visible = visible;
this.value = def;
this.defaultValue = def;
}
}
public static Parameters instance() {
return inst;
}
public final String[] getParamNames() {
ArrayList<String> parNames = new ArrayList<String>();
for (Map.Entry<String, ParamBase> e : params.entrySet())
if (e.getValue().visible)
parNames.add(e.getKey());
return parNames.toArray(new String[parNames.size()]);
}
public final ParamBase getParam(String name) {
return params.get(name);
}
private static final Parameters inst = new Parameters();
private Map<String, ParamBase> params = new TreeMap<String, ParamBase>();
private Parameters() {
addPar(new SpinParam("qV", false, -200, 200, 0));
addPar(new SpinParam("rV", false, -200, 200, 0));
addPar(new SpinParam("bV", false, -200, 200, 0));
addPar(new SpinParam("nV", false, -200, 200, 0));
addPar(new SpinParam("pV", false, -200, 200, 0));
}
private final void addPar(ParamBase p) {
params.put(p.name.toLowerCase(), p);
}
final boolean getBooleanPar(String name) {
return ((CheckParam)params.get(name.toLowerCase())).value;
}
final int getIntPar(String name) {
int ret = ((SpinParam)params.get(name.toLowerCase())).value;
return ret;
}
final String getStringPar(String name) {
return ((StringParam)params.get(name.toLowerCase())).value;
}
public final void set(String name, String value) {
ParamBase p = params.get(name.toLowerCase());
if (p == null)
return;
switch (p.type) {
case CHECK: {
CheckParam cp = (CheckParam)p;
if (value.toLowerCase().equals("true"))
cp.value = true;
else if (value.toLowerCase().equals("false"))
cp.value = false;
break;
}
case SPIN: {
SpinParam sp = (SpinParam)p;
try {
int val = Integer.parseInt(value);
if ((val >= sp.minValue) && (val <= sp.maxValue))
sp.value = val;
} catch (NumberFormatException ex) {
}
break;
}
case COMBO: {
ComboParam cp = (ComboParam)p;
for (String allowed : cp.allowedValues)
if (allowed.toLowerCase().equals(value.toLowerCase())) {
cp.value = allowed;
break;
}
break;
}
case BUTTON:
break;
case STRING: {
StringParam sp = (StringParam)p;
sp.value = value;
break;
}
}
}
}