/*
** 2011 September 12
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
*/
package info.ata4.util.gui;
import java.util.logging.ErrorManager;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import javax.swing.JTextArea;
/**
* Logging handler for two JTextAreas, one for normal messages and one for errors.
*
* @author Nico Bergemann <barracuda415 at yahoo.de>
*/
public class TextAreaHandler extends Handler {
private JTextArea out;
private JTextArea err;
private boolean doneHeader;
public TextAreaHandler(JTextArea out, JTextArea err) {
this.out = out;
this.err = err;
}
private void doHeaders() {
if (!doneHeader) {
String head = getFormatter().getHead(this);
out.append(head);
err.append(head);
doneHeader = true;
}
}
@Override
public void publish(LogRecord record) {
String msg;
try {
msg = getFormatter().format(record);
} catch (Exception ex) {
reportError(null, ex, ErrorManager.FORMAT_FAILURE);
return;
}
try {
doHeaders();
if (record.getLevel().intValue() >= Level.WARNING.intValue()) {
err.append(msg);
}
out.append(msg);
// make sure the last line is always visible
out.setCaretPosition(out.getDocument().getLength());
} catch (Exception ex) {
reportError(null, ex, ErrorManager.WRITE_FAILURE);
}
}
@Override
public void flush() {
// not required
}
@Override
public void close() throws SecurityException {
doHeaders();
}
}