You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2018/03/13 07:04:48 UTC
[20/27] logging-chainsaw git commit: Reformat code for consistency
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index dcf16a0..8bbd2d4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -17,113 +17,8 @@
package org.apache.log4j.chainsaw;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Point;
-import java.awt.Toolkit;
-import java.awt.Window;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionAdapter;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.swing.AbstractAction;
-import javax.swing.AbstractListModel;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.ComboBoxEditor;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JEditorPane;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenuItem;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.JScrollPane;
-import javax.swing.JSeparator;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-import javax.swing.KeyStroke;
-import javax.swing.ListSelectionModel;
-import javax.swing.MutableComboBoxModel;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.WindowConstants;
-import javax.swing.event.CellEditorListener;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
-import javax.swing.event.TableColumnModelEvent;
-import javax.swing.event.TableColumnModelListener;
-import javax.swing.event.TableModelEvent;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-import javax.swing.text.Document;
-
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
@@ -150,8 +45,25 @@ import org.apache.log4j.rule.Rule;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.LoggingEventFieldResolver;
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import javax.swing.text.Document;
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.*;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.*;
+import java.net.URLEncoder;
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.List;
/**
@@ -193,597 +105,595 @@ import com.thoughtworks.xstream.io.xml.DomDriver;
* CHAINSAW_CAPACITY system property) or ArrayList (no max size)
* <li>use the mouse context menu to 'best-fit' columns, define display
* expression filters based on mouse location and access other capabilities
- *</ul>
- *
- *@see org.apache.log4j.chainsaw.color.ColorPanel
- *@see org.apache.log4j.rule.ExpressionRule
- *@see org.apache.log4j.spi.LoggingEventFieldResolver
- *
- *@author Scott Deboy (sdeboy at apache.org)
- *@author Paul Smith (psmith at apache.org)
- *@author Stephen Pain
- *@author Isuru Suriarachchi
+ * </ul>
*
+ * @author Scott Deboy (sdeboy at apache.org)
+ * @author Paul Smith (psmith at apache.org)
+ * @author Stephen Pain
+ * @author Isuru Suriarachchi
+ * @see org.apache.log4j.chainsaw.color.ColorPanel
+ * @see org.apache.log4j.rule.ExpressionRule
+ * @see org.apache.log4j.spi.LoggingEventFieldResolver
*/
public class LogPanel extends DockablePanel implements EventBatchListener, Profileable {
- private static final DateFormat TIMESTAMP_DATE_FORMAT = new SimpleDateFormat(Constants.TIMESTAMP_RULE_FORMAT);
- private static final double DEFAULT_DETAIL_SPLIT_LOCATION = 0.71d;
- private static final double DEFAULT_LOG_TREE_SPLIT_LOCATION = 0.2d;
- private final String identifier;
- private final ChainsawStatusBar statusBar;
- private final JFrame logPanelPreferencesFrame = new JFrame();
- private ColorPanel colorPanel;
- private final JFrame colorFrame = new JFrame();
- private final JFrame undockedFrame;
- private final DockablePanel externalPanel;
- private final Action dockingAction;
- private final JToolBar undockedToolbar;
- private final JSortTable table;
- private final TableColorizingRenderer renderer;
- private final EventContainer tableModel;
- private final JEditorPane detail;
- private final JSplitPane lowerPanel;
- private final DetailPaneUpdater detailPaneUpdater;
- private final JPanel detailPanel = new JPanel(new BorderLayout());
- private final JSplitPane nameTreeAndMainPanelSplit;
- private final LoggerNameTreePanel logTreePanel;
- private final LogPanelPreferenceModel preferenceModel = new LogPanelPreferenceModel();
- private ApplicationPreferenceModel applicationPreferenceModel;
- private final LogPanelPreferencePanel logPanelPreferencesPanel;
- private final FilterModel filterModel = new FilterModel();
- private final RuleColorizer colorizer = new RuleColorizer();
- private final RuleMediator tableRuleMediator = new RuleMediator(false);
- private final RuleMediator searchRuleMediator = new RuleMediator(true);
- private final EventDetailLayout detailLayout = new EventDetailLayout();
- private double lastLogTreePanelSplitLocation = DEFAULT_LOG_TREE_SPLIT_LOCATION;
- private Point currentPoint;
- private JTable currentTable;
- private boolean paused = false;
- private Rule findRule;
- private String currentFindRuleText;
- private Rule findMarkerRule;
- private final int dividerSize;
- static final String TABLE_COLUMN_ORDER = "table.columns.order";
- static final String TABLE_COLUMN_WIDTHS = "table.columns.widths";
- static final String COLORS_EXTENSION = ".colors";
- private static final int LOG_PANEL_SERIALIZATION_VERSION_NUMBER = 2; //increment when format changes
- private int previousLastIndex = -1;
- private final Logger logger = LogManager.getLogger(LogPanel.class);
- private AutoFilterComboBox filterCombo;
- private AutoFilterComboBox findCombo;
- private JScrollPane eventsPane;
- private int currentSearchMatchCount;
- private Rule clearTableExpressionRule;
- private int lowerPanelDividerLocation;
- private EventContainer searchModel;
- private final JSortTable searchTable;
- private TableColorizingRenderer searchRenderer;
- private ToggleToolTips mainToggleToolTips;
- private ToggleToolTips searchToggleToolTips;
- private JScrollPane detailPane;
- private JScrollPane searchPane;
- //only one tableCellEditor, shared by both tables
- private TableCellEditor markerCellEditor;
- private JToolBar detailToolbar;
- private boolean searchResultsDisplayed;
- private ColorizedEventAndSearchMatchThumbnail colorizedEventAndSearchMatchThumbnail;
- private EventTimeDeltaMatchThumbnail eventTimeDeltaMatchThumbnail;
- private boolean isDetailPanelVisible;
-
- /**
- * Creates a new LogPanel object. If a LogPanel with this identifier has
- * been loaded previously, reload settings saved on last exit.
- *
- * @param statusBar shared status bar, provided by main application
- * @param identifier used to load and save settings
- */
- public LogPanel(final ChainsawStatusBar statusBar, final String identifier, int cyclicBufferSize,
- Map<String, RuleColorizer> allColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
- this.identifier = identifier;
- this.statusBar = statusBar;
- this.applicationPreferenceModel = applicationPreferenceModel;
- this.logPanelPreferencesPanel = new LogPanelPreferencePanel(preferenceModel, applicationPreferenceModel);
- logger.debug("creating logpanel for " + identifier);
-
- setLayout(new BorderLayout());
-
- String prototypeValue = "1231231231231231231231";
-
- filterCombo = new AutoFilterComboBox();
- findCombo = new AutoFilterComboBox();
-
- filterCombo.setPrototypeDisplayValue(prototypeValue);
- buildCombo(filterCombo, true, findCombo.model);
-
- findCombo.setPrototypeDisplayValue(prototypeValue);
- buildCombo(findCombo, false, filterCombo.model);
-
- final Map<Object, String> columnNameKeywordMap = new HashMap<>();
- columnNameKeywordMap.put(ChainsawConstants.CLASS_COL_NAME, LoggingEventFieldResolver.CLASS_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.FILE_COL_NAME, LoggingEventFieldResolver.FILE_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.LEVEL_COL_NAME, LoggingEventFieldResolver.LEVEL_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.LINE_COL_NAME, LoggingEventFieldResolver.LINE_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.LOGGER_COL_NAME, LoggingEventFieldResolver.LOGGER_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.NDC_COL_NAME, LoggingEventFieldResolver.NDC_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.MESSAGE_COL_NAME, LoggingEventFieldResolver.MSG_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.THREAD_COL_NAME, LoggingEventFieldResolver.THREAD_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.THROWABLE_COL_NAME, LoggingEventFieldResolver.EXCEPTION_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.TIMESTAMP_COL_NAME, LoggingEventFieldResolver.TIMESTAMP_FIELD);
- columnNameKeywordMap.put(ChainsawConstants.ID_COL_NAME.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + Constants.LOG4J_ID_KEY);
- columnNameKeywordMap.put(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
- columnNameKeywordMap.put(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
-
- logPanelPreferencesFrame.setTitle("'" + identifier + "' Log Panel Preferences");
- logPanelPreferencesFrame.setIconImage(
- ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
- logPanelPreferencesFrame.getContentPane().add(new JScrollPane(logPanelPreferencesPanel));
-
- logPanelPreferencesFrame.setSize(740, 520);
-
- logPanelPreferencesPanel.setOkCancelActionListener(
+ private static final DateFormat TIMESTAMP_DATE_FORMAT = new SimpleDateFormat(Constants.TIMESTAMP_RULE_FORMAT);
+ private static final double DEFAULT_DETAIL_SPLIT_LOCATION = 0.71d;
+ private static final double DEFAULT_LOG_TREE_SPLIT_LOCATION = 0.2d;
+ private final String identifier;
+ private final ChainsawStatusBar statusBar;
+ private final JFrame logPanelPreferencesFrame = new JFrame();
+ private ColorPanel colorPanel;
+ private final JFrame colorFrame = new JFrame();
+ private final JFrame undockedFrame;
+ private final DockablePanel externalPanel;
+ private final Action dockingAction;
+ private final JToolBar undockedToolbar;
+ private final JSortTable table;
+ private final TableColorizingRenderer renderer;
+ private final EventContainer tableModel;
+ private final JEditorPane detail;
+ private final JSplitPane lowerPanel;
+ private final DetailPaneUpdater detailPaneUpdater;
+ private final JPanel detailPanel = new JPanel(new BorderLayout());
+ private final JSplitPane nameTreeAndMainPanelSplit;
+ private final LoggerNameTreePanel logTreePanel;
+ private final LogPanelPreferenceModel preferenceModel = new LogPanelPreferenceModel();
+ private ApplicationPreferenceModel applicationPreferenceModel;
+ private final LogPanelPreferencePanel logPanelPreferencesPanel;
+ private final FilterModel filterModel = new FilterModel();
+ private final RuleColorizer colorizer = new RuleColorizer();
+ private final RuleMediator tableRuleMediator = new RuleMediator(false);
+ private final RuleMediator searchRuleMediator = new RuleMediator(true);
+ private final EventDetailLayout detailLayout = new EventDetailLayout();
+ private double lastLogTreePanelSplitLocation = DEFAULT_LOG_TREE_SPLIT_LOCATION;
+ private Point currentPoint;
+ private JTable currentTable;
+ private boolean paused = false;
+ private Rule findRule;
+ private String currentFindRuleText;
+ private Rule findMarkerRule;
+ private final int dividerSize;
+ static final String TABLE_COLUMN_ORDER = "table.columns.order";
+ static final String TABLE_COLUMN_WIDTHS = "table.columns.widths";
+ static final String COLORS_EXTENSION = ".colors";
+ private static final int LOG_PANEL_SERIALIZATION_VERSION_NUMBER = 2; //increment when format changes
+ private int previousLastIndex = -1;
+ private final Logger logger = LogManager.getLogger(LogPanel.class);
+ private AutoFilterComboBox filterCombo;
+ private AutoFilterComboBox findCombo;
+ private JScrollPane eventsPane;
+ private int currentSearchMatchCount;
+ private Rule clearTableExpressionRule;
+ private int lowerPanelDividerLocation;
+ private EventContainer searchModel;
+ private final JSortTable searchTable;
+ private TableColorizingRenderer searchRenderer;
+ private ToggleToolTips mainToggleToolTips;
+ private ToggleToolTips searchToggleToolTips;
+ private JScrollPane detailPane;
+ private JScrollPane searchPane;
+ //only one tableCellEditor, shared by both tables
+ private TableCellEditor markerCellEditor;
+ private JToolBar detailToolbar;
+ private boolean searchResultsDisplayed;
+ private ColorizedEventAndSearchMatchThumbnail colorizedEventAndSearchMatchThumbnail;
+ private EventTimeDeltaMatchThumbnail eventTimeDeltaMatchThumbnail;
+ private boolean isDetailPanelVisible;
+
+ /**
+ * Creates a new LogPanel object. If a LogPanel with this identifier has
+ * been loaded previously, reload settings saved on last exit.
+ *
+ * @param statusBar shared status bar, provided by main application
+ * @param identifier used to load and save settings
+ */
+ public LogPanel(final ChainsawStatusBar statusBar, final String identifier, int cyclicBufferSize,
+ Map<String, RuleColorizer> allColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
+ this.identifier = identifier;
+ this.statusBar = statusBar;
+ this.applicationPreferenceModel = applicationPreferenceModel;
+ this.logPanelPreferencesPanel = new LogPanelPreferencePanel(preferenceModel, applicationPreferenceModel);
+ logger.debug("creating logpanel for " + identifier);
+
+ setLayout(new BorderLayout());
+
+ String prototypeValue = "1231231231231231231231";
+
+ filterCombo = new AutoFilterComboBox();
+ findCombo = new AutoFilterComboBox();
+
+ filterCombo.setPrototypeDisplayValue(prototypeValue);
+ buildCombo(filterCombo, true, findCombo.model);
+
+ findCombo.setPrototypeDisplayValue(prototypeValue);
+ buildCombo(findCombo, false, filterCombo.model);
+
+ final Map<Object, String> columnNameKeywordMap = new HashMap<>();
+ columnNameKeywordMap.put(ChainsawConstants.CLASS_COL_NAME, LoggingEventFieldResolver.CLASS_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.FILE_COL_NAME, LoggingEventFieldResolver.FILE_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.LEVEL_COL_NAME, LoggingEventFieldResolver.LEVEL_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.LINE_COL_NAME, LoggingEventFieldResolver.LINE_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.LOGGER_COL_NAME, LoggingEventFieldResolver.LOGGER_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.NDC_COL_NAME, LoggingEventFieldResolver.NDC_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.MESSAGE_COL_NAME, LoggingEventFieldResolver.MSG_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.THREAD_COL_NAME, LoggingEventFieldResolver.THREAD_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.THROWABLE_COL_NAME, LoggingEventFieldResolver.EXCEPTION_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.TIMESTAMP_COL_NAME, LoggingEventFieldResolver.TIMESTAMP_FIELD);
+ columnNameKeywordMap.put(ChainsawConstants.ID_COL_NAME.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + Constants.LOG4J_ID_KEY);
+ columnNameKeywordMap.put(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ columnNameKeywordMap.put(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+
+ logPanelPreferencesFrame.setTitle("'" + identifier + "' Log Panel Preferences");
+ logPanelPreferencesFrame.setIconImage(
+ ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+ logPanelPreferencesFrame.getContentPane().add(new JScrollPane(logPanelPreferencesPanel));
+
+ logPanelPreferencesFrame.setSize(740, 520);
+
+ logPanelPreferencesPanel.setOkCancelActionListener(
e -> logPanelPreferencesFrame.setVisible(false));
KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
- Action closeLogPanelPreferencesFrameAction = new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- logPanelPreferencesFrame.setVisible(false);
- }
- };
- logPanelPreferencesFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); logPanelPreferencesFrame.getRootPane().
- getActionMap().put("ESCAPE", closeLogPanelPreferencesFrameAction);
+ Action closeLogPanelPreferencesFrameAction = new AbstractAction() {
+ public void actionPerformed(ActionEvent e) {
+ logPanelPreferencesFrame.setVisible(false);
+ }
+ };
+ logPanelPreferencesFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
+ logPanelPreferencesFrame.getRootPane().
+ getActionMap().put("ESCAPE", closeLogPanelPreferencesFrameAction);
- setDetailPaneConversionPattern(
- DefaultLayoutFactory.getDefaultPatternLayout());
- detailLayout.setConversionPattern(
- DefaultLayoutFactory.getDefaultPatternLayout());
+ setDetailPaneConversionPattern(
+ DefaultLayoutFactory.getDefaultPatternLayout());
+ detailLayout.setConversionPattern(
+ DefaultLayoutFactory.getDefaultPatternLayout());
- undockedFrame = new JFrame(identifier);
- undockedFrame.setDefaultCloseOperation(
- WindowConstants.DO_NOTHING_ON_CLOSE);
+ undockedFrame = new JFrame(identifier);
+ undockedFrame.setDefaultCloseOperation(
+ WindowConstants.DO_NOTHING_ON_CLOSE);
- if (ChainsawIcons.UNDOCKED_ICON != null) {
- undockedFrame.setIconImage(
- new ImageIcon(ChainsawIcons.UNDOCKED_ICON).getImage());
- }
+ if (ChainsawIcons.UNDOCKED_ICON != null) {
+ undockedFrame.setIconImage(
+ new ImageIcon(ChainsawIcons.UNDOCKED_ICON).getImage());
+ }
- externalPanel = new DockablePanel();
- externalPanel.setLayout(new BorderLayout());
+ externalPanel = new DockablePanel();
+ externalPanel.setLayout(new BorderLayout());
- undockedFrame.addWindowListener(
- new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- dock();
- }
- });
+ undockedFrame.addWindowListener(
+ new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dock();
+ }
+ });
- undockedToolbar = createDockwindowToolbar();
- externalPanel.add(undockedToolbar, BorderLayout.NORTH);
- undockedFrame.getContentPane().add(externalPanel);
- undockedFrame.setSize(new Dimension(1024, 768));
- undockedFrame.pack();
+ undockedToolbar = createDockwindowToolbar();
+ externalPanel.add(undockedToolbar, BorderLayout.NORTH);
+ undockedFrame.getContentPane().add(externalPanel);
+ undockedFrame.setSize(new Dimension(1024, 768));
+ undockedFrame.pack();
- preferenceModel.addPropertyChangeListener(
- "scrollToBottom",
+ preferenceModel.addPropertyChangeListener(
+ "scrollToBottom",
evt -> {
- boolean value = (Boolean) evt.getNewValue();
- if (value) {
- scrollToBottom();
- }
+ boolean value = (Boolean) evt.getNewValue();
+ if (value) {
+ scrollToBottom();
+ }
});
- /*
- * Menus on which the preferencemodels rely
- */
+ /*
+ * Menus on which the preferencemodels rely
+ */
- /**
- * Setup a popup menu triggered for Timestamp column to allow time stamp
- * format changes
- */
- final JPopupMenu dateFormatChangePopup = new JPopupMenu();
- final JRadioButtonMenuItem isoButton =
- new JRadioButtonMenuItem(
- new AbstractAction("Use ISO8601Format") {
- public void actionPerformed(ActionEvent e) {
- preferenceModel.setDateFormatPattern("ISO8601");
- }
- });
- final JRadioButtonMenuItem simpleTimeButton =
- new JRadioButtonMenuItem(
- new AbstractAction("Use simple time") {
- public void actionPerformed(ActionEvent e) {
- preferenceModel.setDateFormatPattern("HH:mm:ss");
- }
- });
+ /**
+ * Setup a popup menu triggered for Timestamp column to allow time stamp
+ * format changes
+ */
+ final JPopupMenu dateFormatChangePopup = new JPopupMenu();
+ final JRadioButtonMenuItem isoButton =
+ new JRadioButtonMenuItem(
+ new AbstractAction("Use ISO8601Format") {
+ public void actionPerformed(ActionEvent e) {
+ preferenceModel.setDateFormatPattern("ISO8601");
+ }
+ });
+ final JRadioButtonMenuItem simpleTimeButton =
+ new JRadioButtonMenuItem(
+ new AbstractAction("Use simple time") {
+ public void actionPerformed(ActionEvent e) {
+ preferenceModel.setDateFormatPattern("HH:mm:ss");
+ }
+ });
- ButtonGroup dfBG = new ButtonGroup();
- dfBG.add(isoButton);
- dfBG.add(simpleTimeButton);
- simpleTimeButton.setSelected(true);
- dateFormatChangePopup.add(isoButton);
- dateFormatChangePopup.add(simpleTimeButton);
+ ButtonGroup dfBG = new ButtonGroup();
+ dfBG.add(isoButton);
+ dfBG.add(simpleTimeButton);
+ simpleTimeButton.setSelected(true);
+ dateFormatChangePopup.add(isoButton);
+ dateFormatChangePopup.add(simpleTimeButton);
- final JCheckBoxMenuItem menuItemLoggerTree =
- new JCheckBoxMenuItem("Show Logger Tree");
- menuItemLoggerTree.addActionListener(
+ final JCheckBoxMenuItem menuItemLoggerTree =
+ new JCheckBoxMenuItem("Show Logger Tree");
+ menuItemLoggerTree.addActionListener(
e -> preferenceModel.setLogTreePanelVisible(
- menuItemLoggerTree.isSelected()));
- menuItemLoggerTree.setIcon(new ImageIcon(ChainsawIcons.WINDOW_ICON));
+ menuItemLoggerTree.isSelected()));
+ menuItemLoggerTree.setIcon(new ImageIcon(ChainsawIcons.WINDOW_ICON));
- final JCheckBoxMenuItem menuItemToggleDetails =
- new JCheckBoxMenuItem("Show Detail Pane");
- menuItemToggleDetails.addActionListener(
+ final JCheckBoxMenuItem menuItemToggleDetails =
+ new JCheckBoxMenuItem("Show Detail Pane");
+ menuItemToggleDetails.addActionListener(
e -> preferenceModel.setDetailPaneVisible(
- menuItemToggleDetails.isSelected()));
+ menuItemToggleDetails.isSelected()));
- menuItemToggleDetails.setIcon(new ImageIcon(ChainsawIcons.INFO));
+ menuItemToggleDetails.setIcon(new ImageIcon(ChainsawIcons.INFO));
- /*
- * add preferencemodel listeners
- */
- preferenceModel.addPropertyChangeListener("levelIcons",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- boolean useIcons = (Boolean) evt.getNewValue();
- renderer.setLevelUseIcons(useIcons);
- table.tableChanged(new TableModelEvent(tableModel));
- searchRenderer.setLevelUseIcons(useIcons);
- searchTable.tableChanged(new TableModelEvent(searchModel));
- }
- });
+ /*
+ * add preferencemodel listeners
+ */
+ preferenceModel.addPropertyChangeListener("levelIcons",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean useIcons = (Boolean) evt.getNewValue();
+ renderer.setLevelUseIcons(useIcons);
+ table.tableChanged(new TableModelEvent(tableModel));
+ searchRenderer.setLevelUseIcons(useIcons);
+ searchTable.tableChanged(new TableModelEvent(searchModel));
+ }
+ });
- /*
- * add preferencemodel listeners
- */
- preferenceModel.addPropertyChangeListener("wrapMessage",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- boolean wrap = (Boolean) evt.getNewValue();
- renderer.setWrapMessage(wrap);
- table.tableChanged(new TableModelEvent(tableModel));
- searchRenderer.setWrapMessage(wrap);
- searchTable.tableChanged(new TableModelEvent(searchModel));
- }
- });
+ /*
+ * add preferencemodel listeners
+ */
+ preferenceModel.addPropertyChangeListener("wrapMessage",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean wrap = (Boolean) evt.getNewValue();
+ renderer.setWrapMessage(wrap);
+ table.tableChanged(new TableModelEvent(tableModel));
+ searchRenderer.setWrapMessage(wrap);
+ searchTable.tableChanged(new TableModelEvent(searchModel));
+ }
+ });
- preferenceModel.addPropertyChangeListener("searchResultsVisible",
+ preferenceModel.addPropertyChangeListener("searchResultsVisible",
evt -> {
- boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getNewValue();
- if (displaySearchResultsInDetailsIfAvailable) {
- showSearchResults();
- } else {
- hideSearchResults();
- }
+ boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getNewValue();
+ if (displaySearchResultsInDetailsIfAvailable) {
+ showSearchResults();
+ } else {
+ hideSearchResults();
+ }
});
- preferenceModel.addPropertyChangeListener("highlightSearchMatchText",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- boolean highlightText = (Boolean) evt.getNewValue();
- renderer.setHighlightSearchMatchText(highlightText);
- table.tableChanged(new TableModelEvent(tableModel));
- searchRenderer.setHighlightSearchMatchText(highlightText);
- searchTable.tableChanged(new TableModelEvent(searchModel));
- }
- });
+ preferenceModel.addPropertyChangeListener("highlightSearchMatchText",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean highlightText = (Boolean) evt.getNewValue();
+ renderer.setHighlightSearchMatchText(highlightText);
+ table.tableChanged(new TableModelEvent(tableModel));
+ searchRenderer.setHighlightSearchMatchText(highlightText);
+ searchTable.tableChanged(new TableModelEvent(searchModel));
+ }
+ });
- preferenceModel.addPropertyChangeListener(
- "detailPaneVisible",
+ preferenceModel.addPropertyChangeListener(
+ "detailPaneVisible",
evt -> {
- boolean detailPaneVisible = (Boolean) evt.getNewValue();
+ boolean detailPaneVisible = (Boolean) evt.getNewValue();
- if (detailPaneVisible) {
- showDetailPane();
- } else {
- //don't hide the detail pane if search results are being displayed
- if (!searchResultsDisplayed) {
- hideDetailPane();
+ if (detailPaneVisible) {
+ showDetailPane();
+ } else {
+ //don't hide the detail pane if search results are being displayed
+ if (!searchResultsDisplayed) {
+ hideDetailPane();
+ }
}
- }
});
- preferenceModel.addPropertyChangeListener(
- "logTreePanelVisible",
+ preferenceModel.addPropertyChangeListener(
+ "logTreePanelVisible",
evt -> {
- boolean newValue = (Boolean) evt.getNewValue();
+ boolean newValue = (Boolean) evt.getNewValue();
- if (newValue) {
- showLogTreePanel();
- } else {
- hideLogTreePanel();
- }
+ if (newValue) {
+ showLogTreePanel();
+ } else {
+ hideLogTreePanel();
+ }
});
-
- preferenceModel.addPropertyChangeListener("toolTips",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- boolean toolTips = (Boolean) evt.getNewValue();
- renderer.setToolTipsVisible(toolTips);
- searchRenderer.setToolTipsVisible(toolTips);
- }
- });
-
- preferenceModel.addPropertyChangeListener("visibleColumns",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- //remove all columns and re-add visible
- TableColumnModel columnModel = table.getColumnModel();
- while (columnModel.getColumnCount() > 0) {
- columnModel.removeColumn(columnModel.getColumn(0));
- }
- for (Object o1 : preferenceModel.getVisibleColumnOrder()) {
- TableColumn c = (TableColumn) o1;
- if (c.getHeaderValue().toString().equalsIgnoreCase(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE)) {
- c.setCellEditor(markerCellEditor);
- }
- columnModel.addColumn(c);
- }
- TableColumnModel searchColumnModel = searchTable.getColumnModel();
- while (searchColumnModel.getColumnCount() > 0) {
- searchColumnModel.removeColumn(searchColumnModel.getColumn(0));
- }
- for (Object o : preferenceModel.getVisibleColumnOrder()) {
- TableColumn c = (TableColumn) o;
- searchColumnModel.addColumn(c);
- }
- }
- });
-
- PropertyChangeListener datePrefsChangeListener =
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
-
- isoButton.setSelected(model.isUseISO8601Format());
- simpleTimeButton.setSelected(!model.isUseISO8601Format() && !model.isCustomDateFormat());
-
- if (model.getTimeZone() != null) {
- renderer.setTimeZone(model.getTimeZone());
- searchRenderer.setTimeZone(model.getTimeZone());
- }
-
- if (model.isUseISO8601Format()) {
- renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
- searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
- } else {
- try {
- renderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
- } catch (IllegalArgumentException iae) {
- model.setDefaultDatePatternFormat();
- renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
- }
- try {
- searchRenderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
- } catch (IllegalArgumentException iae) {
- model.setDefaultDatePatternFormat();
- searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
- }
- }
- table.tableChanged(new TableModelEvent(tableModel));
- searchTable.tableChanged(new TableModelEvent(searchModel));
- }
- };
+ preferenceModel.addPropertyChangeListener("toolTips",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ boolean toolTips = (Boolean) evt.getNewValue();
+ renderer.setToolTipsVisible(toolTips);
+ searchRenderer.setToolTipsVisible(toolTips);
+ }
+ });
+
+ preferenceModel.addPropertyChangeListener("visibleColumns",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ //remove all columns and re-add visible
+ TableColumnModel columnModel = table.getColumnModel();
+ while (columnModel.getColumnCount() > 0) {
+ columnModel.removeColumn(columnModel.getColumn(0));
+ }
+ for (Object o1 : preferenceModel.getVisibleColumnOrder()) {
+ TableColumn c = (TableColumn) o1;
+ if (c.getHeaderValue().toString().equalsIgnoreCase(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE)) {
+ c.setCellEditor(markerCellEditor);
+ }
+ columnModel.addColumn(c);
+ }
+ TableColumnModel searchColumnModel = searchTable.getColumnModel();
+ while (searchColumnModel.getColumnCount() > 0) {
+ searchColumnModel.removeColumn(searchColumnModel.getColumn(0));
+ }
+ for (Object o : preferenceModel.getVisibleColumnOrder()) {
+ TableColumn c = (TableColumn) o;
+ searchColumnModel.addColumn(c);
+ }
+ }
+ });
- preferenceModel.addPropertyChangeListener("dateFormatPattern", datePrefsChangeListener);
- preferenceModel.addPropertyChangeListener("dateFormatTimeZone", datePrefsChangeListener);
+ PropertyChangeListener datePrefsChangeListener =
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
- preferenceModel.addPropertyChangeListener("clearTableExpression", evt -> {
- LogPanelPreferenceModel model = (LogPanelPreferenceModel)evt.getSource();
- String expression = model.getClearTableExpression();
- try {
- clearTableExpressionRule = ExpressionRule.getRule(expression);
- logger.info("clearTableExpressionRule set to: " + expression);
- } catch (Exception e) {
- logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
- clearTableExpressionRule = null;
- }
- });
+ isoButton.setSelected(model.isUseISO8601Format());
+ simpleTimeButton.setSelected(!model.isUseISO8601Format() && !model.isCustomDateFormat());
+
+ if (model.getTimeZone() != null) {
+ renderer.setTimeZone(model.getTimeZone());
+ searchRenderer.setTimeZone(model.getTimeZone());
+ }
+
+ if (model.isUseISO8601Format()) {
+ renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+ searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+ } else {
+ try {
+ renderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
+ } catch (IllegalArgumentException iae) {
+ model.setDefaultDatePatternFormat();
+ renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+ }
+ try {
+ searchRenderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
+ } catch (IllegalArgumentException iae) {
+ model.setDefaultDatePatternFormat();
+ searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+ }
+ }
- preferenceModel.addPropertyChangeListener("loggerPrecision",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
+ table.tableChanged(new TableModelEvent(tableModel));
+ searchTable.tableChanged(new TableModelEvent(searchModel));
+ }
+ };
- renderer.setLoggerPrecision(model.getLoggerPrecision());
- table.tableChanged(new TableModelEvent(tableModel));
+ preferenceModel.addPropertyChangeListener("dateFormatPattern", datePrefsChangeListener);
+ preferenceModel.addPropertyChangeListener("dateFormatTimeZone", datePrefsChangeListener);
- searchRenderer.setLoggerPrecision(model.getLoggerPrecision());
- searchTable.tableChanged(new TableModelEvent(searchModel));
- }
- });
+ preferenceModel.addPropertyChangeListener("clearTableExpression", evt -> {
+ LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
+ String expression = model.getClearTableExpression();
+ try {
+ clearTableExpressionRule = ExpressionRule.getRule(expression);
+ logger.info("clearTableExpressionRule set to: " + expression);
+ } catch (Exception e) {
+ logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
+ clearTableExpressionRule = null;
+ }
+ });
+
+ preferenceModel.addPropertyChangeListener("loggerPrecision",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
+
+ renderer.setLoggerPrecision(model.getLoggerPrecision());
+ table.tableChanged(new TableModelEvent(tableModel));
+
+ searchRenderer.setLoggerPrecision(model.getLoggerPrecision());
+ searchTable.tableChanged(new TableModelEvent(searchModel));
+ }
+ });
- preferenceModel.addPropertyChangeListener("toolTips",
+ preferenceModel.addPropertyChangeListener("toolTips",
evt -> {
- boolean value = (Boolean) evt.getNewValue();
- searchToggleToolTips.setSelected(value);
- mainToggleToolTips.setSelected(value);
+ boolean value = (Boolean) evt.getNewValue();
+ searchToggleToolTips.setSelected(value);
+ mainToggleToolTips.setSelected(value);
});
- preferenceModel.addPropertyChangeListener(
- "logTreePanelVisible",
+ preferenceModel.addPropertyChangeListener(
+ "logTreePanelVisible",
evt -> {
- boolean value = (Boolean) evt.getNewValue();
- menuItemLoggerTree.setSelected(value);
+ boolean value = (Boolean) evt.getNewValue();
+ menuItemLoggerTree.setSelected(value);
});
- preferenceModel.addPropertyChangeListener(
- "detailPaneVisible",
+ preferenceModel.addPropertyChangeListener(
+ "detailPaneVisible",
evt -> {
- boolean value = (Boolean) evt.getNewValue();
- menuItemToggleDetails.setSelected(value);
+ boolean value = (Boolean) evt.getNewValue();
+ menuItemToggleDetails.setSelected(value);
});
- applicationPreferenceModel.addPropertyChangeListener("searchColor", new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt)
- {
- if (table != null) {
- table.repaint();
- }
- if (searchTable != null) {
- searchTable.repaint();
+ applicationPreferenceModel.addPropertyChangeListener("searchColor", new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (table != null) {
+ table.repaint();
+ }
+ if (searchTable != null) {
+ searchTable.repaint();
+ }
}
- }
- });
+ });
- applicationPreferenceModel.addPropertyChangeListener("alternatingColor", new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt)
- {
- if (table != null) {
- table.repaint();
+ applicationPreferenceModel.addPropertyChangeListener("alternatingColor", new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (table != null) {
+ table.repaint();
+ }
+ if (searchTable != null) {
+ searchTable.repaint();
+ }
}
- if (searchTable != null) {
- searchTable.repaint();
- }
- }
- });
+ });
- /*
- *End of preferenceModel listeners
- */
- tableModel = new ChainsawCyclicBufferTableModel(cyclicBufferSize, colorizer, "main");
- table = new JSortTable(tableModel);
+ /*
+ *End of preferenceModel listeners
+ */
+ tableModel = new ChainsawCyclicBufferTableModel(cyclicBufferSize, colorizer, "main");
+ table = new JSortTable(tableModel);
- markerCellEditor = new MarkerCellEditor();
- table.setName("main");
- table.setColumnSelectionAllowed(false);
- table.setRowSelectionAllowed(true);
+ markerCellEditor = new MarkerCellEditor();
+ table.setName("main");
+ table.setColumnSelectionAllowed(false);
+ table.setRowSelectionAllowed(true);
- searchModel = new ChainsawCyclicBufferTableModel(cyclicBufferSize, colorizer, "search");
- searchTable = new JSortTable(searchModel);
+ searchModel = new ChainsawCyclicBufferTableModel(cyclicBufferSize, colorizer, "search");
+ searchTable = new JSortTable(searchModel);
- searchTable.setName("search");
- searchTable.setColumnSelectionAllowed(false);
- searchTable.setRowSelectionAllowed(true);
+ searchTable.setName("search");
+ searchTable.setColumnSelectionAllowed(false);
+ searchTable.setRowSelectionAllowed(true);
- //we've mapped f2, shift f2 and ctrl-f2 to marker-related actions, unmap them from the table
- table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
- table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
- table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
- table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
+ //we've mapped f2, shift f2 and ctrl-f2 to marker-related actions, unmap them from the table
+ table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
+ table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
+ table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
+ table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
- //we're also mapping ctrl-a to scroll-to-top, unmap from the table
- table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
-
- searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
- searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
- searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
- searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
+ //we're also mapping ctrl-a to scroll-to-top, unmap from the table
+ table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
- //we're also mapping ctrl-a to scroll-to-top, unmap from the table
- searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
+ searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
+ searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
+ searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
+ searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
- //add a listener to update the 'refine focus'
- tableModel.addNewKeyListener(e -> columnNameKeywordMap.put(e.getKey(), "PROP." + e.getKey()));
+ //we're also mapping ctrl-a to scroll-to-top, unmap from the table
+ searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
- /*
- * Set the Display rule to use the mediator, the model will add itself as
- * a property change listener and update itself when the rule changes.
- */
- tableModel.setRuleMediator(tableRuleMediator);
- searchModel.setRuleMediator(searchRuleMediator);
+ //add a listener to update the 'refine focus'
+ tableModel.addNewKeyListener(e -> columnNameKeywordMap.put(e.getKey(), "PROP." + e.getKey()));
+
+ /*
+ * Set the Display rule to use the mediator, the model will add itself as
+ * a property change listener and update itself when the rule changes.
+ */
+ tableModel.setRuleMediator(tableRuleMediator);
+ searchModel.setRuleMediator(searchRuleMediator);
- tableModel.addEventCountListener(
+ tableModel.addEventCountListener(
(currentCount, totalCount) -> {
- if (LogPanel.this.isVisible()) {
- statusBar.setSelectedLine(
- table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
- }
+ if (LogPanel.this.isVisible()) {
+ statusBar.setSelectedLine(
+ table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
+ }
});
- tableModel.addEventCountListener(
- new EventCountListener() {
- final NumberFormat formatter = NumberFormat.getPercentInstance();
- boolean warning75 = false;
- boolean warning100 = false;
-
- public void eventCountChanged(int currentCount, int totalCount) {
- if (preferenceModel.isCyclic()) {
- double percent =
- ((double) totalCount) / tableModel.getMaxSize();
- String msg;
- boolean wasWarning = warning75 || warning100;
- if ((percent > 0.75) && (percent < 1.0) && !warning75) {
- msg =
- "Warning :: " + formatter.format(percent) + " of the '"
- + getIdentifier() + "' buffer has been used";
- warning75 = true;
- } else if ((percent >= 1.0) && !warning100) {
- msg =
- "Warning :: " + formatter.format(percent) + " of the '"
- + getIdentifier()
- + "' buffer has been used. Older events are being discarded.";
- warning100 = true;
- } else {
- //clear msg
- msg = "";
- warning75 = false;
- warning100 = false;
- }
+ tableModel.addEventCountListener(
+ new EventCountListener() {
+ final NumberFormat formatter = NumberFormat.getPercentInstance();
+ boolean warning75 = false;
+ boolean warning100 = false;
+
+ public void eventCountChanged(int currentCount, int totalCount) {
+ if (preferenceModel.isCyclic()) {
+ double percent =
+ ((double) totalCount) / tableModel.getMaxSize();
+ String msg;
+ boolean wasWarning = warning75 || warning100;
+ if ((percent > 0.75) && (percent < 1.0) && !warning75) {
+ msg =
+ "Warning :: " + formatter.format(percent) + " of the '"
+ + getIdentifier() + "' buffer has been used";
+ warning75 = true;
+ } else if ((percent >= 1.0) && !warning100) {
+ msg =
+ "Warning :: " + formatter.format(percent) + " of the '"
+ + getIdentifier()
+ + "' buffer has been used. Older events are being discarded.";
+ warning100 = true;
+ } else {
+ //clear msg
+ msg = "";
+ warning75 = false;
+ warning100 = false;
+ }
+
+ if (msg != null && wasWarning) {
+ MessageCenter.getInstance().getLogger().info(msg);
+ }
+ }
+ }
+ });
- if (msg != null && wasWarning) {
- MessageCenter.getInstance().getLogger().info(msg);
+ /*
+ * Logger tree panel
+ *
+ */
+ LogPanelLoggerTreeModel logTreeModel = new LogPanelLoggerTreeModel();
+ logTreePanel = new LoggerNameTreePanel(logTreeModel, preferenceModel, this, colorizer, filterModel);
+ logTreePanel.getLoggerVisibilityRule().addPropertyChangeListener(evt -> {
+ if (evt.getPropertyName().equals("searchExpression")) {
+ findCombo.setSelectedItem(evt.getNewValue().toString());
+ findNext();
}
- }
- }
- });
+ });
- /*
- * Logger tree panel
- *
- */
- LogPanelLoggerTreeModel logTreeModel = new LogPanelLoggerTreeModel();
- logTreePanel = new LoggerNameTreePanel(logTreeModel, preferenceModel, this, colorizer, filterModel);
- logTreePanel.getLoggerVisibilityRule().addPropertyChangeListener(evt -> {
- if (evt.getPropertyName().equals("searchExpression")) {
- findCombo.setSelectedItem(evt.getNewValue().toString());
- findNext();
- }
- });
-
- tableModel.addLoggerNameListener(logTreeModel);
- tableModel.addLoggerNameListener(logTreePanel);
+ tableModel.addLoggerNameListener(logTreeModel);
+ tableModel.addLoggerNameListener(logTreePanel);
- /**
- * Set the LoggerRule to be the LoggerTreePanel, as this visual component
- * is a rule itself, and the RuleMediator will automatically listen when
- * it's rule state changes.
- */
- tableRuleMediator.setLoggerRule(logTreePanel.getLoggerVisibilityRule());
- searchRuleMediator.setLoggerRule(logTreePanel.getLoggerVisibilityRule());
+ /**
+ * Set the LoggerRule to be the LoggerTreePanel, as this visual component
+ * is a rule itself, and the RuleMediator will automatically listen when
+ * it's rule state changes.
+ */
+ tableRuleMediator.setLoggerRule(logTreePanel.getLoggerVisibilityRule());
+ searchRuleMediator.setLoggerRule(logTreePanel.getLoggerVisibilityRule());
- colorizer.setLoggerRule(logTreePanel.getLoggerColorRule());
+ colorizer.setLoggerRule(logTreePanel.getLoggerColorRule());
- /*
- * Color rule frame and panel
- */
- colorFrame.setTitle("'" + identifier + "' color settings");
- colorFrame.setIconImage(
- ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+ /*
+ * Color rule frame and panel
+ */
+ colorFrame.setTitle("'" + identifier + "' color settings");
+ colorFrame.setIconImage(
+ ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
- allColorizers.put(identifier, colorizer);
- colorPanel = new ColorPanel(colorizer, filterModel, allColorizers, applicationPreferenceModel);
+ allColorizers.put(identifier, colorizer);
+ colorPanel = new ColorPanel(colorizer, filterModel, allColorizers, applicationPreferenceModel);
- colorFrame.getContentPane().add(colorPanel);
+ colorFrame.getContentPane().add(colorPanel);
Action closeColorPanelAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
- colorPanel.hidePanel();
+ colorPanel.hidePanel();
}
};
- colorFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); colorFrame.getRootPane().
- getActionMap().put("ESCAPE", closeColorPanelAction);
+ colorFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
+ colorFrame.getRootPane().
+ getActionMap().put("ESCAPE", closeColorPanelAction);
- colorPanel.setCloseActionListener(
+ colorPanel.setCloseActionListener(
e -> colorFrame.setVisible(false));
- colorizer.addPropertyChangeListener(
- "colorrule",
- new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent evt) {
- for (Object o : tableModel.getAllEvents()) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) o;
- loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
- }
+ colorizer.addPropertyChangeListener(
+ "colorrule",
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ for (Object o : tableModel.getAllEvents()) {
+ LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) o;
+ loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+ }
// no need to update searchmodel events since tablemodel and searchmodel share all events, and color rules aren't different between the two
// if that changes, un-do the color syncing in loggingeventwrapper & re-enable this code
//
@@ -791,2369 +701,2365 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
// LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
// loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
// }
- colorizedEventAndSearchMatchThumbnail.configureColors();
- lowerPanel.revalidate();
- lowerPanel.repaint();
-
- searchTable.revalidate();
- searchTable.repaint();
- }
- });
+ colorizedEventAndSearchMatchThumbnail.configureColors();
+ lowerPanel.revalidate();
+ lowerPanel.repaint();
- /*
- * Table definition. Actual construction is above (next to tablemodel)
- */
- table.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
- table.setRowMargin(0);
- table.getColumnModel().setColumnMargin(0);
- table.setShowGrid(false);
- table.getColumnModel().addColumnModelListener(new ChainsawTableColumnModelListener(table));
- table.setAutoCreateColumnsFromModel(false);
- table.addMouseMotionListener(new TableColumnDetailMouseListener(table, tableModel));
- table.addMouseListener(new TableMarkerListener(table, tableModel, searchModel));
- table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-
- searchTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
- searchTable.setRowMargin(0);
- searchTable.getColumnModel().setColumnMargin(0);
- searchTable.setShowGrid(false);
- searchTable.getColumnModel().addColumnModelListener(new ChainsawTableColumnModelListener(searchTable));
- searchTable.setAutoCreateColumnsFromModel(false);
- searchTable.addMouseMotionListener(new TableColumnDetailMouseListener(searchTable, searchModel));
- searchTable.addMouseListener(new TableMarkerListener(searchTable, searchModel, tableModel));
- searchTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-
-
- //set valueisadjusting if holding down a key - don't process setdetail events
- table.addKeyListener(
- new KeyListener() {
- public void keyTyped(KeyEvent e) {
- }
-
- public void keyPressed(KeyEvent e) {
- synchronized (detail) {
- table.getSelectionModel().setValueIsAdjusting(true);
- detail.notify();
- }
- }
-
- public void keyReleased(KeyEvent e) {
- synchronized (detail) {
- table.getSelectionModel().setValueIsAdjusting(false);
- detail.notify();
- }
- }
- });
-
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- searchTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
- table.getSelectionModel().addListSelectionListener(evt -> {
- if (((evt.getFirstIndex() == evt.getLastIndex())
- && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
- return;
- }
- boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
- boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
+ searchTable.revalidate();
+ searchTable.repaint();
+ }
+ });
/*
- * when scroll-to-bottom is active, here is what events look like:
- * rowcount-1: 227, last: 227, previous last: 191..first: 191
- *
- * when the user has unselected the bottom row, here is what the events look like:
- * rowcount-1: 227, last: 227, previous last: 227..first: 222
- *
- * note: previouslast is set after it is evaluated in the bypass scroll check
- */
- //System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +", previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " + evt.getValueIsAdjusting());
+ * Table definition. Actual construction is above (next to tablemodel)
+ */
+ table.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
+ table.setRowMargin(0);
+ table.getColumnModel().setColumnMargin(0);
+ table.setShowGrid(false);
+ table.getColumnModel().addColumnModelListener(new ChainsawTableColumnModelListener(table));
+ table.setAutoCreateColumnsFromModel(false);
+ table.addMouseMotionListener(new TableColumnDetailMouseListener(table, tableModel));
+ table.addMouseListener(new TableMarkerListener(table, tableModel, searchModel));
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ searchTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
+ searchTable.setRowMargin(0);
+ searchTable.getColumnModel().setColumnMargin(0);
+ searchTable.setShowGrid(false);
+ searchTable.getColumnModel().addColumnModelListener(new ChainsawTableColumnModelListener(searchTable));
+ searchTable.setAutoCreateColumnsFromModel(false);
+ searchTable.addMouseMotionListener(new TableColumnDetailMouseListener(searchTable, searchModel));
+ searchTable.addMouseListener(new TableMarkerListener(searchTable, searchModel, tableModel));
+ searchTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+
+ //set valueisadjusting if holding down a key - don't process setdetail events
+ table.addKeyListener(
+ new KeyListener() {
+ public void keyTyped(KeyEvent e) {
+ }
- boolean disableScrollToBottom = (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
- if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
- preferenceModel.setScrollToBottom(false);
- }
- previousLastIndex = evt.getLastIndex();
- }
- );
-
- table.getSelectionModel().addListSelectionListener(
- new ListSelectionListener() {
- public void valueChanged(ListSelectionEvent evt) {
- if (((evt.getFirstIndex() == evt.getLastIndex())
- && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
- return;
- }
+ public void keyPressed(KeyEvent e) {
+ synchronized (detail) {
+ table.getSelectionModel().setValueIsAdjusting(true);
+ detail.notify();
+ }
+ }
- final ListSelectionModel lsm = (ListSelectionModel) evt.getSource();
+ public void keyReleased(KeyEvent e) {
+ synchronized (detail) {
+ table.getSelectionModel().setValueIsAdjusting(false);
+ detail.notify();
+ }
+ }
+ });
- if (lsm.isSelectionEmpty()) {
- if (isVisible()) {
- statusBar.setNothingSelected();
- }
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ searchTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- if (detail.getDocument().getDefaultRootElement() != null) {
- detailPaneUpdater.setSelectedRow(-1);
+ table.getSelectionModel().addListSelectionListener(evt -> {
+ if (((evt.getFirstIndex() == evt.getLastIndex())
+ && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
+ return;
+ }
+ boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
+ boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
+
+ /*
+ * when scroll-to-bottom is active, here is what events look like:
+ * rowcount-1: 227, last: 227, previous last: 191..first: 191
+ *
+ * when the user has unselected the bottom row, here is what the events look like:
+ * rowcount-1: 227, last: 227, previous last: 227..first: 222
+ *
+ * note: previouslast is set after it is evaluated in the bypass scroll check
+ */
+ //System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +", previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " + evt.getValueIsAdjusting());
+
+ boolean disableScrollToBottom = (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
+ if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
+ preferenceModel.setScrollToBottom(false);
+ }
+ previousLastIndex = evt.getLastIndex();
}
- } else {
- if (table.getSelectedRow() > -1) {
- int selectedRow = table.getSelectedRow();
+ );
+
+ table.getSelectionModel().addListSelectionListener(
+ new ListSelectionListener() {
+ public void valueChanged(ListSelectionEvent evt) {
+ if (((evt.getFirstIndex() == evt.getLastIndex())
+ && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
+ return;
+ }
- if (isVisible()) {
- updateStatusBar();
- }
+ final ListSelectionModel lsm = (ListSelectionModel) evt.getSource();
- try {
- if (tableModel.getRowCount() >= selectedRow) {
- detailPaneUpdater.setSelectedRow(table.getSelectedRow());
- } else {
- detailPaneUpdater.setSelectedRow(-1);
+ if (lsm.isSelectionEmpty()) {
+ if (isVisible()) {
+ statusBar.setNothingSelected();
+ }
+
+ if (detail.getDocument().getDefaultRootElement() != null) {
+ detailPaneUpdater.setSelectedRow(-1);
+ }
+ } else {
+ if (table.getSelectedRow() > -1) {
+ int selectedRow = table.getSelectedRow();
+
+ if (isVisible()) {
+ updateStatusBar();
+ }
+
+ try {
+ if (tableModel.getRowCount() >= selectedRow) {
+ detailPaneUpdater.setSelectedRow(table.getSelectedRow());
+ } else {
+ detailPaneUpdater.setSelectedRow(-1);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ detailPaneUpdater.setSelectedRow(-1);
+ }
+ }
+ }
}
- } catch (Exception e) {
- e.printStackTrace();
- detailPaneUpdater.setSelectedRow(-1);
- }
- }
- }
- }
- });
+ });
- renderer = new TableColorizingRenderer(colorizer, applicationPreferenceModel, tableModel, preferenceModel, true);
- renderer.setToolTipsVisible(preferenceModel.isToolTips());
+ renderer = new TableColorizingRenderer(colorizer, applicationPreferenceModel, tableModel, preferenceModel, true);
+ renderer.setToolTipsVisible(preferenceModel.isToolTips());
- table.setDefaultRenderer(Object.class, renderer);
+ table.setDefaultRenderer(Object.class, renderer);
- searchRenderer = new TableColorizingRenderer(colorizer, applicationPreferenceModel, searchModel, preferenceModel, false);
- searchRenderer.setToolTipsVisible(preferenceModel.isToolTips());
+ searchRenderer = new TableColorizingRenderer(colorizer, applicationPreferenceModel, searchModel, preferenceModel, false);
+ searchRenderer.setToolTipsVisible(preferenceModel.isToolTips());
- searchTable.setDefaultRenderer(Object.class, searchRenderer);
+ searchTable.setDefaultRenderer(Object.class, searchRenderer);
- /*
- * Throwable popup
- */
- table.addMouseListener(new ThrowableDisplayMouseAdapter(table, tableModel));
- searchTable.addMouseListener(new ThrowableDisplayMouseAdapter(searchTable, searchModel));
-
- //select a row in the main table when a row in the search table is selected
- searchTable.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- LoggingEventWrapper loggingEventWrapper = searchModel.getRow(searchTable.getSelectedRow());
- if (loggingEventWrapper != null) {
- int id = new Integer(loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
- //preserve the table's viewble column
- setSelectedEvent(id);
- }
- }
- });
+ /*
+ * Throwable popup
+ */
+ table.addMouseListener(new ThrowableDisplayMouseAdapter(table, tableModel));
+ searchTable.addMouseListener(new ThrowableDisplayMouseAdapter(searchTable, searchModel));
- /*
- * We listen for new Key's coming in so we can get them automatically
- * added as columns
- */
- tableModel.addNewKeyListener(
+ //select a row in the main table when a row in the search table is selected
+ searchTable.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ LoggingEventWrapper loggingEventWrapper = searchModel.getRow(searchTable.getSelectedRow());
+ if (loggingEventWrapper != null) {
+ int id = new Integer(loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
+ //preserve the table's viewble column
+ setSelectedEvent(id);
+ }
+ }
+ });
+
+ /*
+ * We listen for new Key's coming in so we can get them automatically
+ * added as columns
+ */
+ tableModel.addNewKeyListener(
e -> SwingHelper.invokeOnEDT(() -> {
// don't add the column if we already know about it, this could be if we've seen it before and saved the column preferences
//this may throw an illegalargexception - ignore it because we need to add only if not already added
- //if the column is already added, don't add again
+ //if the column is already added, don't add again
- try {
- if (table.getColumn(e.getKey()) != null) {
- return;
- }
+ try {
+ if (table.getColumn(e.getKey()) != null) {
+ return;
+ }
//no need to check search table - we use the same columns
- } catch (IllegalArgumentException iae) {
- }
- TableColumn col = new TableColumn(e.getNewModelIndex());
- col.setHeaderValue(e.getKey());
+ } catch (IllegalArgumentException iae) {
+ }
+ TableColumn col = new TableColumn(e.getNewModelIndex());
+ col.setHeaderValue(e.getKey());
- if (preferenceModel.addColumn(col)) {
- if (preferenceModel.isColumnVisible(col) || !applicationPreferenceModel.isDefaultColumnsSet() || applicationPreferenceModel.isDefaultColumnsSet() &&
+ if (preferenceModel.addColumn(col)) {
+ if (preferenceModel.isColumnVisible(col) || !applicationPreferenceModel.isDefaultColumnsSet() || applicationPreferenceModel.isDefaultColumnsSet() &&
applicationPreferenceModel.getDefaultColumnNames().contains(col.getHeaderValue())) {
- table.addColumn(col);
- searchTable.addColumn(col);
- preferenceModel.setColumnVisible(e.getKey().toString(), true);
+ table.addColumn(col);
+ searchTable.addColumn(col);
+ preferenceModel.setColumnVisible(e.getKey().toString(), true);
+ }
}
- }
}));
- //if the table is refiltered, try to reselect the last selected row
- //refilter with a newValue of TRUE means refiltering is about to begin
- //refilter with a newValue of FALSE means refiltering is complete
- //assuming notification is called on the EDT so we can in the current EDT call update the scroll & selection
- tableModel.addPropertyChangeListener("refilter", new PropertyChangeListener() {
- private LoggingEventWrapper currentEvent;
- public void propertyChange(PropertyChangeEvent evt) {
- //if new value is true, filtering is about to begin
- //if new value is false, filtering is complete
- if (evt.getNewValue().equals(Boolean.TRUE)) {
- int currentRow = table.getSelectedRow();
- if (currentRow > -1) {
- currentEvent = tableModel.getRow(currentRow);
- }
- } else {
- if (currentEvent != null) {
- table.scrollToRow(tableModel.getRowIndex(currentEvent));
+ //if the table is refiltered, try to reselect the last selected row
+ //refilter with a newValue of TRUE means refiltering is about to begin
+ //refilter with a newValue of FALSE means refiltering is complete
+ //assuming notification is called on the EDT so we can in the current EDT call update the scroll & selection
+ tableModel.addPropertyChangeListener("refilter", new PropertyChangeListener() {
+ private LoggingEventWrapper currentEvent;
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ //if new value is true, filtering is about to begin
+ //if new value is false, filtering is complete
+ if (evt.getNewValue().equals(Boolean.TRUE)) {
+ int currentRow = table.getSelectedRow();
+ if (currentRow > -1) {
+ currentEvent = tableModel.getRow(currentRow);
+ }
+ } else {
+ if (currentEvent != null) {
+ table.scrollToRow(tableModel.getRowIndex(currentEvent));
+ }
}
}
- }
- });
+ });
- table.getTableHeader().addMouseListener(
- new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- checkEvent(e);
- }
+ table.getTableHeader().addMouseListener(
+ new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ checkEvent(e);
+ }
- public void mousePressed(MouseEvent e) {
- checkEvent(e);
- }
+ public void mousePressed(MouseEvent e) {
+ checkEvent(e);
+ }
- public void mouseReleased(MouseEvent e) {
- checkEvent(e);
- }
+ public void mouseReleased(MouseEvent e) {
+ checkEvent(e);
+ }
- private void checkEvent(MouseEvent e) {
- if (e.isPopupTrigger()) {
- TableColumnModel colModel = table.getColumnModel();
- int index = colModel.getColumnIndexAtX(e.getX());
- int modelIndex = colModel.getColumn(index).getModelIndex();
+ private void checkEvent(MouseEvent e) {
+ if (e.isPopupTrigger()) {
+ TableColumnModel colModel = table.getColumnModel();
+ int index = colModel.getColumnIndexAtX(e.getX());
+ int modelIndex = colModel.getColumn(index).getModelIndex();
- if ((modelIndex + 1) == ChainsawColumns.INDEX_TIMESTAMP_COL_NAME) {
- dateFormatChangePopup.show(e.getComponent(), e.getX(), e.getY());
- }
- }
- }
- });
+ if ((modelIndex + 1) == ChainsawColumns.INDEX_TIMESTAMP_COL_NAME) {
+ dateFormatChangePopup.show(e.getComponent(), e.getX(), e.getY());
+ }
+ }
+ }
+ });
- /*
- * Upper panel definition
- */
- JPanel upperPanel = new JPanel();
- upperPanel.setLayout(new BoxLayout(upperPanel, BoxLayout.X_AXIS));
- upperPanel.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 0));
+ /*
+ * Upper panel definition
+ */
+ JPanel upperPanel = new JPanel();
+ upperPanel.setLayout(new BoxLayout(upperPanel, BoxLayout.X_AXIS));
+ upperPanel.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 0));
- final JLabel filterLabel = new JLabel("Refine focus on: ");
- filterLabel.setFont(filterLabel.getFont().deriveFont(Font.BOLD));
+ final JLabel filterLabel = new JLabel("Refine focus on: ");
+ filterLabel.setFont(filterLabel.getFont().deriveFont(Font.BOLD));
- upperPanel.add(filterLabel);
- upperPanel.add(Box.createHorizontalStrut(3));
- upperPanel.add(filterCombo);
- upperPanel.add(Box.createHorizontalStrut(3));
+ upperPanel.add(filterLabel);
+ upperPanel.add(Box.createHorizontalStrut(3));
+ upperPanel.add(filterCombo);
+ upperPanel.add(Box.createHorizontalStrut(3));
- final JTextField filterText =(JTextField) filterCombo.getEditor().getEditorComponent();
- final JTextField findText =(JTextField) findCombo.getEditor().getEditorComponent();
+ final JTextField filterText = (JTextField) filterCombo.getEditor().getEditorComponent();
+ final JTextField findText = (JTextField) findCombo.getEditor().getEditorComponent();
- //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
- final JButton removeFilterButton = new JButton(" Remove ");
+ //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
+ final JButton removeFilterButton = new JButton(" Remove ");
- removeFilterButton.setToolTipText("Click here to remove the selected expression from the list");
- removeFilterButton.addActionListener(
+ removeFilterButton.setToolTipText("Click here to remove the selected expression from the list");
+ removeFilterButton.addActionListener(
new AbstractAction() {
- public void actionPerformed(ActionEvent e){
- Object selectedItem = filterCombo.getSelectedItem();
- if (e.getSource() == removeFilterButton && selectedItem != null && !selectedItem.toString().trim().equals("")){
- //don't just remove the entry from the store, clear the field
- int index = filterCombo.getSelectedIndex();
- filterText.setText(null);
- filterCombo.setSelectedIndex(-1);
- filterCombo.removeItemAt(index);
- if (!(findCombo.getSelectedItem() != null && findCombo.getSelectedItem().equals(selectedItem))) {
- //now remove the entry from the other model
- ((AutoFilterComboBox.AutoFilterComboBoxModel)findCombo.getModel()).removeElement(selectedItem);
- }
+ public void actionPerformed(ActionEvent e) {
+ Object selectedItem = filterCombo.getSelectedItem();
+ if (e.getSource() == removeFilterButton && selectedItem != null && !selectedItem.toString().trim().equals("")) {
+ //don't just remove the entry from the store, clear the field
+ int index = filterCombo.getSelectedIndex();
+ filterText.setText(null);
+ filterCombo.setSelectedIndex(-1);
+ filterCombo.removeItemAt(index);
+ if (!(findCombo.getSelectedItem() != null && findCombo.getSelectedItem().equals(selectedItem))) {
+ //now remove the entry from the other model
+ ((AutoFilterComboBox.AutoFilterComboBoxModel) findCombo.getModel()).removeElement(selectedItem);
+ }
}
}
}
- );
- upperPanel.add(removeFilterButton);
- //add some space between refine focus and search sections of the panel
- upperPanel.add(Box.createHorizontalStrut(25));
-
- final JLabel findLabel = new JLabel("Find: ");
- findLabel.setFont(filterLabel.getFont().deriveFont(Font.BOLD));
-
- upperPanel.add(findLabel);
- upperPanel.add(Box.createHorizontalStrut(3));
-
- upperPanel.add(findCombo);
- upperPanel.add(Box.createHorizontalStrut(3));
-
- Action findNextAction = getFindNextAction();
- Action findPreviousAction = getFindPreviousAction();
- //add up & down search
- JButton findNextButton = new SmallButton(findNextAction);
- findNextButton.setText("");
- findNextButton.getActionMap().put(
- findNextAction.getValue(Action.NAME), findNextAction);
- findNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- (KeyStroke) findNextAction.getValue(Action.ACCELERATOR_KEY),
- findNextAction.getValue(Action.NAME));
-
- JButton findPreviousButton = new SmallButton(findPreviousAction);
- findPreviousButton.setText("");
- findPreviousButton.getActionMap().put(
- findPreviousAction.getValue(Action.NAME), findPreviousAction);
- findPreviousButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
- (KeyStroke) findPreviousAction.getValue(Action.ACCELERATOR_KEY),
- findPreviousAction.getValue(Action.NAME));
-
- upperPanel.add(findNextButton);
-
- upperPanel.add(findPreviousButton);
- upperPanel.add(Box.createHorizontalStrut(3));
-
- //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
- final JButton removeFindButton = new JButton(" Remove ");
- removeFindButton.setToolTipText("Click here to remove the selected expression from the list");
- removeFindButton.addActionListener(
+ );
+ upperPanel.add(removeFilterButton);
+ //add some space between refine focus and search sections of the panel
+ upperPanel.add(Box.createHorizontalStrut(25));
+
+ final JLabel findLabel = new JLabel("Find: ");
+ findLabel.setFont(filterLabel.getFont().deriveFont(Font.BOLD));
+
+ upperPanel.add(findLabel);
+ upperPanel.add(Box.createHorizontalStrut(3));
+
+ upperPanel.add(findCombo);
+ upperPanel.add(Box.createHorizontalStrut(3));
+
+ Action findNextAction = getFindNextAction();
+ Action findPreviousAction = getFindPreviousAction();
+ //add up & down search
+ JButton findNextButton = new SmallButton(findNextAction);
+ findNextButton.setText("");
+ findNextButton.getActionMap().put(
+ findNextAction.getValue(Action.NAME), findNextAction);
+ findNextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ (KeyStroke) findNextAction.getValue(Action.ACCELERATOR_KEY),
+ findNextAction.getValue(Action.NAME));
+
+ JButton findPreviousButton = new SmallButton(findPreviousAction);
+ findPreviousButton.setText("");
+ findPreviousButton.getActionMap().put(
+ findPreviousAction.getValue(Action.NAME), findPreviousAction);
+ findPreviousButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ (KeyStroke) findPreviousAction.getValue(Action.ACCELERATOR_KEY),
+ findPreviousAction.getValue(Action.NAME));
+
+ upperPanel.add(findNextButton);
+
+ upperPanel.add(findPreviousButton);
+ upperPanel.add(Box.createHorizontalStrut(3));
+
+ //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
+ final JButton removeFindButton = new JButton(" Remove ");
+ removeFindButton.setToolTipText("Click here to remove the selected expression from the list");
+ removeFindButton.addActionListener(
new AbstractAction() {
- public void actionPerformed(ActionEvent e){
- Object selectedItem = findCombo.getSelectedItem();
- if (e.getSource() == removeFindButton && selectedItem != null && !selectedItem.toString().trim().equals("")){
- //don't just remove the entry from the store, clear the field
- int index = findCombo.getSelectedIndex();
- findText.setText(null);
-
<TRUNCATED>