/* 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.observable.KeyIntegerValue; import io.haskins.java.cloudtrailviewer.model.event.Event; import io.haskins.java.cloudtrailviewer.service.DatabaseService; import io.haskins.java.cloudtrailviewer.service.EventTableService; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.TableColumn; import javafx.scene.control.TableRow; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.BorderPane; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * * Controller that provides a Table Widget * * Created by markhaskins on 09/01/2017. */ public class TableWidgetController extends AbstractBaseController { @FXML private TableView tableView; public BorderPane loadFXML() { FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/widget/TableWidget.fxml")); loader.setController(this); try { fxmlObject = loader.load(); } catch (IOException e) { e.printStackTrace(); } return fxmlObject; } FontAwesomeIconView getWidgetIcon() { return new FontAwesomeIconView(FontAwesomeIcon.TABLE); } public void newEvents(List<Event> events) { for (Event event : events) { newEvent(event); } } public void loadingFile(int fileName, int totalFiles) { } @Override public void finishedLoading(boolean reload) { ObservableList<KeyIntegerValue> data; if (reload) { tableView.getItems().clear(); data = tableView.getItems(); } else { data = tableView.getItems(); } List<KeyIntegerValue> items = new ArrayList<>(); List<Map.Entry<String, Integer>> topEvents = getTopEvents(); for (Map.Entry<String, Integer> entry : topEvents) { KeyIntegerValue kv = new KeyIntegerValue(entry.getKey(), entry.getValue()); items.add(kv); } data.addAll(items); } @Override public void configure(DashboardWidget widget, EventTableService eventTableService, DatabaseService databaseService) { super.configure(widget, eventTableService, databaseService); tableView.setPrefWidth(widget.getWidth()); tableView.setPrefHeight(widget.getHeight()); tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); addTopColumns(widget); tableView.setItems(keyValueData); tableView.setRowFactory(tv -> { TableRow<KeyIntegerValue> row = new TableRow<>(); row.setOnMouseClicked(event -> { if (!row.isEmpty()) { KeyIntegerValue rowData = row.getItem(); eventTableService.setTableEvents(keyValueMap.get(rowData.getField())); } }); return row; }); } private void addTopColumns(DashboardWidget widget) { TableColumn col1 = new TableColumn(widget.getSeriesField()); col1.setCellValueFactory(new PropertyValueFactory("Field")); TableColumn col2 = new TableColumn("Count"); col2.setCellValueFactory(new PropertyValueFactory("Count")); tableView.getColumns().addAll(col1, col2); } }