diff options
author | Simon Rettberg | 2015-08-03 16:11:35 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-03 16:11:35 +0200 |
commit | c476a4e09af89f3c428d2438466a4ead653368c3 (patch) | |
tree | 87fe5f8b2a7642258d1431dc8864c6ba1ce54f6b /dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper | |
parent | Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1 (diff) | |
download | tutor-module-c476a4e09af89f3c428d2438466a4ead653368c3.tar.gz tutor-module-c476a4e09af89f3c428d2438466a4ead653368c3.tar.xz tutor-module-c476a4e09af89f3c428d2438466a4ead653368c3.zip |
[client] Add debug window (VMarg -Dlog=true)
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java new file mode 100644 index 00000000..14d96738 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java @@ -0,0 +1,95 @@ +package org.openslx.dozmod.gui.helper; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Insets; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.border.BevelBorder; +import javax.swing.border.EmptyBorder; +import javax.swing.text.BadLocationException; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; + +import org.apache.log4j.Appender; +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Level; +import org.apache.log4j.Priority; +import org.apache.log4j.spi.LoggingEvent; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +@SuppressWarnings("serial") +public class DebugWindow extends JPanel { + + private static final DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm:ss"); + + private final JTextPane txtLog; + + public DebugWindow() { + setLayout(new BorderLayout()); + txtLog = new JTextPane(); + txtLog.setEditable(false); + txtLog.setBackground(Color.WHITE); + txtLog.setForeground(Color.BLACK); + txtLog.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); + JScrollPane sp = new JScrollPane(txtLog, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + sp.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); + add(sp, BorderLayout.CENTER); + registerLogger(); + validate(); + } + + private void registerLogger() { + Appender appender = new AppenderSkeleton() { + + @Override + public boolean requiresLayout() { + return false; + } + + @Override + public void close() { + // Nothing to do + } + + @Override + protected void append(LoggingEvent event) { + Level l = event.getLevel(); + Color c; + if (l.isGreaterOrEqual(Priority.ERROR)) { + c = Color.RED; + } else if (l.isGreaterOrEqual(Priority.WARN)) { + c = Color.ORANGE; + } else if (l.isGreaterOrEqual(Priority.INFO)) { + c = Color.BLACK; + } else { + c = Color.GRAY; + } + log("[" + formatter.print(event.getTimeStamp()) + "] ", Color.BLACK); + log(event.getThreadName() + "@" + event.getLoggerName().replaceAll("^.*\\.", ""), Color.GRAY); + log(" " + event.getMessage() + "\n", c); + } + }; + BasicConfigurator.configure(appender); + } + + private void log(String msg, Color c) { + StyledDocument doc = txtLog.getStyledDocument(); + SimpleAttributeSet keyWord = new SimpleAttributeSet(); + StyleConstants.setForeground(keyWord, c); + try { + doc.insertString(doc.getLength(), msg, keyWord); + } catch (BadLocationException e) { + e.printStackTrace(); // Do not use LOGGER here to prevent infinite loop + } + txtLog.setCaretPosition(doc.getLength()); + } + +} |