in cli/src/main/java/org/arend/frontend/ui/CliSession.java [95:206]
public void startSession() {
checkAndDisable();
if (description != null) {
System.out.println(description);
}
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (Request request : myRequests) {
if (request.data instanceof ArendSession) {
((ArendSession) request.data).startSession();
continue;
}
if (request.message != null) {
System.out.println(request.message);
}
if (request.data == null) {
continue;
}
Object defaultValue = request.defaultValue;
if (request.data instanceof List) {
List<?> list = (List<?>) request.data;
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ") " + list.get(i));
}
if (defaultValue != null) {
int defaultIndex = -1;
for (int i = 0; i < list.size(); i++) {
if (defaultValue.equals(list.get(i))) {
defaultIndex = i;
break;
}
}
printDefault(defaultIndex >= 0 ? defaultIndex : defaultValue);
}
} else if (request.data instanceof Boolean) {
System.out.print("(" + TRUE_VALUE + "/" + FALSE_VALUE + ")");
if (defaultValue != null) {
System.out.print(" ");
printDefault(defaultValue == Boolean.TRUE ? TRUE_VALUE : FALSE_VALUE);
}
} else if (defaultValue != null) {
printDefault(defaultValue);
}
while (true) {
String line = readLine(reader);
if (line == null) {
return;
}
Object result = null;
if (request.data instanceof List) {
List<?> list = (List<?>) request.data;
if (line.isEmpty()) {
result = defaultValue;
} else {
int index;
try {
index = Integer.parseInt(line);
} catch (NumberFormatException e) {
index = -1;
}
if (index >= 1 && index <= list.size()) {
result = list.get(index - 1);
}
}
if (result == null) {
System.out.println("Enter a number between 1 and " + list.size());
}
} else if (request.data instanceof Boolean) {
if (line.equals(TRUE_VALUE)) {
result = true;
} else if (line.equals(FALSE_VALUE)) {
result = false;
} else if (line.isEmpty() && defaultValue != null) {
result = defaultValue;
} else {
System.out.println("Enter \"" + TRUE_VALUE + "\" or \"" + FALSE_VALUE + "\"");
}
} else if (request.data instanceof String) {
result = line.isEmpty() && defaultValue != null ? defaultValue : line;
} else if (request.data instanceof Integer) {
if (line.isEmpty()) {
result = defaultValue;
} else {
try {
result = Integer.parseInt(line);
} catch (NumberFormatException ignored) {}
}
if (result == null) {
System.out.println("Enter a number");
}
} else {
throw new IllegalStateException();
}
if (result != null) {
request.query.setResult(result);
break;
}
}
}
if (callback != null) {
callback.accept(true);
}
}