Author: seanfinan
Date: Tue Oct 18 20:07:38 2022
New Revision: 1904686

URL: http://svn.apache.org/viewvc?rev=1904686&view=rev
Log:
Added openWebPage to SystemUtil
Added colors to logger panel based upon line content.  May be a mistake in the 
long run ...

Added:
    
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerTextFilter.java
Modified:
    
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java
    
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
    
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/pipeline/PiperRunnerPanel.java

Modified: 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java?rev=1904686&r1=1904685&r2=1904686&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java
 (original)
+++ 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/util/external/SystemUtil.java
 Tue Oct 18 20:07:38 2022
@@ -261,6 +261,24 @@ final public class SystemUtil {
    }
 
 
+   static public void openWebPage( final String page ) {
+      LOGGER.info( "Opening Web Page " + page + " ..." );
+      String command = "start \"Browser\" /max " + page;
+      final String os = System.getProperty( "os.name" );
+      if ( !os.toLowerCase()
+              .contains( "windows" ) ) {
+         command = "open " + page
+                   + " || xdg-open " + page
+                   + " || sensible-browser " + page;
+      }
+      try {
+         SystemUtil.run( command );
+      } catch ( IOException e ) {
+         LOGGER.error( e.getMessage() );
+      }
+
+   }
+
    static public boolean run( final String command ) throws IOException {
       final CommandRunner runner = new CommandRunner( command );
       return run( runner );

Modified: 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java?rev=1904686&r1=1904685&r2=1904686&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
 (original)
+++ 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerPanel.java
 Tue Oct 18 20:07:38 2022
@@ -8,8 +8,7 @@ import org.apache.log4j.spi.LoggingEvent
 
 import javax.swing.*;
 import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.PlainDocument;
+import javax.swing.text.DefaultStyledDocument;
 import java.awt.*;
 import java.util.Arrays;
 import java.util.Collection;
@@ -34,18 +33,19 @@ final public class LoggerPanel extends J
 
 
    private final Appender _appender;
-   private final Document _textAreaDoc = new PlainDocument();
+   private final DefaultStyledDocument _textAreaDoc = new 
DefaultStyledDocument();
 
    /**
     * text gui that will display log4j messages
     */
    private LoggerPanel( final Level... levels ) {
-      final JTextArea textArea = new JTextArea( _textAreaDoc );
-      textArea.setEditable( false );
-      textArea.setEnabled( false );
-      textArea.setDisabledTextColor( Color.DARK_GRAY );
-      super.setViewportView( textArea );
+      new LoggerTextFilter( _textAreaDoc );
+      final JTextPane textPane = new JTextPane( _textAreaDoc );
+      textPane.setFont( new Font( Font.MONOSPACED, Font.PLAIN, 14 ) );
+      textPane.setEditable( false );
+      super.setViewportView( textPane );
       _appender = new LogHandler( levels );
+
    }
 
    /**
@@ -115,10 +115,25 @@ final public class LoggerPanel extends J
          if ( event == null ) {
             return;
          }
-         if ( _levels.contains( event.getLevel() ) ) {
+         final Level level = event.getLevel();
+         if ( _levels.contains( level ) ) {
             final Object message = event.getMessage();
             if ( message != null ) {
-               appendText( message.toString() + "\n" );
+               String text = message.toString();
+               if ( level.equals( Level.FATAL ) || level.equals( Level.ERROR ) 
) {
+                  if ( !text.toLowerCase()
+                            .contains( "error" ) ) {
+                     text = "Error: " + text;
+                  }
+               } else if ( level.equals( Level.WARN ) ) {
+                  if ( !text.toLowerCase()
+                            .contains( "warn" ) ) {
+                     text = "Warning: " + text;
+                  }
+               } else if ( level.equals( Level.DEBUG ) ) {
+                  text = "// " + text;
+               }
+               appendText( text + "\n" );
             }
          }
       }

Added: 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerTextFilter.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerTextFilter.java?rev=1904686&view=auto
==============================================================================
--- 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerTextFilter.java
 (added)
+++ 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/component/LoggerTextFilter.java
 Tue Oct 18 20:07:38 2022
@@ -0,0 +1,141 @@
+package org.apache.ctakes.gui.component;
+
+import javax.swing.*;
+import javax.swing.text.*;
+import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author SPF , chip-nlp
+ * @since {10/18/2022}
+ */
+public class LoggerTextFilter extends DocumentFilter {
+
+   final private TextFormatter _textFormatter;
+
+
+   public LoggerTextFilter( final DefaultStyledDocument document ) {
+      _textFormatter = new TextFormatter( document );
+      document.setDocumentFilter( this );
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void remove( final FilterBypass fb, final int begin, final int 
length ) throws BadLocationException {
+      super.remove( fb, begin, length );
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void insertString( final FilterBypass fb, final int begin, final 
String text, final AttributeSet attr )
+         throws BadLocationException {
+      super.insertString( fb, begin, text, attr );
+      if ( shouldReformat( fb.getDocument(), begin, text.length() ) ) {
+         formatText( fb.getDocument() );
+      }
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void replace( final FilterBypass fb, final int begin, final int 
length, final String text,
+                        final AttributeSet attrs )
+         throws BadLocationException {
+      super.replace( fb, begin, length, text, attrs );
+      if ( shouldReformat( fb.getDocument(), begin, length ) ) {
+         formatText( fb.getDocument() );
+      }
+   }
+
+   static private boolean shouldReformat( final Document document, final int 
begin, final int length )
+         throws BadLocationException {
+      final int testLength = Math.min( length + 2, document.getLength() - 
begin );
+      final String deltaText = document.getText( begin, testLength );
+      return deltaText.contains( " " ) || deltaText.contains( "\n" ) || 
deltaText.contains( "\t" );
+   }
+
+   private void formatText( final Document document ) {
+      if ( document instanceof StyledDocument ) {
+         SwingUtilities.invokeLater( _textFormatter );
+      }
+   }
+
+   static private class TextFormatter implements Runnable {
+
+      final StyledDocument _document;
+      final Map<String, Style> _styles = new HashMap<>();
+
+      private TextFormatter( final StyledDocument document ) {
+         _document = document;
+         createStyles();
+      }
+
+      @Override
+      public void run() {
+         try {
+            final String text = _document.getText( 0, _document.getLength() );
+            int lineBegin = 0;
+            boolean lineEnded = false;
+            for ( int i = 0; i < _document.getLength(); i++ ) {
+               lineEnded = false;
+               if ( text.charAt( i ) == '\n' ) {
+                  formatLine( lineBegin, i );
+                  lineBegin = i + 1;
+                  lineEnded = true;
+               }
+            }
+            if ( !lineEnded ) {
+               formatLine( lineBegin, _document.getLength() );
+            }
+         } catch ( BadLocationException blE ) {
+//            LOGGER.error( blE.getMessage() );
+         }
+      }
+
+      private void createStyles() {
+         StyleConstants.setItalic( createStyle( "COMMENT", Color.GRAY ), true 
);
+         StyleConstants.setBold( createStyle( "ELLIPSES", Color.BLUE ), true );
+         createStyle( "ERROR", Color.RED.darker() );
+         createStyle( "WARNING", Color.ORANGE.darker() );
+         createStyle( "PLAIN", Color.BLACK );
+      }
+
+      private Style createStyle( final String name, final Color color ) {
+         final Style style = _document.addStyle( name, null );
+         StyleConstants.setForeground( style, color );
+         _styles.put( name, style );
+         return style;
+      }
+
+      void formatLine( final int begin, final int end ) throws 
BadLocationException {
+         final int length = end - begin;
+         if ( length <= 0 ) {
+            return;
+         }
+         final String text = _document.getText( begin, length );
+         System.out.println( "formatting " + text );
+         if ( text.startsWith( "#" ) || text.startsWith( "//" ) ) {
+            _document.setCharacterAttributes( begin, length, _styles.get( 
"COMMENT" ), true );
+            return;
+         }
+         final String lower = text.toLowerCase();
+         if ( lower.contains( "error" ) ) {
+            _document.setCharacterAttributes( begin, length, _styles.get( 
"ERROR" ), true );
+         } else if ( lower.contains( "warn" ) ) {
+            _document.setCharacterAttributes( begin, length, _styles.get( 
"WARNING" ), true );
+         } else if ( lower.contains( "..." ) ) {
+            _document.setCharacterAttributes( begin, length, _styles.get( 
"ELLIPSES" ), true );
+         } else {
+            _document.setCharacterAttributes( begin, length, _styles.get( 
"PLAIN" ), true );
+         }
+      }
+
+   }
+
+}

Modified: 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/pipeline/PiperRunnerPanel.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/pipeline/PiperRunnerPanel.java?rev=1904686&r1=1904685&r2=1904686&view=diff
==============================================================================
--- 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/pipeline/PiperRunnerPanel.java
 (original)
+++ 
ctakes/trunk/ctakes-gui/src/main/java/org/apache/ctakes/gui/pipeline/PiperRunnerPanel.java
 Tue Oct 18 20:07:38 2022
@@ -555,29 +555,13 @@ final public class PiperRunnerPanel exte
    }
 
    private final class HelpAction implements ActionListener {
-
       @Override
       public void actionPerformed( final ActionEvent event ) {
          if ( _helpButton == null ) {
             return;
          }
-         LOGGER.info( "Opening Web Page ..." );
-         String command = "start \"Browser\" /max https://cwiki.apache";
-                          + 
".org/confluence/display/CTAKES/Piper+File+Submitter+GUI";
-         final String os = System.getProperty( "os.name" );
-         if ( !os.toLowerCase()
-                 .contains( "windows" ) ) {
-            command = "xdg-open 
https://cwiki.apache.org/confluence/display/CTAKES/Piper+File+Submitter+GUI";
-                      + " || sensible-browser"
-                      + " 
https://cwiki.apache.org/confluence/display/CTAKES/Piper+File+Submitter+GUI";;
-         }
-         try {
-            SystemUtil.run( command );
-         } catch ( IOException e ) {
-            LOGGER.error( e.getMessage() );
-         }
+         SystemUtil.openWebPage( 
"https://cwiki.apache.org/confluence/display/CTAKES/Piper+File+Submitter+GUI"; );
       }
-
    }
 
 


Reply via email to