/** * Creates the summary table. * * @throws IOException if there is a problem with screen I/O * @throws LDAPException if there is a problem getting information out to the directory * @throws DecodeException if there is a problem with the encoding */ private void printSummaryTable() throws LDAPException, IOException, DecodeException { List<TaskEntry> entries = taskClient.getTaskEntries(); if (!entries.isEmpty()) { TableBuilder table = new TableBuilder(); Map<String, TaskEntry> mapIdToEntry = new TreeMap<>(); for (TaskEntry entry : entries) { String taskId = entry.getId(); if (taskId != null) { mapIdToEntry.put(taskId, entry); } } table.appendHeading(INFO_TASKINFO_FIELD_ID.get()); table.appendHeading(INFO_TASKINFO_FIELD_TYPE.get()); table.appendHeading(INFO_TASKINFO_FIELD_STATUS.get()); for (String taskId : mapIdToEntry.keySet()) { TaskEntry entryWrapper = mapIdToEntry.get(taskId); table.startRow(); table.appendCell(taskId); table.appendCell(entryWrapper.getType()); table.appendCell(entryWrapper.getState()); } StringWriter sw = new StringWriter(); TextTablePrinter tablePrinter = new TextTablePrinter(sw); tablePrinter.setIndentWidth(INDENT); tablePrinter.setTotalWidth(80); table.print(tablePrinter); getOutputStream().println(LocalizableMessage.raw(sw.getBuffer())); } else { getOutputStream().println(INFO_TASKINFO_NO_TASKS.get()); getOutputStream().println(); } }
/** * Creates the summary table. * * @return list of strings of IDs of all the tasks in the table in order of the indexes printed in * the table * @throws IOException if there is a problem with screen I/O * @throws LDAPException if there is a problem getting information out to the directory * @throws DecodeException if there is a problem with the encoding */ private Menu<Void> getSummaryMenu() throws LDAPException, IOException, DecodeException { List<String> taskIds = new ArrayList<>(); List<Integer> cancelableIndices = new ArrayList<>(); List<TaskEntry> entries = taskClient.getTaskEntries(); MenuBuilder<Void> menuBuilder = new MenuBuilder<>(this); if (!entries.isEmpty()) { Map<String, TaskEntry> mapIdToEntry = new TreeMap<>(); for (TaskEntry entry : entries) { String taskId = entry.getId(); if (taskId != null) { mapIdToEntry.put(taskId, entry); } } menuBuilder.setColumnHeadings( INFO_TASKINFO_FIELD_ID.get(), INFO_TASKINFO_FIELD_TYPE.get(), INFO_TASKINFO_FIELD_STATUS.get()); menuBuilder.setColumnWidths(null, null, 0); int index = 0; for (final String taskId : mapIdToEntry.keySet()) { taskIds.add(taskId); final TaskEntry taskEntry = mapIdToEntry.get(taskId); menuBuilder.addNumberedOption( LocalizableMessage.raw(taskEntry.getId()), new TaskDrilldownMenu(taskId), taskEntry.getType(), taskEntry.getState()); index++; if (taskEntry.isCancelable()) { cancelableIndices.add(index); } } } else { getOutputStream().println(INFO_TASKINFO_NO_TASKS.get()); getOutputStream().println(); } menuBuilder.addCharOption( INFO_TASKINFO_CMD_REFRESH_CHAR.get(), INFO_TASKINFO_CMD_REFRESH.get(), new PrintSummaryTop()); if (!cancelableIndices.isEmpty()) { menuBuilder.addCharOption( INFO_TASKINFO_CMD_CANCEL_CHAR.get(), INFO_TASKINFO_CMD_CANCEL.get(), new CancelTaskTop(taskIds, cancelableIndices)); } menuBuilder.addQuitOption(); return menuBuilder.toMenu(); }
/** {@inheritDoc} */ @Override public MenuResult<Void> invoke(ManageTasks app) throws ClientException { if (taskIds != null && !taskIds.isEmpty()) { if (cancelableIndices != null && !cancelableIndices.isEmpty()) { // Prompt for the task number Integer index = null; String line = app.readLineOfInput( INFO_TASKINFO_CMD_CANCEL_NUMBER_PROMPT.get(cancelableIndices.get(0))); if (line.length() == 0) { line = String.valueOf(cancelableIndices.get(0)); } try { int i = Integer.parseInt(line); if (!cancelableIndices.contains(i)) { app.println(ERR_TASKINFO_NOT_CANCELABLE_TASK_INDEX.get(i)); } else { index = i - 1; } } catch (NumberFormatException nfe) { // ignore; } if (index != null) { String taskId = taskIds.get(index); try { CancelTask ct = new CancelTask(taskId); MenuResult<TaskEntry> result = ct.invoke(app); if (result.isSuccess()) { return MenuResult.success(); } else { return MenuResult.again(); } } catch (Exception e) { app.println(ERR_TASKINFO_CANCELING_TASK.get(taskId, e.getMessage())); return MenuResult.again(); } } else { app.println(ERR_TASKINFO_INVALID_MENU_KEY.get(line)); return MenuResult.again(); } } else { app.println(INFO_TASKINFO_NO_CANCELABLE_TASKS.get()); return MenuResult.cancel(); } } else { app.println(INFO_TASKINFO_NO_TASKS.get()); return MenuResult.cancel(); } }