public void startSession()

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);
    }
  }