package com.twasyl.slideshowfx.controllers;
import com.twasyl.slideshowfx.logs.SlideshowFXHandler;
import com.twasyl.slideshowfx.ui.controls.ZoomTextArea;
import javafx.beans.property.adapter.ReadOnlyJavaBeanStringProperty;
import javafx.beans.property.adapter.ReadOnlyJavaBeanStringPropertyBuilder;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Controller class for the {@code Logs.fxml} file.
*
* @author Thierry Wasylczenko
* @since SlideshowFX 1.0
* @since 1.0
*/
public class LogsController implements Initializable {
private static final Logger LOGGER = Logger.getLogger(LogsController.class.getName());
private SlideshowFXHandler handler;
@FXML private ZoomTextArea logsArea;
private void refreshLogs() {
if(handler != null) {
this.logsArea.setText(handler.getAllLogs());
} else {
logsArea.setText("");
}
}
private void setLogHandlerListener() throws NoSuchMethodException {
if(this.handler != null) {
final ReadOnlyJavaBeanStringProperty latestLog = new ReadOnlyJavaBeanStringPropertyBuilder()
.bean(this.handler)
.getter("getLatestLog")
.name("latestLog")
.build();
latestLog.addListener((value, oldLog, newLog) -> {
if(newLog != null) {
this.logsArea.appendText(System.lineSeparator());
this.logsArea.appendText(newLog);
}
});
}
}
@Override
public void initialize(URL location, ResourceBundle resources) {
this.handler = SlideshowFXHandler.getSingleton();
this.refreshLogs();
try {
this.setLogHandlerListener();
} catch (NoSuchMethodException e) {
LOGGER.log(Level.SEVERE, "Can not initialize the logs controller properly");
}
}
}