public String getSynopsis() {
        StringBuilder sb = new StringBuilder();
        for (InputOption option : options.values()) {
            String shortcut = (null != option.getShortcut()) ? "-" + option.getShortcut() + "|" : EMPTY;
            sb.append("[");

            if (option.isValueRequired()) {
                sb.append(String.format("%s--%s=\"...\"", shortcut, option.getName()));
            } else if (option.isValueOptional()) {
                sb.append(String.format("%s--%s[=\"...\"]", shortcut, option.getName()));
            } else {
                sb.append(String.format("%s--%s", shortcut, option.getName()));
            }

            sb.append("] ");
        }

        for (InputArgument argument : arguments.values()) {
            if (argument.isRequired()) {
                sb.append(String.format("%s%s", argument.getName(), argument.isArray() ? "1" : EMPTY));
            } else {
                sb.append(String.format("[%s%s]", argument.getName(), (argument.isArray() ? "1" : EMPTY)));
            }

            if (argument.isArray()) {
                sb.append(String.format(" ... [%sN]", argument.getName()));
            }
        }

        return sb.toString().trim();
    }