/** * 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<TaskEntry> invoke(ManageTasks app) throws ClientException { LocalizableMessage m; TaskEntry taskEntry; try { taskEntry = app.getTaskClient().getTaskEntry(taskId); TableBuilder table = new TableBuilder(); table.appendHeading(INFO_TASKINFO_DETAILS.get()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_ID.get()); table.appendCell(taskEntry.getId()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_TYPE.get()); table.appendCell(taskEntry.getType()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_STATUS.get()); table.appendCell(taskEntry.getState()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_SCHEDULED_START.get()); if (TaskState.isRecurring(taskEntry.getTaskState())) { m = taskEntry.getScheduleTab(); table.appendCell(m); } else { m = taskEntry.getScheduledStartTime(); if (m == null || m.equals(LocalizableMessage.EMPTY)) { table.appendCell(INFO_TASKINFO_IMMEDIATE_EXECUTION.get()); } else { table.appendCell(m); } table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_ACTUAL_START.get()); table.appendCell(taskEntry.getActualStartTime()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_COMPLETION_TIME.get()); table.appendCell(taskEntry.getCompletionTime()); } writeMultiValueCells( table, INFO_TASKINFO_FIELD_DEPENDENCY.get(), taskEntry.getDependencyIds()); table.startRow(); table.appendCell(INFO_TASKINFO_FIELD_FAILED_DEPENDENCY_ACTION.get()); m = taskEntry.getFailedDependencyAction(); table.appendCell(m != null ? m : INFO_TASKINFO_NONE.get()); writeMultiValueCells( table, INFO_TASKINFO_FIELD_NOTIFY_ON_COMPLETION.get(), taskEntry.getCompletionNotificationEmailAddresses(), INFO_TASKINFO_NONE_SPECIFIED.get()); writeMultiValueCells( table, INFO_TASKINFO_FIELD_NOTIFY_ON_ERROR.get(), taskEntry.getErrorNotificationEmailAddresses(), INFO_TASKINFO_NONE_SPECIFIED.get()); StringWriter sw = new StringWriter(); TextTablePrinter tablePrinter = new TextTablePrinter(sw); tablePrinter.setTotalWidth(80); tablePrinter.setIndentWidth(INDENT); tablePrinter.setColumnWidth(1, 0); table.print(tablePrinter); app.getOutputStream().println(); app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString())); // Create a table for the task options table = new TableBuilder(); table.appendHeading(INFO_TASKINFO_OPTIONS.get(taskEntry.getType())); Map<LocalizableMessage, List<String>> taskSpecificAttrs = taskEntry.getTaskSpecificAttributeValuePairs(); for (LocalizableMessage attrName : taskSpecificAttrs.keySet()) { table.startRow(); table.appendCell(attrName); List<String> values = taskSpecificAttrs.get(attrName); if (!values.isEmpty()) { table.appendCell(values.get(0)); } if (values.size() > 1) { for (int i = 1; i < values.size(); i++) { table.startRow(); table.appendCell(); table.appendCell(values.get(i)); } } } sw = new StringWriter(); tablePrinter = new TextTablePrinter(sw); tablePrinter.setTotalWidth(80); tablePrinter.setIndentWidth(INDENT); tablePrinter.setColumnWidth(1, 0); table.print(tablePrinter); app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString())); // Print the last log message if any List<LocalizableMessage> logs = taskEntry.getLogMessages(); if (logs != null && !logs.isEmpty()) { // Create a table for the last log entry table = new TableBuilder(); table.appendHeading(INFO_TASKINFO_FIELD_LAST_LOG.get()); table.startRow(); table.appendCell(logs.get(logs.size() - 1)); sw = new StringWriter(); tablePrinter = new TextTablePrinter(sw); tablePrinter.setTotalWidth(80); tablePrinter.setIndentWidth(INDENT); tablePrinter.setColumnWidth(0, 0); table.print(tablePrinter); app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString())); } app.getOutputStream().println(); } catch (Exception e) { app.println(ERR_TASKINFO_RETRIEVING_TASK_ENTRY.get(taskId, e.getMessage())); return MenuResult.again(); } return MenuResult.success(taskEntry); }