Class LogUI

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants, ChainsawViewer, SettingsListener

    public class LogUI
    extends javax.swing.JFrame
    implements ChainsawViewer, SettingsListener
    The main entry point for Chainsaw, this class represents the first frame that is used to display a Welcome panel, and any other panels that are generated because Logging Events are streamed via a Receiver, or other mechanism.

    NOTE: Some of Chainsaw's application initialization should be performed prior to activating receivers and the logging framework used to perform self-logging.

    DELAY as much as possible the logging framework initialization process, currently initialized by the creation of a ChainsawAppenderHandler.

    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  LogUI.NewTabEventBatchReceiver
      This class handles the recption of the Event batches and creates new LogPanels if the identifier is not in use otherwise it ignores the event batch.
      private class  LogUI.TabIconHandler  
      • Nested classes/interfaces inherited from class javax.swing.JFrame

        javax.swing.JFrame.AccessibleJFrame
      • Nested classes/interfaces inherited from class java.awt.Frame

        java.awt.Frame.AccessibleAWTFrame
      • Nested classes/interfaces inherited from class java.awt.Window

        java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Constructor Summary

      Constructors 
      Constructor Description
      LogUI()
      Constructor which builds up all the visual elements of the frame including the Menu bar
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void activateViewer()
      Activates itself as a viewer by configuring Size, and location of itself, and configures the default Tabbed Pane elements with the correct layout, table columns, and sets itself viewable.
      void activateViewer​(ChainsawAppender appender)
      Allow Chainsaw v2 to be ran in-process (configured as a ChainsawAppender) NOTE: Closing Chainsaw will NOT stop the application generating the events.
      void addShutdownListener​(ShutdownListener l)
      Registers a ShutdownListener with this calss so that it can be notified when the user has requested that Chainsaw exit.
      (package private) void addWelcomePanel()  
      private void buildLogPanel​(boolean customExpression, java.lang.String ident, java.util.List<org.apache.log4j.spi.LoggingEvent> events)  
      static void createChainsawGUI​(ApplicationPreferenceModel model, javax.swing.Action newShutdownAction)
      Creates, activates, and then shows the Chainsaw GUI, optionally showing the splash screen, and using the passed shutdown action when the user requests to exit the application (if null, then Chainsaw will exit the vm)
      void createCustomExpressionLogPanel​(java.lang.String ident)  
      (package private) void displayPanel​(java.lang.String panelName, boolean display)  
      private void ensureChainsawAppenderHandlerAdded()
      Makes sure that the LoggerRepository has the ChainsawAppenderHandler added to the root logger so Chainsaw can receive all the events.
      private void ensureWelcomePanelVisible()  
      boolean exit()
      Exits the application, ensuring Settings are saved.
      private void fireShutdownEvent()
      Ensures all the registered ShutdownListeners are notified.
      java.lang.String getActiveTabName()
      DOCUMENT ME!
      ApplicationPreferenceModel getApplicationPreferenceModel()  
      (package private) LogPanel getCurrentLogPanel()
      Returns the currently selected LogPanel, if there is one, otherwise null
      java.util.List<java.lang.String> getFilterableColumns()
      DOCUMENT ME!
      java.util.Map<java.lang.String,​java.awt.Component> getPanelMap()
      DOCUMENT ME!
      (package private) java.util.Map getPanels()  
      SettingsManager getSettingsManager()
      DOCUMENT ME!
      (package private) ChainsawStatusBar getStatusBar()  
      ChainsawTabbedPane getTabbedPane()
      DOCUMENT ME!
      java.util.Map getTableMap()
      DOCUMENT ME!
      java.util.Map getTableModelMap()
      DOCUMENT ME!
      ChainsawToolBarAndMenus getToolBarAndMenus()
      DOCUMENT ME!
      private WelcomePanel getWelcomePanel()
      DOCUMENT ME!
      private void hideReceiverPanel()
      Hide the log tree pane, holding the current divider location for later use
      private void initGUI()
      Initialises the menu's and toolbars, but does not actually create any of the main panel components.
      private void initPlugins​(PluginRegistry pluginRegistry)  
      private void initPrefModelListeners()  
      private void initSocketConnectionListener()  
      boolean isLogTreePanelVisible()
      DOCUMENT ME!
      (package private) boolean isStatusBarVisible()  
      private void loadConfigurationUsingPluginClassLoader​(java.net.URL url)
      Loads the log4j configuration file specified by the url, using the PluginClassLoader instance as a TCCL, but only replacing it temporarily, with the original TCCL being restored in a finally block to ensure consitency.
      private static void loadLookAndFeelUsingPluginClassLoader​(java.lang.String lookAndFeelClassName)  
      void loadSettings​(LoadSettingsEvent event)
      Given the load event, configures the size/location of the main window etc etc.
      static void main​(java.lang.String[] args)
      Starts Chainsaw by attaching a new instance to the Log4J main root Logger via a ChainsawAppender, and activates itself
      private void performShutdownAction()
      Using the current thread, calls the registed Shutdown action's actionPerformed(...) method.
      void removeShutdownListener​(ShutdownListener l)
      Removes the registered ShutdownListener so that the listener will not be notified on a shutdown.
      private static void removeSplash()  
      (package private) void removeWelcomePanel()  
      void saveSettings​(SaveSettingsEvent event)
      Ensures the location/size of the main window is stored with the settings
      void setShutdownAction​(javax.swing.Action shutdownAction)
      Configures LogUI's with an action to execute when the user requests to exit the application, the default action is to exit the VM.
      private void setStatusBarVisible​(boolean visible)  
      void setTabbedPane​(ChainsawTabbedPane tabbedPane)
      DOCUMENT ME!
      void setToolBarAndMenus​(ChainsawToolBarAndMenus tbms)
      DOCUMENT ME!
      private void setupHelpSystem()
      Initialises the Help system and the WelcomePanel
      private void setupReceiverPanel()  
      void setupTutorial()
      DOCUMENT ME!
      void showAboutBox()  
      void showApplicationPreferences()  
      void showHelp​(java.net.URL url)
      Causes the Welcome Panel to become visible, and shows the URL specified as it's contents
      void showReceiverConfiguration()  
      private void showReceiverConfigurationPanel()
      Displays a dialog which will provide options for selecting a configuration
      private void showReceiverPanel()
      Display the log tree pane, using the last known divider location
      private static void showSplash​(java.awt.Frame owner)  
      boolean shutdown()
      Shutsdown by ensuring the Appender gets a chance to close.
      • Methods inherited from class javax.swing.JFrame

        addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
      • Methods inherited from class java.awt.Frame

        addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
      • Methods inherited from class java.awt.Window

        addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.awt.MenuContainer

        getFont, postEvent
    • Field Detail

      • MAIN_WINDOW_HEIGHT

        private static final java.lang.String MAIN_WINDOW_HEIGHT
        See Also:
        Constant Field Values
      • MAIN_WINDOW_WIDTH

        private static final java.lang.String MAIN_WINDOW_WIDTH
        See Also:
        Constant Field Values
      • DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION

        private static final double DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION
        See Also:
        Constant Field Values
      • preferencesFrame

        private final javax.swing.JFrame preferencesFrame
      • noReceiversDefined

        private boolean noReceiversDefined
      • toolbar

        private javax.swing.JToolBar toolbar
      • tableModelMap

        private final java.util.Map tableModelMap
      • tableMap

        private final java.util.Map tableMap
      • filterableColumns

        private final java.util.List<java.lang.String> filterableColumns
      • panelMap

        private final java.util.Map<java.lang.String,​java.awt.Component> panelMap
      • tutorialFrame

        private final javax.swing.JFrame tutorialFrame
      • mainReceiverSplitPane

        private javax.swing.JSplitPane mainReceiverSplitPane
      • lastMainReceiverSplitLocation

        private double lastMainReceiverSplitLocation
      • identifierPanels

        private final java.util.List<LogPanel> identifierPanels
      • dividerSize

        private int dividerSize
      • cyclicBufferSize

        private int cyclicBufferSize
      • logger

        private static org.apache.log4j.Logger logger
      • configurationURLAppArg

        private static java.lang.String configurationURLAppArg
      • isGUIFullyInitialized

        private boolean isGUIFullyInitialized
        Set to true, if and only if the GUI has completed it's full initialization. Any logging events that come in must wait until this is true, and if it is false, should wait on the initializationLock object until notified.
      • initializationLock

        private final java.lang.Object initializationLock
      • shutdownAction

        private javax.swing.Action shutdownAction
        The shutdownAction is called when the user requests to exit Chainsaw, and by default this exits the VM, but a developer may replace this action with something that better suits their needs
      • shutdownListenerList

        private javax.swing.event.EventListenerList shutdownListenerList
        Clients can register a ShutdownListener to be notified when the user has requested Chainsaw to exit.
      • repositorySelectorGuard

        private static final java.lang.Object repositorySelectorGuard
      • allColorizers

        private java.util.Map<java.lang.String,​RuleColorizer> allColorizers
    • Constructor Detail

      • LogUI

        public LogUI()
        Constructor which builds up all the visual elements of the frame including the Menu bar
    • Method Detail

      • showSplash

        private static final void showSplash​(java.awt.Frame owner)
      • removeSplash

        private static final void removeSplash()
      • addShutdownListener

        public void addShutdownListener​(ShutdownListener l)
        Registers a ShutdownListener with this calss so that it can be notified when the user has requested that Chainsaw exit.
        Parameters:
        l -
      • removeShutdownListener

        public void removeShutdownListener​(ShutdownListener l)
        Removes the registered ShutdownListener so that the listener will not be notified on a shutdown.
        Parameters:
        l -
      • main

        public static void main​(java.lang.String[] args)
        Starts Chainsaw by attaching a new instance to the Log4J main root Logger via a ChainsawAppender, and activates itself
        Parameters:
        args -
      • createChainsawGUI

        public static void createChainsawGUI​(ApplicationPreferenceModel model,
                                             javax.swing.Action newShutdownAction)
        Creates, activates, and then shows the Chainsaw GUI, optionally showing the splash screen, and using the passed shutdown action when the user requests to exit the application (if null, then Chainsaw will exit the vm)
        Parameters:
        model -
        newShutdownAction - DOCUMENT ME!
      • activateViewer

        public void activateViewer​(ChainsawAppender appender)
        Allow Chainsaw v2 to be ran in-process (configured as a ChainsawAppender) NOTE: Closing Chainsaw will NOT stop the application generating the events.
        Specified by:
        activateViewer in interface ChainsawViewer
        Parameters:
        appender -
      • initGUI

        private void initGUI()
        Initialises the menu's and toolbars, but does not actually create any of the main panel components.
      • initPlugins

        private void initPlugins​(PluginRegistry pluginRegistry)
      • setupReceiverPanel

        private void setupReceiverPanel()
      • setupHelpSystem

        private void setupHelpSystem()
        Initialises the Help system and the WelcomePanel
      • ensureWelcomePanelVisible

        private void ensureWelcomePanelVisible()
      • loadSettings

        public void loadSettings​(LoadSettingsEvent event)
        Given the load event, configures the size/location of the main window etc etc.
        Specified by:
        loadSettings in interface SettingsListener
        Parameters:
        event - DOCUMENT ME!
      • saveSettings

        public void saveSettings​(SaveSettingsEvent event)
        Ensures the location/size of the main window is stored with the settings
        Specified by:
        saveSettings in interface SettingsListener
        Parameters:
        event - DOCUMENT ME!
      • activateViewer

        public void activateViewer()
        Activates itself as a viewer by configuring Size, and location of itself, and configures the default Tabbed Pane elements with the correct layout, table columns, and sets itself viewable.
      • showReceiverPanel

        private void showReceiverPanel()
        Display the log tree pane, using the last known divider location
      • hideReceiverPanel

        private void hideReceiverPanel()
        Hide the log tree pane, holding the current divider location for later use
      • initSocketConnectionListener

        private void initSocketConnectionListener()
      • initPrefModelListeners

        private void initPrefModelListeners()
      • showReceiverConfigurationPanel

        private void showReceiverConfigurationPanel()
        Displays a dialog which will provide options for selecting a configuration
      • exit

        public boolean exit()
        Exits the application, ensuring Settings are saved.
      • addWelcomePanel

        void addWelcomePanel()
      • removeWelcomePanel

        void removeWelcomePanel()
      • showApplicationPreferences

        public void showApplicationPreferences()
      • showReceiverConfiguration

        public void showReceiverConfiguration()
      • showAboutBox

        public void showAboutBox()
      • getPanels

        java.util.Map getPanels()
      • displayPanel

        void displayPanel​(java.lang.String panelName,
                          boolean display)
      • shutdown

        public boolean shutdown()
        Shutsdown by ensuring the Appender gets a chance to close.
      • fireShutdownEvent

        private void fireShutdownEvent()
        Ensures all the registered ShutdownListeners are notified.
      • setShutdownAction

        public final void setShutdownAction​(javax.swing.Action shutdownAction)
        Configures LogUI's with an action to execute when the user requests to exit the application, the default action is to exit the VM. This Action is called AFTER all the ShutdownListeners have been notified
        Parameters:
        shutdownAction -
      • performShutdownAction

        private void performShutdownAction()
        Using the current thread, calls the registed Shutdown action's actionPerformed(...) method.
      • getCurrentLogPanel

        LogPanel getCurrentLogPanel()
        Returns the currently selected LogPanel, if there is one, otherwise null
        Returns:
        current log panel
      • setStatusBarVisible

        private void setStatusBarVisible​(boolean visible)
        Parameters:
        visible -
      • isStatusBarVisible

        boolean isStatusBarVisible()
      • getActiveTabName

        public java.lang.String getActiveTabName()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • showHelp

        public void showHelp​(java.net.URL url)
        Causes the Welcome Panel to become visible, and shows the URL specified as it's contents
        Parameters:
        url - for content to show
      • getWelcomePanel

        private WelcomePanel getWelcomePanel()
        DOCUMENT ME!
        Returns:
        welcome panel
      • isLogTreePanelVisible

        public boolean isLogTreePanelVisible()
        DOCUMENT ME!
        Returns:
        log tree panel visible flag
      • getPanelMap

        public java.util.Map<java.lang.String,​java.awt.Component> getPanelMap()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • getSettingsManager

        public SettingsManager getSettingsManager()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • getFilterableColumns

        public java.util.List<java.lang.String> getFilterableColumns()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • setToolBarAndMenus

        public void setToolBarAndMenus​(ChainsawToolBarAndMenus tbms)
        DOCUMENT ME!
        Parameters:
        tbms - DOCUMENT ME!
      • getTableMap

        public java.util.Map getTableMap()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • getTableModelMap

        public java.util.Map getTableModelMap()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • setTabbedPane

        public void setTabbedPane​(ChainsawTabbedPane tabbedPane)
        DOCUMENT ME!
        Parameters:
        tabbedPane - DOCUMENT ME!
      • getTabbedPane

        public ChainsawTabbedPane getTabbedPane()
        DOCUMENT ME!
        Returns:
        DOCUMENT ME!
      • getApplicationPreferenceModel

        public final ApplicationPreferenceModel getApplicationPreferenceModel()
        Returns:
        Returns the applicationPreferenceModel.
      • setupTutorial

        public void setupTutorial()
        DOCUMENT ME!
      • buildLogPanel

        private void buildLogPanel​(boolean customExpression,
                                   java.lang.String ident,
                                   java.util.List<org.apache.log4j.spi.LoggingEvent> events)
                            throws java.lang.IllegalArgumentException
        Throws:
        java.lang.IllegalArgumentException
      • createCustomExpressionLogPanel

        public void createCustomExpressionLogPanel​(java.lang.String ident)
      • loadConfigurationUsingPluginClassLoader

        private void loadConfigurationUsingPluginClassLoader​(java.net.URL url)
        Loads the log4j configuration file specified by the url, using the PluginClassLoader instance as a TCCL, but only replacing it temporarily, with the original TCCL being restored in a finally block to ensure consitency.
        Parameters:
        url -
      • loadLookAndFeelUsingPluginClassLoader

        private static void loadLookAndFeelUsingPluginClassLoader​(java.lang.String lookAndFeelClassName)
      • ensureChainsawAppenderHandlerAdded

        private void ensureChainsawAppenderHandlerAdded()
        Makes sure that the LoggerRepository has the ChainsawAppenderHandler added to the root logger so Chainsaw can receive all the events.