package org.openpnp.gui.support;
import java.io.IOException;
import java.util.EnumSet;
import java.util.Set;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import org.pmw.tinylog.Configuration;
import org.pmw.tinylog.LogEntry;
import org.pmw.tinylog.writers.LogEntryValue;
import org.pmw.tinylog.writers.Writer;
public class JTextLogWriter implements Writer {
private JTextArea textArea;
private int lineLimit = 1000;
public JTextLogWriter(JTextArea textArea) {
this.textArea = textArea;
}
public void setLineLimit(int lineLimit) {
this.lineLimit = lineLimit;
trim();
}
public int getLineLimit() {
return lineLimit;
}
@Override
public Set<LogEntryValue> getRequiredLogEntryValues() {
return EnumSet.of(LogEntryValue.RENDERED_LOG_ENTRY);
}
@Override
public void init(final Configuration configuration) throws IOException {}
@Override
public void write(final LogEntry logEntry) throws IOException {
String entry = logEntry.getRenderedLogEntry();
SwingUtilities.invokeLater(() -> {
textArea.append(entry);
trim();
});
}
@Override
public void flush() throws IOException {}
@Override
public void close() throws IOException {}
private void trim() {
try {
if (lineLimit > 0) {
while (textArea.getLineCount() > lineLimit + 1) {
int end = textArea.getLineEndOffset(0);
textArea.replaceRange("", 0, end);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}