package de.pbauerochse.worklogviewer.fx.tablecolumns; import de.pbauerochse.worklogviewer.WorklogViewer; import de.pbauerochse.worklogviewer.fx.tabs.domain.DisplayRow; import de.pbauerochse.worklogviewer.util.FormattingUtil; import de.pbauerochse.worklogviewer.util.SettingsUtil; import javafx.application.Platform; import javafx.beans.property.SimpleObjectProperty; import javafx.geometry.Pos; import javafx.scene.control.Tooltip; import javafx.scene.control.TreeTableCell; import javafx.scene.control.TreeTableColumn; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static de.pbauerochse.worklogviewer.fx.tablecolumns.CellStyleClasses.*; /** * @author Patrick Bauerochse * @since 07.07.15 */ public class TaskDescriptionTreeTableColumn extends TreeTableColumn<DisplayRow, DisplayRow> { private static final Logger LOGGER = LoggerFactory.getLogger(TaskDescriptionTreeTableColumn.class); public TaskDescriptionTreeTableColumn() { super(FormattingUtil.getFormatted("view.main.issue")); setSortable(false); setCellValueFactory(param -> new SimpleObjectProperty<>(param.getValue().getValue())); setCellFactory(param -> { TreeTableCell<DisplayRow, DisplayRow> tableCell = new TreeTableCell<DisplayRow, DisplayRow>() { @Override protected void updateItem(DisplayRow item, boolean empty) { getStyleClass().removeAll(ALL); if (empty) { setText(StringUtils.EMPTY); setTooltip(null); } else { if (item.isGrandTotalSummary()) { setText(FormattingUtil.getFormatted("view.main.summary")); setTooltip(null); getStyleClass().add(SUMMARY_COLUMN_OR_CELL_CSS_CLASS); setAlignment(Pos.CENTER_RIGHT); } else if (item.isGroupContainer()) { setText(item.getLabel()); setTooltip(new Tooltip(item.getLabel())); getStyleClass().add(GROUP_COLUMN_OR_CELL_CSS_CLASS); setAlignment(Pos.CENTER_LEFT); } else { setText(item.getIssueId().get() + " - " + item.getLabel()); setTooltip(new Tooltip(getText())); getStyleClass().add(ISSUE_CELL_CSS_CLASS); setAlignment(Pos.CENTER_LEFT); } } } }; tableCell.setOnMouseClicked(event -> { TreeTableCell<DisplayRow, DisplayRow> cell = (TreeTableCell<DisplayRow, DisplayRow>) event.getSource(); DisplayRow clickedWorklogItem = cell.getTreeTableRow().getItem(); if (clickedWorklogItem != null && !clickedWorklogItem.isGrandTotalSummary() && !clickedWorklogItem.isGroupContainer()) { LOGGER.debug("Selected item {}", clickedWorklogItem.getLabel()); SettingsUtil.Settings settings = SettingsUtil.loadSettings(); String issueUrl = String.format("%s/issue/%s#tab=Time%%20Tracking", StringUtils.stripEnd(settings.getYoutrackUrl(), "/"), clickedWorklogItem.getIssueId().get()); Platform.runLater(() -> WorklogViewer.getInstance().getHostServices().showDocument(issueUrl)); } }); return tableCell; }); } }