package io.haskins.java.cloudtrailviewer.controller.components;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
import io.haskins.java.cloudtrailviewer.CloudTrailViewer;
import io.haskins.java.cloudtrailviewer.controller.dialog.filechooser.FileChooserController;
import io.haskins.java.cloudtrailviewer.controller.widget.AbstractBaseController;
import io.haskins.java.cloudtrailviewer.model.DashboardWidget;
import io.haskins.java.cloudtrailviewer.model.DialogAction;
import io.haskins.java.cloudtrailviewer.model.LoadLogsRequest;
import io.haskins.java.cloudtrailviewer.service.AccountService;
import io.haskins.java.cloudtrailviewer.service.DashboardService;
import io.haskins.java.cloudtrailviewer.service.EventService;
import io.haskins.java.cloudtrailviewer.service.EventTableService;
import io.haskins.java.cloudtrailviewer.utils.AwsService;
import io.haskins.java.cloudtrailviewer.utils.WidgetUtils;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.Pane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* Controller for ToolBar
*
* Created by markhaskins on 19/02/2017.
*/
@Component
public class ToolBarController {
@FXML private Button btnLocal;
@FXML private Button btnS3;
@FXML private Button btnAllEvents;
@FXML private Button btnMap;
@FXML private Button btnTable;
@FXML private Button btnChartPie;
@FXML private Button btnChartBar;
@FXML private Button btnChartStacked;
@FXML private Button btnError;
@FXML private Button btnResource;
@FXML private Button btnSecurity;
private final EventService eventService;
private final AccountService accountDao;
private final DashboardService dashboardService;
private final EventTableService eventTableService;
private final AwsService awsService;
@Autowired
public ToolBarController(
DashboardService dashboardService, EventService eventService,
AccountService accountDao, EventTableService eventTableService,
AwsService awsService) {
this.dashboardService = dashboardService;
this.eventService = eventService;
this.accountDao = accountDao;
this.eventTableService = eventTableService;
this.awsService = awsService;
}
@FXML
public void initialize() {
btnLocal.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.FOLDER_OPEN));
btnLocal.setTooltip(new Tooltip("Load Local Files"));
btnS3.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.CLOUD_DOWNLOAD));
btnS3.setTooltip(new Tooltip("Load Files from S3"));
btnAllEvents.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.ARCHIVE));
btnAllEvents.setTooltip(new Tooltip("View all Events"));
btnMap.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.MAP_MARKER));
btnMap.setTooltip(new Tooltip("Add Map"));
btnTable.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.TABLE));
btnTable.setTooltip(new Tooltip("Add Table"));
btnChartPie.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.PIE_CHART));
btnChartPie.setTooltip(new Tooltip("Add Pie Chart"));
btnChartBar.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.BAR_CHART));
btnChartBar.setTooltip(new Tooltip("Add Bar Chart"));
btnChartStacked.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.BAR_CHART));
btnChartStacked.setTooltip(new Tooltip("Add Stacked Bar Chart"));
btnError.setTooltip(new Tooltip("Add Error Widget"));
btnError.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.EXCLAMATION_TRIANGLE));
btnResource.setTooltip(new Tooltip("Add Resource Widget"));
btnResource.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.SERVER));
btnSecurity.setGraphic(new FontAwesomeIconView(FontAwesomeIcon.SHIELD));
btnSecurity.setTooltip(new Tooltip("Add Security Widget"));
}
@FXML private void doLocal() {
handleRequest(showFileChooser(true), EventService.FILE_TYPE_LOCAL);
}
@FXML private void doS3() {
handleRequest(showFileChooser(false), EventService.FILE_TYPE_S3);
}
@FXML private void doMap() {
dashboardService.addWidgetToDashboard(new DashboardWidget("Map"));
}
@FXML private void doTable() {
DashboardWidget newWidget = new DashboardWidget("Table");
DialogAction configureWidgetAction = WidgetUtils.showWidgetDialog(newWidget, false);
if (configureWidgetAction.getActionCode() == DialogAction.ACTION_CANCEL) return;
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doChartPie() {
DashboardWidget newWidget = new DashboardWidget("ChartPie");
DialogAction configureWidgetAction = WidgetUtils.showWidgetDialog(newWidget, false);
if (configureWidgetAction.getActionCode() == DialogAction.ACTION_CANCEL) return;
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doChartBar() {
DashboardWidget newWidget = new DashboardWidget("ChartBar");
DialogAction configureWidgetAction = WidgetUtils.showWidgetDialog(newWidget, false);
if (configureWidgetAction.getActionCode() == DialogAction.ACTION_CANCEL) return;
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doChartStacked() {
DashboardWidget newWidget = new DashboardWidget("ChartBarStacked");
DialogAction configureWidgetAction = WidgetUtils.showWidgetDialog(newWidget, false);
if (configureWidgetAction.getActionCode() == DialogAction.ACTION_CANCEL) return;
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doError() {
DashboardWidget newWidget = new DashboardWidget("TableError");
configureFixedWidgets(newWidget);
newWidget.setTitle("Errors");
newWidget.setSeriesField("ErrorCode");
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doResource() {
DashboardWidget newWidget = new DashboardWidget("TableResources");
configureFixedWidgets(newWidget);
newWidget.setTitle("Resources");
newWidget.setSeriesField("EventName");
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void doSecurity() {
DashboardWidget newWidget = new DashboardWidget("TableSecurity");
configureFixedWidgets(newWidget);
newWidget.setTitle("Security");
newWidget.setSeriesField("EventName");
dashboardService.addWidgetToDashboard(newWidget);
}
@FXML private void allEvents() {
this.eventTableService.setTableEvents(eventService.getAllEvents());
}
private void handleRequest(LoadLogsRequest request, int requestType) {
if (request != null && !request.getFilenames().isEmpty()) {
eventService.loadFiles(request.getFilenames(), request.getFilter(), requestType);
}
}
private LoadLogsRequest showFileChooser(boolean localFiles) {
try {
String fxmlFile = "/fxml/dialog/filechooser/FileChooser.fxml";
FXMLLoader loader = new FXMLLoader();
loader.setLocation(CloudTrailViewer.class.getResource(fxmlFile));
Pane page = loader.load();
Scene scene = new Scene(page);
scene.getStylesheets().add(getClass().getResource("/style/fileChooser.css").toExternalForm());
Stage dialogStage = new Stage();
dialogStage.initModality(Modality.APPLICATION_MODAL);
dialogStage.setScene(scene);
FileChooserController controller = loader.getController();
if (localFiles) {
controller.init(dialogStage, null, null);
} else {
controller.init(dialogStage, accountDao, awsService);
}
dialogStage.showAndWait();
return controller.getSelectedItems();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private void configureFixedWidgets(DashboardWidget widget) {
widget.setType(AbstractBaseController.WIDGET_TYPE_ALL);
widget.setTop(-1);
widget.setWidth(335);
widget.setHeight(327);
}
}