private void buildCollectionDetail(MongoDatabase db, TreeItem<DbTreeValue> ti) { DbTreeValue indexCategory = new DbTreeValue(db, "Indexes", TreeValueType.CATEGORY); indexCategory.setCollectionName(ti.getValue().getDisplayValue()); ti.getChildren() .add( new DynamicTreeItem( indexCategory, new FontAwesomeIconView(FontAwesomeIcon.FOLDER), executor, popupService, this::buildIndexes)); }
public void onCreateNewDb(ActionEvent ev) { TreeItem<DbTreeValue> selectedItem = treeView.getSelectionModel().getSelectedItem(); if (selectedItem == null || selectedItem.getValue().getValueType() != TreeValueType.CONNECTION) { return; } TextInputDialog dialog = new TextInputDialog(); dialog.setContentText("Enter Name:"); dialog.setHeaderText("Create new db"); dialog .showAndWait() .ifPresent( r -> selectedItem .getChildren() .add( createDbItem( selectedItem .getValue() .getMongoConnection() .createMongoDB(dialog.getResult())))); }
public void writeDataToExcel(Sheet sheet) { LOGGER.debug("[{}] Exporting data to excel", getText()); List<ExcelColumnRenderer> columnRendererList = new ArrayList<>(); columnRendererList.add(new TaskStatusExcelColumn()); columnRendererList.add(new TaskDescriptionExcelColumn()); TimerangeProvider timerangeProvider = fetchTimereportContext.get().getTimerangeProvider(); LocalDate startDate = timerangeProvider.getStartDate(); LocalDate endDate = timerangeProvider.getEndDate(); long amountOfDaysToDisplay = ChronoUnit.DAYS.between(startDate, endDate); for (int days = 0; days <= amountOfDaysToDisplay; days++) { LocalDate currentColumnDate = timerangeProvider.getStartDate().plus(days, ChronoUnit.DAYS); String displayDate = FormattingUtil.formatDate(currentColumnDate); columnRendererList.add(new WorklogExcelColumn(displayDate, currentColumnDate)); } columnRendererList.add(new TaskWorklogSummaryExcelColumn()); TreeItem<DisplayRow> root = taskTableView.getRoot(); ObservableList<TreeItem<DisplayRow>> children = root.getChildren(); for (int columnIndex = 0; columnIndex < columnRendererList.size(); columnIndex++) { ExcelColumnRenderer excelColumnRenderer = columnRendererList.get(columnIndex); excelColumnRenderer.renderCells( columnIndex, sheet, children, fetchTimereportContext.get().getGroupByCategory().isPresent()); } // autosize column widths for (int i = 0; i < columnRendererList.size(); i++) { sheet.autoSizeColumn(i); } }
private void processWithGrouping(List<TaskWithWorklogs> tasks, DisplayData displayData) { LOGGER.debug("Processing with grouping"); List<String> distinctGroupByCriteria = tasks .stream() .map(TaskWithWorklogs::getDistinctGroupByCriteriaValues) .flatMap(Collection::stream) .distinct() .sorted(COLLATOR) .collect(Collectors.toList()); distinctGroupByCriteria.forEach( groupByCriteria -> { LOGGER.debug("Gathering data for group criteria value {}", groupByCriteria); DisplayRow groupCaptionRow = new DisplayRow(); groupCaptionRow.setIsGroupContainer(true); groupCaptionRow.setLabel(groupByCriteria); TreeItem<DisplayRow> groupRow = new TreeItem<>(groupCaptionRow); groupRow.setExpanded(true); Map<String, DisplayRow> ticketIdToDisplayRow = Maps.newHashMap(); // add sub rows to groupRow tasks .stream() .filter( taskWithWorklogs -> taskWithWorklogs.getDistinctGroupByCriteriaValues().contains(groupByCriteria)) .sorted((o1, o2) -> COLLATOR.compare(o1.getIssue(), o2.getIssue())) .forEach( taskWithWorklogs -> { // this task with worklogs contains at least one workitem // having the group by criteria DisplayRow ticketRowWithinThisGroup = ticketIdToDisplayRow.get(taskWithWorklogs.getIssue()); if (ticketRowWithinThisGroup == null) { ticketRowWithinThisGroup = new DisplayRow(); ticketRowWithinThisGroup.setLabel(taskWithWorklogs.getSummary()); ticketRowWithinThisGroup.setIssueId(taskWithWorklogs.getIssue()); ticketRowWithinThisGroup.setResolvedDate(taskWithWorklogs.getResolved()); groupRow.getChildren().add(new TreeItem<>(ticketRowWithinThisGroup)); ticketIdToDisplayRow.put( taskWithWorklogs.getIssue(), ticketRowWithinThisGroup); } DisplayRow ticketRowWithinThisGroupAsFinal = ticketRowWithinThisGroup; taskWithWorklogs .getWorklogItemList() .stream() .filter( worklogItem -> StringUtils.equals(worklogItem.getGroup(), groupByCriteria)) .sorted((o1, o2) -> o1.getDate().compareTo(o2.getDate())) .forEach( worklogItem -> { // this worklog item matches the critera // add workday entry to current row LocalDate date = worklogItem.getDate(); DisplayDayEntry workdayEntry = ticketRowWithinThisGroupAsFinal .getWorkdayEntry(date) .orElseGet( () -> { DisplayDayEntry displayDayEntry = new DisplayDayEntry(); displayDayEntry.setDate(date); ticketRowWithinThisGroupAsFinal.addDisplayDayEntry( displayDayEntry); return displayDayEntry; }); workdayEntry .getSpentTime() .addAndGet(worklogItem.getDurationInMinutes()); // also add up the spent time in the group header per group workdayEntry = groupCaptionRow .getWorkdayEntry(date) .orElseGet( () -> { DisplayDayEntry newWorkdayEntry = new DisplayDayEntry(); newWorkdayEntry.setDate(date); groupCaptionRow.addDisplayDayEntry(newWorkdayEntry); return newWorkdayEntry; }); workdayEntry .getSpentTime() .addAndGet(worklogItem.getDurationInMinutes()); }); }); // add groupRow to result displayData.addRow(groupRow); }); }
protected void refreshWorklogTableViewAndResults() { // return early if no data present or still the same data // as the last time this tab was active Optional<FetchTimereportContext> reportContextOptional = this.fetchTimereportContext; if (!reportContextOptional.isPresent() || !reportContextOptional.get().getResult().isPresent() || !resultToDisplayChangedSinceLastRender) { LOGGER.debug( "[{}] No results to display or data not changed. Not refreshing TableView and data", getText()); return; } SettingsUtil.Settings settings = SettingsUtil.loadSettings(); if (settings.isShowStatistics() && statisticsView == null || !settings.isShowStatistics() && statisticsView != null) { // statistics are disabled and were previously rendered // or statistics are enabled and weren't rendered before // update content view LOGGER.debug("Updating contentView since settings for statistics seemed to have changed"); setContent(getContentNode()); } FetchTimereportContext timereportContext = reportContextOptional.get(); TimerangeProvider timerangeProvider = timereportContext.getTimerangeProvider(); // render the table columns if the timerange changed from last result if (!lastUsedTimerangeProvider.isPresent() || !lastUsedTimerangeProvider.get().equals(timerangeProvider) || (lastCollapseState.isPresent() && lastCollapseState.get() != settings.getCollapseState()) || (lastHighlightState.isPresent() && lastHighlightState.get() != settings.getHighlightState())) { LOGGER.debug( "[{}] Regenerating columns for timerange {}", getText(), timerangeProvider.getReportTimerange().name()); taskTableView.getColumns().clear(); taskTableView.getColumns().add(taskStatusTreeTableColumn); taskTableView.getColumns().add(taskDescriptionTreeTableColumn); // render tables for all days in the selected timerange // e.g. timerange current month renders a column for // each day of the current month long amountOfDaysToDisplay = ChronoUnit.DAYS.between(timerangeProvider.getStartDate(), timerangeProvider.getEndDate()); for (int days = 0; days <= amountOfDaysToDisplay; days++) { LocalDate currentColumnDate = timerangeProvider.getStartDate().plus(days, ChronoUnit.DAYS); String displayDate = FormattingUtil.formatDate(currentColumnDate); // worklog column taskTableView.getColumns().add(new WorklogTreeTableColumn(displayDate, currentColumnDate)); } // also add another summary per task column taskTableView.getColumns().add(new TaskWorklogSummaryTreeTableColumn()); lastUsedTimerangeProvider = Optional.of(timerangeProvider); lastCollapseState = Optional.of(settings.getCollapseState()); lastHighlightState = Optional.of(settings.getHighlightState()); } // refresh data LOGGER.debug("[{}] Refreshing items in TableView", getText()); TreeItem<DisplayRow> root = taskTableView.getRoot(); root.getChildren().clear(); DisplayData displayData = getDisplayData(timereportContext, resultToDisplayChangedSinceLastRender); root.getChildren().addAll(displayData.getTreeRows()); resultToDisplayChangedSinceLastRender = false; }