package de.pbauerochse.worklogviewer.fx.tabs;
import de.pbauerochse.worklogviewer.util.FormattingUtil;
import de.pbauerochse.worklogviewer.util.SettingsUtil;
import de.pbauerochse.worklogviewer.youtrack.domain.TaskWithWorklogs;
import de.pbauerochse.worklogviewer.youtrack.domain.WorklogItem;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.VBox;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
/**
* @author Patrick Bauerochse
* @since 02.07.15
*/
public class OwnWorklogsTab extends WorklogTab {
private static final Logger LOGGER = LoggerFactory.getLogger(OwnWorklogsTab.class);
public OwnWorklogsTab() {
super(FormattingUtil.getFormatted("view.main.tabs.own"));
}
@Override
protected List<TaskWithWorklogs> getFilteredList(List<TaskWithWorklogs> tasks) {
SettingsUtil.Settings settings = SettingsUtil.loadSettings();
return tasks.stream()
.filter(taskWithWorklogs -> {
for (WorklogItem worklogItem : taskWithWorklogs.getWorklogItemList()) {
if (StringUtils.equals(worklogItem.getUsername(), settings.getYoutrackUsername())) {
return true;
}
}
return false;
})
.sorted((o1, o2) -> COLLATOR.compare(o2.getIssue(), o2.getIssue()))
.peek(taskWithWorklogs -> {
// remove items not belonging to self
taskWithWorklogs
.getWorklogItemList()
.removeIf(worklogItem -> !StringUtils.equals(worklogItem.getUsername(), settings.getYoutrackUsername()));
})
.collect(Collectors.toList());
}
@Override
protected void addAdditionalStatistics(VBox statisticsView, WorklogStatistics statistics, List<TaskWithWorklogs> displayResult) {
super.addAdditionalStatistics(statisticsView, statistics, displayResult);
if (statistics.getEmployeeToProjectToWorktime().size() > 0) {
PieChart pieChart = new PieChart();
pieChart.setLabelsVisible(false);
pieChart.setTitle(FormattingUtil.getFormatted("view.statistics.byproject"));
statisticsView.getChildren().add(pieChart);
// since getDisplayData only returns own data
// we can safely assume the employee map only contains
// one username
Map.Entry<String, Map<String, AtomicLong>> projectToWorktime = statistics.getEmployeeToProjectToWorktime().entrySet().iterator().next();
projectToWorktime.getValue().keySet().stream()
.sorted(COLLATOR::compare)
.forEach(project -> {
AtomicLong timespentForThisProject = projectToWorktime.getValue().get(project);
pieChart.getData().add(new PieChart.Data(project, timespentForThisProject.doubleValue()));
});
}
}
}