/* CloudTrail Viewer, is a Java desktop application for reading AWS CloudTrail logs files. Copyright (C) 2017 Mark P. Haskins This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package io.haskins.java.cloudtrailviewer.controller.widget; import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon; import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView; import io.haskins.java.cloudtrailviewer.model.DashboardWidget; import io.haskins.java.cloudtrailviewer.model.event.Event; import io.haskins.java.cloudtrailviewer.service.DatabaseService; import io.haskins.java.cloudtrailviewer.service.EventTableService; import io.haskins.java.cloudtrailviewer.utils.ChartHoverUtil; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableBooleanValue; import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Node; import javafx.scene.chart.PieChart; import javafx.scene.control.Tooltip; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Controller for a Pie Chart. * * Created by markhaskins on 10/01/2017. */ public class ChartPieWidgetController extends AbstractBaseController { @FXML private PieChart pieChart; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///// public methods //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public BorderPane loadFXML() { FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/widget/ChartPieWidget.fxml")); loader.setController(this); try { fxmlObject = loader.load(); } catch (IOException e) { e.printStackTrace(); } return fxmlObject; } FontAwesomeIconView getWidgetIcon() { return new FontAwesomeIconView(FontAwesomeIcon.PIE_CHART); } @Override public void configure(DashboardWidget widget, EventTableService eventTableService, DatabaseService databaseService) { super.configure(widget, eventTableService, databaseService); pieChart.setPrefWidth(widget.getWidth()); pieChart.setPrefHeight(widget.getHeight()); } public void newEvents(List<Event> events) { for (Event event : events) { newEvent(event); } } public void loadingFile(int fileName, int totalFiles) { } public void finishedLoading(boolean reload) { ObservableList<PieChart.Data> data; if (reload) { pieChart.getData().clear(); data = pieChart.getData(); } else { data = pieChart.getData(); } List<PieChart.Data> items = new ArrayList<>(); List<Map.Entry<String, Integer>> topEvents = getTopEvents(); if (topEvents != null) { for (Map.Entry<String, Integer> entry : topEvents) { PieChart.Data pcd = new PieChart.Data(entry.getKey(), entry.getValue()); items.add(pcd); } data.addAll(items); } for (PieChart.Data item: pieChart.getData()){ item.getNode().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> eventTableService.setTableEvents(keyValueMap.get(item.getName()))); Node node = item.getNode(); Tooltip t = new Tooltip(item.getName() + " : " + item.getPieValue()); Tooltip.install(node, t); } } }