JAL-3949 Complete new abstracted logging framework in jalview.log. Updated log calls...
[jalview.git] / src / jalview / gui / Console.java
index 1786c0c..cb53d14 100644 (file)
@@ -42,6 +42,7 @@ import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
 import java.io.PrintStream;
 
+import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JFrame;
@@ -49,13 +50,16 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
-
-import org.apache.logging.log4j.Level;
+import javax.swing.border.Border;
+import javax.swing.text.DefaultCaret;
 
 import jalview.bin.Cache;
+import jalview.log.JLoggerI.LogLevel;
+import jalview.log.JLoggerLog4j;
+import jalview.log.JalviewAppender;
 import jalview.util.ChannelProperties;
-import jalview.util.Log4j;
 import jalview.util.MessageManager;
+import jalview.util.Platform;
 
 /**
  * Simple Jalview Java Console. Version 1 - allows viewing of console output
@@ -101,9 +105,9 @@ public class Console extends WindowAdapter
 
   private int MIN_HEIGHT = 250;
 
-  private JComboBox<Level> logLevelCombo = new JComboBox<Level>();
+  private JComboBox<LogLevel> logLevelCombo = new JComboBox<LogLevel>();
 
-  protected Level startingLogLevel = Level.INFO;
+  protected LogLevel startingLogLevel = LogLevel.INFO;
 
   public Console()
   {
@@ -132,6 +136,36 @@ public class Console extends WindowAdapter
     // textArea = cpt.getTextArea();
     textArea = new JTextArea();
     textArea.setEditable(false);
+    // autoscroll
+    DefaultCaret caret = (DefaultCaret) textArea.getCaret();
+    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+    // toggle autoscroll by clicking on the text area
+    Border pausedBorder = BorderFactory.createMatteBorder(2, 2, 2, 2,
+            textArea.getForeground());
+    Border noBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2);
+    JScrollPane scrollPane = new JScrollPane(textArea);
+    scrollPane.setBorder(noBorder);
+    textArea.addMouseListener(new MouseAdapter()
+    {
+      public void mouseClicked(MouseEvent e)
+      {
+        if (e.getButton() == MouseEvent.BUTTON1)
+        {
+          if (caret.getUpdatePolicy() == DefaultCaret.ALWAYS_UPDATE)
+          {
+            caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+            scrollPane.setBorder(pausedBorder);
+          }
+          else
+          {
+            caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+            textArea.setCaretPosition(textArea.getDocument().getLength());
+            scrollPane.setBorder(noBorder);
+          }
+        }
+      }
+    });
+
     JButton clearButton = new JButton(
             MessageManager.getString("action.clear"));
     JButton copyToClipboardButton = new JButton(
@@ -168,16 +202,17 @@ public class Console extends WindowAdapter
     JLabel logLevelLabel = new JLabel(
             MessageManager.getString("label.log_level") + ":");
 
-    // logLevelCombo.addItem(Level.ALL);
-    logLevelCombo.addItem(Level.TRACE);
-    logLevelCombo.addItem(Level.DEBUG);
-    logLevelCombo.addItem(Level.INFO);
-    logLevelCombo.addItem(Level.WARN);
-    // logLevelCombo.addItem(Level.ERROR);
-    // logLevelCombo.addItem(Level.FATAL);
-    // logLevelCombo.addItem(Level.OFF);
+    // logLevelCombo.addItem(LogLevel.ALL);
+    logLevelCombo.addItem(LogLevel.TRACE);
+    logLevelCombo.addItem(LogLevel.DEBUG);
+    logLevelCombo.addItem(LogLevel.INFO);
+    logLevelCombo.addItem(LogLevel.WARN);
+    // logLevelCombo.addItem(LogLevel.ERROR);
+    // logLevelCombo.addItem(LogLevel.FATAL);
+    // logLevelCombo.addItem(LogLevel.ERROR);
+    // logLevelCombo.addItem(LogLevel.OFF);
     // set startingLogLevel
-    startingLogLevel = Cache.log == null ? Level.INFO
+    startingLogLevel = Cache.log == null ? LogLevel.INFO
             : Cache.log.getLevel();
     setChosenLogLevelCombo();
     logLevelCombo.addActionListener(new ActionListener()
@@ -186,8 +221,7 @@ public class Console extends WindowAdapter
       {
         if (Cache.log != null)
         {
-          Log4j.setLevel(Cache.log,
-                  (Level) logLevelCombo.getSelectedItem());
+          Cache.log.setLevel((LogLevel) logLevelCombo.getSelectedItem());
         }
       }
 
@@ -195,8 +229,7 @@ public class Console extends WindowAdapter
 
     // frame = cpt;
     frame.getContentPane().setLayout(new BorderLayout());
-    frame.getContentPane().add(new JScrollPane(textArea),
-            BorderLayout.CENTER);
+    frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
     JPanel southPanel = new JPanel();
     southPanel.setLayout(new GridBagLayout());
 
@@ -267,20 +300,20 @@ public class Console extends WindowAdapter
     setChosenLogLevelCombo(startingLogLevel);
   }
 
-  private void setChosenLogLevelCombo(Level setLogLevel)
+  private void setChosenLogLevelCombo(LogLevel setLogLevel)
   {
     logLevelCombo.setSelectedItem(setLogLevel);
     if (!logLevelCombo.getSelectedItem().equals(setLogLevel))
     {
       // setLogLevel not (yet) in list
-      if (setLogLevel != null && setLogLevel instanceof Level)
+      if (setLogLevel != null && setLogLevel instanceof LogLevel)
       {
         // add new item to list (might be set via .jalview_properties)
         boolean added = false;
         for (int i = 0; i < logLevelCombo.getItemCount(); i++)
         {
-          Level l = (Level) logLevelCombo.getItemAt(i);
-          if (l.isMoreSpecificThan(setLogLevel))
+          LogLevel l = (LogLevel) logLevelCombo.getItemAt(i);
+          if (l.compareTo(setLogLevel) >= 0)
           {
             logLevelCombo.insertItemAt(setLogLevel, i);
             added = true;
@@ -296,7 +329,7 @@ public class Console extends WindowAdapter
       }
       else
       {
-        logLevelCombo.setSelectedItem(Level.INFO);
+        logLevelCombo.setSelectedItem(LogLevel.INFO);
       }
     }
   }
@@ -472,9 +505,17 @@ public class Console extends WindowAdapter
     frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
     // desktop.add(frame);
     initConsole(false);
-    JalviewAppender jappender = new JalviewAppender();
-    JalviewAppender.setTextArea(textArea);
-    Log4j.addAppenderToRootLogger(jappender);
+    LogLevel level = (LogLevel) logLevelCombo.getSelectedItem();
+    if (!Platform.isJS())
+    {
+      JalviewAppender jappender = new JalviewAppender(level);
+      JalviewAppender.setTextArea(textArea);
+      jappender.start();
+      if (Cache.log != null && Cache.log instanceof JLoggerLog4j)
+      {
+        JLoggerLog4j.addAppender(Cache.log, jappender);
+      }
+    }
   }
 
   public synchronized void stopConsole()
@@ -817,7 +858,7 @@ public class Console extends WindowAdapter
       // reset log level to what it was before
       if (Cache.log != null)
       {
-        Log4j.setLevel(Cache.log, startingLogLevel);
+        Cache.log.setLevel(startingLogLevel);
       }
 
       unredirectStreams();