package com.subgraph.orchid.config;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.subgraph.orchid.TorConfig;
import com.subgraph.orchid.TorConfig.AutoBoolValue;
import com.subgraph.orchid.TorConfig.ConfigVarType;
public class TorConfigParser {
public Object parseValue(String value, ConfigVarType type) {
switch(type) {
case BOOLEAN:
return Boolean.parseBoolean(value);
case INTEGER:
return Integer.parseInt(value);
case INTERVAL:
return parseIntervalValue(value);
case PATH:
return parseFileValue(value);
case PORTLIST:
return parseIntegerList(value);
case STRING:
return value;
case STRINGLIST:
return parseCSV(value);
case AUTOBOOL:
return parseAutoBool(value);
case HS_AUTH:
default:
throw new IllegalArgumentException();
}
}
private File parseFileValue(String value) {
if(value.startsWith("~/")) {
final File home = new File(System.getProperty("user.home"));
return new File(home, value.substring(2));
}
return new File(value);
}
private TorConfigInterval parseIntervalValue(String value) {
return TorConfigInterval.createFrom(value);
}
private List<Integer> parseIntegerList(String value) {
final List<Integer> list = new ArrayList<Integer>();
for(String s: value.split(",")) {
list.add(Integer.parseInt(s));
}
return list;
}
private List<String> parseCSV(String value) {
final List<String> list = new ArrayList<String>();
for(String s: value.split(",")) {
list.add(s);
}
return list;
}
private TorConfig.AutoBoolValue parseAutoBool(String value) {
if("auto".equalsIgnoreCase(value)) {
return AutoBoolValue.AUTO;
} else if("true".equalsIgnoreCase(value)) {
return AutoBoolValue.TRUE;
} else if("false".equalsIgnoreCase(value)) {
return AutoBoolValue.FALSE;
} else {
throw new IllegalArgumentException("Could not parse AutoBool value "+ value);
}
}
}