http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java index 3d0789b..c449adb 100644 --- a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java +++ b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,49 +17,6 @@ package org.apache.log4j.chainsaw.color; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Graphics; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.DefaultCellEditor; -import javax.swing.DefaultComboBoxModel; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JColorChooser; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.ListCellRenderer; -import javax.swing.ListSelectionModel; -import javax.swing.WindowConstants; -import javax.swing.border.Border; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableCellRenderer; - import org.apache.log4j.chainsaw.ApplicationPreferenceModel; import org.apache.log4j.chainsaw.ChainsawConstants; import org.apache.log4j.chainsaw.ExpressionRuleContext; @@ -70,868 +27,878 @@ import org.apache.log4j.rule.ColorRule; import org.apache.log4j.rule.ExpressionRule; import org.apache.log4j.rule.Rule; +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellRenderer; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.*; +import java.util.List; + /** * Panel which updates a RuleColorizer, allowing the user to build expression-based * color rules. - * + * <p> * TODO: examine ColorPanel/RuleColorizer/LogPanel listeners and interactions * * @author Scott Deboy <sde...@apache.org> */ -public class ColorPanel extends JPanel -{ - private static final String DEFAULT_STATUS = "<html>Double click a rule field to edit the rule</html>"; - private final String currentRuleSet = "Default"; - - private RuleColorizer colorizer; - private JPanel rulesPanel; - private FilterModel filterModel; - private DefaultTableModel tableModel; - private JScrollPane tableScrollPane; - private JTable table; - private ActionListener closeListener; - private JLabel statusBar; - private Vector<String> columns; - private final String noTab = "None"; - private DefaultComboBoxModel logPanelColorizersModel; - private Map<String, RuleColorizer> allLogPanelColorizers; - private RuleColorizer currentLogPanelColorizer; - private JTable searchTable; - private DefaultTableModel searchTableModel; - private Vector<String> searchColumns; - private Vector<Vector<Color>> searchDataVector; - private Vector<Color> searchDataVectorEntry; - - private JTable alternatingColorTable; - private DefaultTableModel alternatingColorTableModel; - private Vector<String> alternatingColorColumns; - private Vector<Vector<Color>> alternatingColorDataVector; - private Vector<Color> alternatingColorDataVectorEntry; - private ApplicationPreferenceModel applicationPreferenceModel; - private JCheckBox bypassSearchColorsCheckBox; - - public ColorPanel(final RuleColorizer currentLogPanelColorizer, final FilterModel filterModel, - final Map<String, RuleColorizer> allLogPanelColorizers, final ApplicationPreferenceModel applicationPreferenceModel) { - super(new BorderLayout()); - - this.currentLogPanelColorizer = currentLogPanelColorizer; - this.colorizer = currentLogPanelColorizer; - this.filterModel = filterModel; - this.allLogPanelColorizers = allLogPanelColorizers; - this.applicationPreferenceModel = applicationPreferenceModel; - - currentLogPanelColorizer.addPropertyChangeListener( - "colorrule", +public class ColorPanel extends JPanel { + private static final String DEFAULT_STATUS = "<html>Double click a rule field to edit the rule</html>"; + private final String currentRuleSet = "Default"; + + private RuleColorizer colorizer; + private JPanel rulesPanel; + private FilterModel filterModel; + private DefaultTableModel tableModel; + private JScrollPane tableScrollPane; + private JTable table; + private ActionListener closeListener; + private JLabel statusBar; + private Vector<String> columns; + private final String noTab = "None"; + private DefaultComboBoxModel logPanelColorizersModel; + private Map<String, RuleColorizer> allLogPanelColorizers; + private RuleColorizer currentLogPanelColorizer; + private JTable searchTable; + private DefaultTableModel searchTableModel; + private Vector<String> searchColumns; + private Vector<Vector<Color>> searchDataVector; + private Vector<Color> searchDataVectorEntry; + + private JTable alternatingColorTable; + private DefaultTableModel alternatingColorTableModel; + private Vector<String> alternatingColorColumns; + private Vector<Vector<Color>> alternatingColorDataVector; + private Vector<Color> alternatingColorDataVectorEntry; + private ApplicationPreferenceModel applicationPreferenceModel; + private JCheckBox bypassSearchColorsCheckBox; + + public ColorPanel(final RuleColorizer currentLogPanelColorizer, final FilterModel filterModel, + final Map<String, RuleColorizer> allLogPanelColorizers, final ApplicationPreferenceModel applicationPreferenceModel) { + super(new BorderLayout()); + + this.currentLogPanelColorizer = currentLogPanelColorizer; + this.colorizer = currentLogPanelColorizer; + this.filterModel = filterModel; + this.allLogPanelColorizers = allLogPanelColorizers; + this.applicationPreferenceModel = applicationPreferenceModel; + + currentLogPanelColorizer.addPropertyChangeListener( + "colorrule", evt -> updateColors()); - tableModel = new DefaultTableModel(); - table = new JTable(tableModel); - table.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); - - searchTableModel = new DefaultTableModel(); - searchTable = new JTable(searchTableModel); - searchTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); - searchTable.setPreferredScrollableViewportSize(new Dimension(30, 30)); - - alternatingColorTableModel = new DefaultTableModel(); - alternatingColorTable = new JTable(alternatingColorTableModel); - alternatingColorTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); - alternatingColorTable.setPreferredScrollableViewportSize(new Dimension(30, 30)); - - columns = new Vector<>(); - columns.add("Expression"); - columns.add("Background"); - columns.add("Foreground"); - - searchColumns = new Vector<>(); - searchColumns.add("Background"); - searchColumns.add("Foreground"); - - alternatingColorColumns = new Vector<>(); - alternatingColorColumns.add("Background"); - alternatingColorColumns.add("Foreground"); - - //searchtable contains only a single-entry vector containing a two-item vector (foreground, background) - searchDataVector = new Vector<>(); - searchDataVectorEntry = new Vector<>(); - searchDataVectorEntry.add(applicationPreferenceModel.getSearchBackgroundColor()); - searchDataVectorEntry.add(applicationPreferenceModel.getSearchForegroundColor()); - searchDataVector.add(searchDataVectorEntry); - searchTableModel.setDataVector(searchDataVector, searchColumns); - - alternatingColorDataVector = new Vector<>(); - alternatingColorDataVectorEntry = new Vector<>(); - alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorBackgroundColor()); - alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorForegroundColor()); - alternatingColorDataVector.add(alternatingColorDataVectorEntry); - alternatingColorTableModel.setDataVector(alternatingColorDataVector, alternatingColorColumns); - - table.setPreferredScrollableViewportSize(new Dimension(525, 200)); - tableScrollPane = new JScrollPane(table); - - Vector<Vector<java.io.Serializable>> data = getColorizerVector(); - tableModel.setDataVector(data, columns); - - table.sizeColumnsToFit(0); - table.getColumnModel().getColumn(1).setPreferredWidth(80); - table.getColumnModel().getColumn(2).setPreferredWidth(80); - table.getColumnModel().getColumn(1).setMaxWidth(80); - table.getColumnModel().getColumn(2).setMaxWidth(80); - - searchTable.sizeColumnsToFit(0); - searchTable.getColumnModel().getColumn(0).setPreferredWidth(80); - searchTable.getColumnModel().getColumn(1).setPreferredWidth(80); - searchTable.getColumnModel().getColumn(0).setMaxWidth(80); - searchTable.getColumnModel().getColumn(1).setMaxWidth(80); - //building color choosers needs to be done on the EDT - SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(searchTable)); - - alternatingColorTable.sizeColumnsToFit(0); - alternatingColorTable.getColumnModel().getColumn(0).setPreferredWidth(80); - alternatingColorTable.getColumnModel().getColumn(1).setPreferredWidth(80); - alternatingColorTable.getColumnModel().getColumn(0).setMaxWidth(80); - alternatingColorTable.getColumnModel().getColumn(1).setMaxWidth(80); - //building color choosers needs to be done on the EDT - SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(alternatingColorTable)); - - configureTable(); - - statusBar = new JLabel(DEFAULT_STATUS); - - rulesPanel = buildRulesPanel(); - rulesPanel.setAlignmentX(Component.LEFT_ALIGNMENT); - - JPanel rightPanel = new JPanel(new BorderLayout()); - - JPanel rightOuterPanel = new JPanel(); - rightOuterPanel.setLayout( - new BoxLayout(rightOuterPanel, BoxLayout.X_AXIS)); - rightOuterPanel.add(Box.createHorizontalStrut(10)); - - JPanel southPanel = new JPanel(); - southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.Y_AXIS)); - southPanel.add(Box.createVerticalStrut(5)); - southPanel.add(Box.createVerticalStrut(5)); - JPanel searchAndAlternatingColorPanel = buildSearchAndAlternatingColorPanel(); - JPanel bypassSearchColorsPanel = buildBypassSearchColorsPanel(); - bypassSearchColorsCheckBox.setSelected(applicationPreferenceModel.isBypassSearchColors()); - - JPanel globalLabelPanel = new JPanel(); - globalLabelPanel.setLayout(new BoxLayout(globalLabelPanel, BoxLayout.X_AXIS)); - JLabel globalLabel = new JLabel("Global colors:"); - globalLabelPanel.add(globalLabel); - globalLabelPanel.add(Box.createHorizontalGlue()); - southPanel.add(globalLabelPanel); - southPanel.add(searchAndAlternatingColorPanel); - southPanel.add(bypassSearchColorsPanel); - southPanel.add(Box.createVerticalStrut(5)); - JPanel closePanel = buildClosePanel(); - southPanel.add(closePanel); - - JPanel statusPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - statusPanel.add(statusBar); - southPanel.add(statusPanel); - rightPanel.add(rulesPanel, BorderLayout.CENTER); - rightPanel.add(southPanel, BorderLayout.SOUTH); - rightOuterPanel.add(rightPanel); - - JPanel topPanel = new JPanel(); - topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS)); - - JLabel selectText = new JLabel("Apply a tab's colors"); - topPanel.add(selectText); - topPanel.add(Box.createHorizontalStrut(5)); - - logPanelColorizersModel = new DefaultComboBoxModel(); - final JComboBox loadPanelColorizersComboBox = new JComboBox(logPanelColorizersModel); - loadLogPanelColorizers(); - - topPanel.add(loadPanelColorizersComboBox); - - topPanel.add(Box.createHorizontalStrut(5)); - final Action copyRulesAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) - { - tableModel.getDataVector().clear(); - Object selectedItem = loadPanelColorizersComboBox.getSelectedItem(); - if (selectedItem != null) { - RuleColorizer sourceColorizer = allLogPanelColorizers.get(selectedItem.toString()); - colorizer.setRules(sourceColorizer.getRules()); - updateColors(); - } - } - }; - - loadPanelColorizersComboBox.addActionListener(e -> { - Object selectedItem = loadPanelColorizersComboBox.getSelectedItem(); - if (selectedItem != null) { - String selectedColorizerName = selectedItem.toString(); - copyRulesAction.setEnabled(!(noTab.equals(selectedColorizerName))); - } - }); - - copyRulesAction.putValue(Action.NAME, "Copy color rules"); - copyRulesAction.setEnabled(!(noTab.equals(loadPanelColorizersComboBox.getSelectedItem()))); - - JButton copyRulesButton = new JButton(copyRulesAction); - topPanel.add(copyRulesButton); - - add(topPanel, BorderLayout.NORTH); - add(rightOuterPanel, BorderLayout.CENTER); - if (table.getRowCount() > 0) { - table.getSelectionModel().setSelectionInterval(0, 0); + tableModel = new DefaultTableModel(); + table = new JTable(tableModel); + table.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); + + searchTableModel = new DefaultTableModel(); + searchTable = new JTable(searchTableModel); + searchTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); + searchTable.setPreferredScrollableViewportSize(new Dimension(30, 30)); + + alternatingColorTableModel = new DefaultTableModel(); + alternatingColorTable = new JTable(alternatingColorTableModel); + alternatingColorTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT); + alternatingColorTable.setPreferredScrollableViewportSize(new Dimension(30, 30)); + + columns = new Vector<>(); + columns.add("Expression"); + columns.add("Background"); + columns.add("Foreground"); + + searchColumns = new Vector<>(); + searchColumns.add("Background"); + searchColumns.add("Foreground"); + + alternatingColorColumns = new Vector<>(); + alternatingColorColumns.add("Background"); + alternatingColorColumns.add("Foreground"); + + //searchtable contains only a single-entry vector containing a two-item vector (foreground, background) + searchDataVector = new Vector<>(); + searchDataVectorEntry = new Vector<>(); + searchDataVectorEntry.add(applicationPreferenceModel.getSearchBackgroundColor()); + searchDataVectorEntry.add(applicationPreferenceModel.getSearchForegroundColor()); + searchDataVector.add(searchDataVectorEntry); + searchTableModel.setDataVector(searchDataVector, searchColumns); + + alternatingColorDataVector = new Vector<>(); + alternatingColorDataVectorEntry = new Vector<>(); + alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorBackgroundColor()); + alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorForegroundColor()); + alternatingColorDataVector.add(alternatingColorDataVectorEntry); + alternatingColorTableModel.setDataVector(alternatingColorDataVector, alternatingColorColumns); + + table.setPreferredScrollableViewportSize(new Dimension(525, 200)); + tableScrollPane = new JScrollPane(table); + + Vector<Vector<java.io.Serializable>> data = getColorizerVector(); + tableModel.setDataVector(data, columns); + + table.sizeColumnsToFit(0); + table.getColumnModel().getColumn(1).setPreferredWidth(80); + table.getColumnModel().getColumn(2).setPreferredWidth(80); + table.getColumnModel().getColumn(1).setMaxWidth(80); + table.getColumnModel().getColumn(2).setMaxWidth(80); + + searchTable.sizeColumnsToFit(0); + searchTable.getColumnModel().getColumn(0).setPreferredWidth(80); + searchTable.getColumnModel().getColumn(1).setPreferredWidth(80); + searchTable.getColumnModel().getColumn(0).setMaxWidth(80); + searchTable.getColumnModel().getColumn(1).setMaxWidth(80); + //building color choosers needs to be done on the EDT + SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(searchTable)); + + alternatingColorTable.sizeColumnsToFit(0); + alternatingColorTable.getColumnModel().getColumn(0).setPreferredWidth(80); + alternatingColorTable.getColumnModel().getColumn(1).setPreferredWidth(80); + alternatingColorTable.getColumnModel().getColumn(0).setMaxWidth(80); + alternatingColorTable.getColumnModel().getColumn(1).setMaxWidth(80); + //building color choosers needs to be done on the EDT + SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(alternatingColorTable)); + + configureTable(); + + statusBar = new JLabel(DEFAULT_STATUS); + + rulesPanel = buildRulesPanel(); + rulesPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + + JPanel rightPanel = new JPanel(new BorderLayout()); + + JPanel rightOuterPanel = new JPanel(); + rightOuterPanel.setLayout( + new BoxLayout(rightOuterPanel, BoxLayout.X_AXIS)); + rightOuterPanel.add(Box.createHorizontalStrut(10)); + + JPanel southPanel = new JPanel(); + southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.Y_AXIS)); + southPanel.add(Box.createVerticalStrut(5)); + southPanel.add(Box.createVerticalStrut(5)); + JPanel searchAndAlternatingColorPanel = buildSearchAndAlternatingColorPanel(); + JPanel bypassSearchColorsPanel = buildBypassSearchColorsPanel(); + bypassSearchColorsCheckBox.setSelected(applicationPreferenceModel.isBypassSearchColors()); + + JPanel globalLabelPanel = new JPanel(); + globalLabelPanel.setLayout(new BoxLayout(globalLabelPanel, BoxLayout.X_AXIS)); + JLabel globalLabel = new JLabel("Global colors:"); + globalLabelPanel.add(globalLabel); + globalLabelPanel.add(Box.createHorizontalGlue()); + southPanel.add(globalLabelPanel); + southPanel.add(searchAndAlternatingColorPanel); + southPanel.add(bypassSearchColorsPanel); + southPanel.add(Box.createVerticalStrut(5)); + JPanel closePanel = buildClosePanel(); + southPanel.add(closePanel); + + JPanel statusPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + statusPanel.add(statusBar); + southPanel.add(statusPanel); + rightPanel.add(rulesPanel, BorderLayout.CENTER); + rightPanel.add(southPanel, BorderLayout.SOUTH); + rightOuterPanel.add(rightPanel); + + JPanel topPanel = new JPanel(); + topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS)); + + JLabel selectText = new JLabel("Apply a tab's colors"); + topPanel.add(selectText); + topPanel.add(Box.createHorizontalStrut(5)); + + logPanelColorizersModel = new DefaultComboBoxModel(); + final JComboBox loadPanelColorizersComboBox = new JComboBox(logPanelColorizersModel); + loadLogPanelColorizers(); + + topPanel.add(loadPanelColorizersComboBox); + + topPanel.add(Box.createHorizontalStrut(5)); + final Action copyRulesAction = new AbstractAction() { + public void actionPerformed(ActionEvent e) { + tableModel.getDataVector().clear(); + Object selectedItem = loadPanelColorizersComboBox.getSelectedItem(); + if (selectedItem != null) { + RuleColorizer sourceColorizer = allLogPanelColorizers.get(selectedItem.toString()); + colorizer.setRules(sourceColorizer.getRules()); + updateColors(); + } + } + }; + + loadPanelColorizersComboBox.addActionListener(e -> { + Object selectedItem = loadPanelColorizersComboBox.getSelectedItem(); + if (selectedItem != null) { + String selectedColorizerName = selectedItem.toString(); + copyRulesAction.setEnabled(!(noTab.equals(selectedColorizerName))); + } + }); + + copyRulesAction.putValue(Action.NAME, "Copy color rules"); + copyRulesAction.setEnabled(!(noTab.equals(loadPanelColorizersComboBox.getSelectedItem()))); + + JButton copyRulesButton = new JButton(copyRulesAction); + topPanel.add(copyRulesButton); + + add(topPanel, BorderLayout.NORTH); + add(rightOuterPanel, BorderLayout.CENTER); + if (table.getRowCount() > 0) { + table.getSelectionModel().setSelectionInterval(0, 0); + } + } + + public void loadLogPanelColorizers() { + if (logPanelColorizersModel.getIndexOf(noTab) == -1) { + logPanelColorizersModel.addElement(noTab); + } + for (Object o : allLogPanelColorizers.entrySet()) { + Map.Entry entry = (Map.Entry) o; + if (!entry.getValue().equals(currentLogPanelColorizer) && (logPanelColorizersModel.getIndexOf(entry.getKey()) == -1)) { + logPanelColorizersModel.addElement(entry.getKey()); + } + } + //update search and alternating colors, since they may have changed from another color panel + searchDataVectorEntry.set(0, applicationPreferenceModel.getSearchBackgroundColor()); + searchDataVectorEntry.set(1, applicationPreferenceModel.getSearchForegroundColor()); + alternatingColorDataVectorEntry.set(0, applicationPreferenceModel.getAlternatingColorBackgroundColor()); + alternatingColorDataVectorEntry.set(1, applicationPreferenceModel.getAlternatingColorForegroundColor()); } - } - - public void loadLogPanelColorizers() { - if (logPanelColorizersModel.getIndexOf(noTab) == -1) { - logPanelColorizersModel.addElement(noTab); - } - for (Object o : allLogPanelColorizers.entrySet()) { - Map.Entry entry = (Map.Entry) o; - if (!entry.getValue().equals(currentLogPanelColorizer) && (logPanelColorizersModel.getIndexOf(entry.getKey()) == -1)) { - logPanelColorizersModel.addElement(entry.getKey()); - } - } - //update search and alternating colors, since they may have changed from another color panel - searchDataVectorEntry.set(0, applicationPreferenceModel.getSearchBackgroundColor()); - searchDataVectorEntry.set(1, applicationPreferenceModel.getSearchForegroundColor()); - alternatingColorDataVectorEntry.set(0, applicationPreferenceModel.getAlternatingColorBackgroundColor()); - alternatingColorDataVectorEntry.set(1, applicationPreferenceModel.getAlternatingColorForegroundColor()); - } - - public JPanel buildBypassSearchColorsPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - - bypassSearchColorsCheckBox = new JCheckBox("Don't use a search color for matching rows"); - panel.add(bypassSearchColorsCheckBox); - return panel; - } - - public JPanel buildSearchAndAlternatingColorPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - - JLabel defineSearchColorsLabel = new JLabel("Find colors"); - - panel.add(defineSearchColorsLabel); - - panel.add(Box.createHorizontalStrut(10)); - JScrollPane searchPane = new JScrollPane(searchTable); - searchPane.setBorder(BorderFactory.createEmptyBorder()); - panel.add(searchPane); - - panel.add(Box.createHorizontalStrut(10)); - JLabel defineAlternatingColorLabel = new JLabel("Alternating colors"); - - panel.add(defineAlternatingColorLabel); - - panel.add(Box.createHorizontalStrut(10)); - JScrollPane alternatingColorPane = new JScrollPane(alternatingColorTable); - alternatingColorPane.setBorder(BorderFactory.createEmptyBorder()); - - panel.add(alternatingColorPane); - panel.setBorder(BorderFactory.createEtchedBorder()); - panel.add(Box.createHorizontalGlue()); - return panel; - } - - public void updateColors() { - tableModel.getDataVector().clear(); - tableModel.getDataVector().addAll(getColorizerVector()); - tableModel.fireTableDataChanged(); - } - - private Vector<Vector<java.io.Serializable>> getColorizerVector() { - Vector<Vector<java.io.Serializable>> data = new Vector<>(); - Map map = colorizer.getRules(); - for (Object o1 : map.entrySet()) { - Map.Entry entry = (Map.Entry) o1; - //update ruleset list - if (entry.getKey().equals(currentRuleSet)) { - - for (Object o : ((List) entry.getValue())) { - ColorRule rule = (ColorRule) o; - Vector<java.io.Serializable> v = new Vector<>(); - v.add(rule.getExpression()); - v.add(rule.getBackgroundColor()); - v.add(rule.getForegroundColor()); - data.add(v); - } - } - } - return data; - } - - private void configureTable() { - table.setToolTipText("Double click to edit"); - table.setRowHeight(20); - table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - table.setColumnSelectionAllowed(false); - - Vector backgroundColors = colorizer.getDefaultColors(); - Vector foregroundColors = colorizer.getDefaultColors(); - backgroundColors.add("Browse..."); - foregroundColors.add("Browse..."); - - JComboBox background = new JComboBox(backgroundColors); - background.setMaximumRowCount(15); - background.setRenderer(new ColorListCellRenderer()); - - JComboBox foreground = new JComboBox(foregroundColors); - foreground.setMaximumRowCount(15); - foreground.setRenderer(new ColorListCellRenderer()); - - DefaultCellEditor backgroundEditor = new DefaultCellEditor(background); - DefaultCellEditor foregroundEditor = new DefaultCellEditor(foreground); - JTextField textField = new JTextField(); - textField.addKeyListener( - new ExpressionRuleContext(filterModel, textField)); - table.getColumnModel().getColumn(0).setCellEditor( - new DefaultCellEditor(textField)); - table.getColumnModel().getColumn(1).setCellEditor(backgroundEditor); - table.getColumnModel().getColumn(2).setCellEditor(foregroundEditor); - - background.addItemListener(new ColorItemListener(background)); - foreground.addItemListener(new ColorItemListener(foreground)); - - table.getColumnModel().getColumn(0).setCellRenderer( - new ExpressionTableCellRenderer()); - table.getColumnModel().getColumn(1).setCellRenderer( - new ColorTableCellRenderer()); - table.getColumnModel().getColumn(2).setCellRenderer( - new ColorTableCellRenderer()); - } - - private void configureSingleEntryColorTable(JTable thisTable) { - thisTable.setToolTipText("Double click to edit"); - thisTable.setRowHeight(20); - thisTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - thisTable.setColumnSelectionAllowed(false); - - Vector backgroundColors = colorizer.getDefaultColors(); - Vector foregroundColors = colorizer.getDefaultColors(); - backgroundColors.add("Browse..."); - foregroundColors.add("Browse..."); - - JComboBox background = new JComboBox(backgroundColors); - background.setMaximumRowCount(15); - background.setRenderer(new ColorListCellRenderer()); - - JComboBox foreground = new JComboBox(foregroundColors); - foreground.setMaximumRowCount(15); - foreground.setRenderer(new ColorListCellRenderer()); - - DefaultCellEditor backgroundEditor = new DefaultCellEditor(background); - DefaultCellEditor foregroundEditor = new DefaultCellEditor(foreground); - thisTable.getColumnModel().getColumn(0).setCellEditor(backgroundEditor); - thisTable.getColumnModel().getColumn(1).setCellEditor(foregroundEditor); - - background.addItemListener(new ColorItemListener(background)); - foreground.addItemListener(new ColorItemListener(foreground)); - - thisTable.getColumnModel().getColumn(0).setCellRenderer( - new ColorTableCellRenderer()); - thisTable.getColumnModel().getColumn(1).setCellRenderer( - new ColorTableCellRenderer()); - } - - public void setCloseActionListener(ActionListener listener) { - closeListener = listener; - } - - public void hidePanel() { - if (closeListener != null) { - closeListener.actionPerformed(null); + + public JPanel buildBypassSearchColorsPanel() { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + + bypassSearchColorsCheckBox = new JCheckBox("Don't use a search color for matching rows"); + panel.add(bypassSearchColorsCheckBox); + return panel; } - } - void applyRules(String ruleSet, RuleColorizer applyingColorizer) { - table.getColumnModel().getColumn(0).getCellEditor().stopCellEditing(); + public JPanel buildSearchAndAlternatingColorPanel() { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - List list = new ArrayList(); - Vector vector = tableModel.getDataVector(); - StringBuilder result = new StringBuilder(); + JLabel defineSearchColorsLabel = new JLabel("Find colors"); - for (int i = 0; i < vector.size(); i++) { - Vector v = (Vector) vector.elementAt(i); + panel.add(defineSearchColorsLabel); - try { - Rule expressionRule = ExpressionRule.getRule((String) v.elementAt(0)); - Color background = getBackground(); - Color foreground = getForeground(); + panel.add(Box.createHorizontalStrut(10)); + JScrollPane searchPane = new JScrollPane(searchTable); + searchPane.setBorder(BorderFactory.createEmptyBorder()); + panel.add(searchPane); - if (v.elementAt(1) instanceof Color) { - background = (Color) v.elementAt(1); - } + panel.add(Box.createHorizontalStrut(10)); + JLabel defineAlternatingColorLabel = new JLabel("Alternating colors"); - if (v.elementAt(2) instanceof Color) { - foreground = (Color) v.elementAt(2); - } + panel.add(defineAlternatingColorLabel); - ColorRule r = new ColorRule((String)v.elementAt(0), expressionRule, background, foreground); - list.add(r); - } catch (IllegalArgumentException iae) { - if (!result.toString().equals("")) { - result.append("<br>"); - } + panel.add(Box.createHorizontalStrut(10)); + JScrollPane alternatingColorPane = new JScrollPane(alternatingColorTable); + alternatingColorPane.setBorder(BorderFactory.createEmptyBorder()); + + panel.add(alternatingColorPane); + panel.setBorder(BorderFactory.createEtchedBorder()); + panel.add(Box.createHorizontalGlue()); + return panel; + } - result.append(iae.getMessage()); - } + public void updateColors() { + tableModel.getDataVector().clear(); + tableModel.getDataVector().addAll(getColorizerVector()); + tableModel.fireTableDataChanged(); } - //all rules are valid, they can be applied - if (result.toString().equals("")) { - ((ExpressionTableCellRenderer) table.getColumnModel().getColumn(0).getCellRenderer()) - .setToolTipText("Double click to edit"); - statusBar.setText(DEFAULT_STATUS); - - //only update rules if there were no errors - Map map = new HashMap(); - map.put(ruleSet, list); - applyingColorizer.setRules(map); - - } else { - statusBar.setText("Errors - see expression tooltip (color filters won't be active until errors are resolved)"); - ((ExpressionTableCellRenderer) table.getColumnModel().getColumn(0).getCellRenderer()) - .setToolTipText("<html>" + result.toString() + "</html>"); + private Vector<Vector<java.io.Serializable>> getColorizerVector() { + Vector<Vector<java.io.Serializable>> data = new Vector<>(); + Map map = colorizer.getRules(); + for (Object o1 : map.entrySet()) { + Map.Entry entry = (Map.Entry) o1; + //update ruleset list + if (entry.getKey().equals(currentRuleSet)) { + + for (Object o : ((List) entry.getValue())) { + ColorRule rule = (ColorRule) o; + Vector<java.io.Serializable> v = new Vector<>(); + v.add(rule.getExpression()); + v.add(rule.getBackgroundColor()); + v.add(rule.getForegroundColor()); + data.add(v); + } + } + } + return data; + } + + private void configureTable() { + table.setToolTipText("Double click to edit"); + table.setRowHeight(20); + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + table.setColumnSelectionAllowed(false); + + Vector backgroundColors = colorizer.getDefaultColors(); + Vector foregroundColors = colorizer.getDefaultColors(); + backgroundColors.add("Browse..."); + foregroundColors.add("Browse..."); + + JComboBox background = new JComboBox(backgroundColors); + background.setMaximumRowCount(15); + background.setRenderer(new ColorListCellRenderer()); + + JComboBox foreground = new JComboBox(foregroundColors); + foreground.setMaximumRowCount(15); + foreground.setRenderer(new ColorListCellRenderer()); + + DefaultCellEditor backgroundEditor = new DefaultCellEditor(background); + DefaultCellEditor foregroundEditor = new DefaultCellEditor(foreground); + JTextField textField = new JTextField(); + textField.addKeyListener( + new ExpressionRuleContext(filterModel, textField)); + table.getColumnModel().getColumn(0).setCellEditor( + new DefaultCellEditor(textField)); + table.getColumnModel().getColumn(1).setCellEditor(backgroundEditor); + table.getColumnModel().getColumn(2).setCellEditor(foregroundEditor); + + background.addItemListener(new ColorItemListener(background)); + foreground.addItemListener(new ColorItemListener(foreground)); + + table.getColumnModel().getColumn(0).setCellRenderer( + new ExpressionTableCellRenderer()); + table.getColumnModel().getColumn(1).setCellRenderer( + new ColorTableCellRenderer()); + table.getColumnModel().getColumn(2).setCellRenderer( + new ColorTableCellRenderer()); } - } - JPanel buildClosePanel() { - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - panel.add(Box.createHorizontalGlue()); + private void configureSingleEntryColorTable(JTable thisTable) { + thisTable.setToolTipText("Double click to edit"); + thisTable.setRowHeight(20); + thisTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + thisTable.setColumnSelectionAllowed(false); + + Vector backgroundColors = colorizer.getDefaultColors(); + Vector foregroundColors = colorizer.getDefaultColors(); + backgroundColors.add("Browse..."); + foregroundColors.add("Browse..."); + + JComboBox background = new JComboBox(backgroundColors); + background.setMaximumRowCount(15); + background.setRenderer(new ColorListCellRenderer()); + + JComboBox foreground = new JComboBox(foregroundColors); + foreground.setMaximumRowCount(15); + foreground.setRenderer(new ColorListCellRenderer()); + + DefaultCellEditor backgroundEditor = new DefaultCellEditor(background); + DefaultCellEditor foregroundEditor = new DefaultCellEditor(foreground); + thisTable.getColumnModel().getColumn(0).setCellEditor(backgroundEditor); + thisTable.getColumnModel().getColumn(1).setCellEditor(foregroundEditor); + + background.addItemListener(new ColorItemListener(background)); + foreground.addItemListener(new ColorItemListener(foreground)); + + thisTable.getColumnModel().getColumn(0).setCellRenderer( + new ColorTableCellRenderer()); + thisTable.getColumnModel().getColumn(1).setCellRenderer( + new ColorTableCellRenderer()); + } - JButton saveAsDefaultButton = new JButton(" Save as default "); + public void setCloseActionListener(ActionListener listener) { + closeListener = listener; + } - saveAsDefaultButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - RuleColorizer defaultColorizer = allLogPanelColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME); - applyRules(currentRuleSet, defaultColorizer); + public void hidePanel() { + if (closeListener != null) { + closeListener.actionPerformed(null); } - }); + } + + void applyRules(String ruleSet, RuleColorizer applyingColorizer) { + table.getColumnModel().getColumn(0).getCellEditor().stopCellEditing(); + + List list = new ArrayList(); + Vector vector = tableModel.getDataVector(); + StringBuilder result = new StringBuilder(); - panel.add(saveAsDefaultButton); + for (int i = 0; i < vector.size(); i++) { + Vector v = (Vector) vector.elementAt(i); - JButton applyButton = new JButton(" Apply "); + try { + Rule expressionRule = ExpressionRule.getRule((String) v.elementAt(0)); + Color background = getBackground(); + Color foreground = getForeground(); - applyButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - applyRules(currentRuleSet, colorizer); - saveSearchColors(); - saveAlternatingColors(); - saveBypassFlag(); + if (v.elementAt(1) instanceof Color) { + background = (Color) v.elementAt(1); + } + + if (v.elementAt(2) instanceof Color) { + foreground = (Color) v.elementAt(2); + } + + ColorRule r = new ColorRule((String) v.elementAt(0), expressionRule, background, foreground); + list.add(r); + } catch (IllegalArgumentException iae) { + if (!result.toString().equals("")) { + result.append("<br>"); + } + + result.append(iae.getMessage()); + } } - }); - panel.add(Box.createHorizontalStrut(10)); - panel.add(applyButton); + //all rules are valid, they can be applied + if (result.toString().equals("")) { + ((ExpressionTableCellRenderer) table.getColumnModel().getColumn(0).getCellRenderer()) + .setToolTipText("Double click to edit"); + statusBar.setText(DEFAULT_STATUS); - JButton closeButton = new JButton(" Close "); + //only update rules if there were no errors + Map map = new HashMap(); + map.put(ruleSet, list); + applyingColorizer.setRules(map); - closeButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - hidePanel(); + } else { + statusBar.setText("Errors - see expression tooltip (color filters won't be active until errors are resolved)"); + ((ExpressionTableCellRenderer) table.getColumnModel().getColumn(0).getCellRenderer()) + .setToolTipText("<html>" + result.toString() + "</html>"); } - }); - panel.add(Box.createHorizontalStrut(10)); - panel.add(closeButton); - - return panel; - } - - private void saveSearchColors() { - Vector thisVector = (Vector) searchTableModel.getDataVector().get(0); - applicationPreferenceModel.setSearchBackgroundColor((Color)thisVector.get(0)); - applicationPreferenceModel.setSearchForegroundColor((Color)thisVector.get(1)); - } - - private void saveAlternatingColors() { - Vector thisVector = (Vector) alternatingColorTableModel.getDataVector().get(0); - applicationPreferenceModel.setAlternatingBackgroundColor((Color)thisVector.get(0)); - Color alternatingColorForegroundColor = (Color) thisVector.get(1); - applicationPreferenceModel.setAlternatingForegroundColor(alternatingColorForegroundColor); - } - - private void saveBypassFlag() { - applicationPreferenceModel.setBypassSearchColors(bypassSearchColorsCheckBox.isSelected()); - } - - JPanel buildUpDownPanel() { - JPanel panel = new JPanel(new BorderLayout()); - JPanel innerPanel = new JPanel(); - innerPanel.setLayout(new GridLayout(5, 1)); - - final JButton upButton = new JButton(ChainsawIcons.ICON_UP); - upButton.setToolTipText("Move selected rule up"); - - final JButton downButton = new JButton(ChainsawIcons.ICON_DOWN); - downButton.setToolTipText("Move selected rule down"); - upButton.setEnabled(false); - downButton.setEnabled(false); - - table.getSelectionModel().addListSelectionListener( + } + + JPanel buildClosePanel() { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + panel.add(Box.createHorizontalGlue()); + + JButton saveAsDefaultButton = new JButton(" Save as default "); + + saveAsDefaultButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + RuleColorizer defaultColorizer = allLogPanelColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME); + applyRules(currentRuleSet, defaultColorizer); + } + }); + + panel.add(saveAsDefaultButton); + + JButton applyButton = new JButton(" Apply "); + + applyButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + applyRules(currentRuleSet, colorizer); + saveSearchColors(); + saveAlternatingColors(); + saveBypassFlag(); + } + }); + + panel.add(Box.createHorizontalStrut(10)); + panel.add(applyButton); + + JButton closeButton = new JButton(" Close "); + + closeButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + hidePanel(); + } + }); + panel.add(Box.createHorizontalStrut(10)); + panel.add(closeButton); + + return panel; + } + + private void saveSearchColors() { + Vector thisVector = (Vector) searchTableModel.getDataVector().get(0); + applicationPreferenceModel.setSearchBackgroundColor((Color) thisVector.get(0)); + applicationPreferenceModel.setSearchForegroundColor((Color) thisVector.get(1)); + } + + private void saveAlternatingColors() { + Vector thisVector = (Vector) alternatingColorTableModel.getDataVector().get(0); + applicationPreferenceModel.setAlternatingBackgroundColor((Color) thisVector.get(0)); + Color alternatingColorForegroundColor = (Color) thisVector.get(1); + applicationPreferenceModel.setAlternatingForegroundColor(alternatingColorForegroundColor); + } + + private void saveBypassFlag() { + applicationPreferenceModel.setBypassSearchColors(bypassSearchColorsCheckBox.isSelected()); + } + + JPanel buildUpDownPanel() { + JPanel panel = new JPanel(new BorderLayout()); + JPanel innerPanel = new JPanel(); + innerPanel.setLayout(new GridLayout(5, 1)); + + final JButton upButton = new JButton(ChainsawIcons.ICON_UP); + upButton.setToolTipText("Move selected rule up"); + + final JButton downButton = new JButton(ChainsawIcons.ICON_DOWN); + downButton.setToolTipText("Move selected rule down"); + upButton.setEnabled(false); + downButton.setEnabled(false); + + table.getSelectionModel().addListSelectionListener( e -> { - if (!e.getValueIsAdjusting()) { - int index = table.getSelectionModel().getMaxSelectionIndex(); - - if (index < 0) { - downButton.setEnabled(false); - upButton.setEnabled(false); - } else if ((index == 0) && (tableModel.getRowCount() == 1)) { - downButton.setEnabled(false); - upButton.setEnabled(false); - } else if ((index == 0) && (tableModel.getRowCount() > 1)) { - downButton.setEnabled(true); - upButton.setEnabled(false); - } else if (index == (tableModel.getRowCount() - 1)) { - downButton.setEnabled(false); - upButton.setEnabled(true); - } else { - downButton.setEnabled(true); - upButton.setEnabled(true); + if (!e.getValueIsAdjusting()) { + int index = table.getSelectionModel().getMaxSelectionIndex(); + + if (index < 0) { + downButton.setEnabled(false); + upButton.setEnabled(false); + } else if ((index == 0) && (tableModel.getRowCount() == 1)) { + downButton.setEnabled(false); + upButton.setEnabled(false); + } else if ((index == 0) && (tableModel.getRowCount() > 1)) { + downButton.setEnabled(true); + upButton.setEnabled(false); + } else if (index == (tableModel.getRowCount() - 1)) { + downButton.setEnabled(false); + upButton.setEnabled(true); + } else { + downButton.setEnabled(true); + upButton.setEnabled(true); + } } - } }); - JPanel upPanel = new JPanel(); + JPanel upPanel = new JPanel(); - upPanel.add(upButton); + upPanel.add(upButton); - JPanel downPanel = new JPanel(); - downPanel.add(downButton); + JPanel downPanel = new JPanel(); + downPanel.add(downButton); - innerPanel.add(new JLabel("")); - innerPanel.add(upPanel); - innerPanel.add(new JLabel("")); - innerPanel.add(downPanel); - panel.add(innerPanel, BorderLayout.CENTER); + innerPanel.add(new JLabel("")); + innerPanel.add(upPanel); + innerPanel.add(new JLabel("")); + innerPanel.add(downPanel); + panel.add(innerPanel, BorderLayout.CENTER); - upButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - int index = table.getSelectionModel().getMaxSelectionIndex(); + upButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + int index = table.getSelectionModel().getMaxSelectionIndex(); - if (index > 0) { - Vector v = tableModel.getDataVector(); - Vector row = (Vector) v.elementAt(index); - tableModel.removeRow(index); - index = index - 1; - tableModel.insertRow(index, row); - table.getSelectionModel().setSelectionInterval(index, index); - } - } - }); + if (index > 0) { + Vector v = tableModel.getDataVector(); + Vector row = (Vector) v.elementAt(index); + tableModel.removeRow(index); + index = index - 1; + tableModel.insertRow(index, row); + table.getSelectionModel().setSelectionInterval(index, index); + } + } + }); - downButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - int index = table.getSelectionModel().getMaxSelectionIndex(); + downButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + int index = table.getSelectionModel().getMaxSelectionIndex(); - if ((index > -1) && (index < (tableModel.getRowCount() - 1))) { - Vector v = tableModel.getDataVector(); - Vector row = (Vector) v.elementAt(index); + if ((index > -1) && (index < (tableModel.getRowCount() - 1))) { + Vector v = tableModel.getDataVector(); + Vector row = (Vector) v.elementAt(index); - tableModel.removeRow(index); - index = index + 1; - tableModel.insertRow(index, row); - table.getSelectionModel().setSelectionInterval(index, index); - } - } - }); + tableModel.removeRow(index); + index = index + 1; + tableModel.insertRow(index, row); + table.getSelectionModel().setSelectionInterval(index, index); + } + } + }); - return panel; - } + return panel; + } - JPanel buildRulesPanel() { - JPanel listPanel = new JPanel(new BorderLayout()); - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + JPanel buildRulesPanel() { + JPanel listPanel = new JPanel(new BorderLayout()); + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - panel.add(Box.createVerticalStrut(10)); + panel.add(Box.createVerticalStrut(10)); - JLabel rulesLabel = new JLabel("Rules:"); + JLabel rulesLabel = new JLabel("Rules:"); - panel.add(rulesLabel); + panel.add(rulesLabel); - JPanel buttonPanel = new JPanel(new GridLayout(0, 2)); - buttonPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + JPanel buttonPanel = new JPanel(new GridLayout(0, 2)); + buttonPanel.setAlignmentX(Component.LEFT_ALIGNMENT); - JPanel newPanel = new JPanel(); - JButton newButton = new JButton(" New "); - newButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - int currentRow = table.getSelectedRow(); - Vector<java.io.Serializable> v = new Vector<>(); - v.add(""); - v.add(Color.white); - v.add(Color.black); + JPanel newPanel = new JPanel(); + JButton newButton = new JButton(" New "); + newButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + int currentRow = table.getSelectedRow(); + Vector<java.io.Serializable> v = new Vector<>(); + v.add(""); + v.add(Color.white); + v.add(Color.black); - if (currentRow < 0) { - tableModel.addRow(v); - currentRow = table.getRowCount() - 1; - } else { - tableModel.insertRow(currentRow, v); - } + if (currentRow < 0) { + tableModel.addRow(v); + currentRow = table.getRowCount() - 1; + } else { + tableModel.insertRow(currentRow, v); + } - table.getSelectionModel().setSelectionInterval( - currentRow, currentRow); - } - }); + table.getSelectionModel().setSelectionInterval( + currentRow, currentRow); + } + }); - newPanel.add(newButton); + newPanel.add(newButton); - JPanel deletePanel = new JPanel(); - final JButton deleteButton = new JButton(" Delete "); - deleteButton.setEnabled(false); + JPanel deletePanel = new JPanel(); + final JButton deleteButton = new JButton(" Delete "); + deleteButton.setEnabled(false); - deleteButton.addActionListener( - new AbstractAction() { - public void actionPerformed(ActionEvent evt) { - int index = table.getSelectionModel().getMaxSelectionIndex(); + deleteButton.addActionListener( + new AbstractAction() { + public void actionPerformed(ActionEvent evt) { + int index = table.getSelectionModel().getMaxSelectionIndex(); - if ((index > -1) && (index < table.getRowCount())) { - tableModel.removeRow(index); + if ((index > -1) && (index < table.getRowCount())) { + tableModel.removeRow(index); - if (index > 0) { - index = index - 1; - } + if (index > 0) { + index = index - 1; + } - if (tableModel.getRowCount() > 0) { - table.getSelectionModel().setSelectionInterval(index, index); - } - } - } - }); + if (tableModel.getRowCount() > 0) { + table.getSelectionModel().setSelectionInterval(index, index); + } + } + } + }); - table.getSelectionModel().addListSelectionListener( + table.getSelectionModel().addListSelectionListener( e -> { - if (!e.getValueIsAdjusting()) { - int index = table.getSelectionModel().getMaxSelectionIndex(); - - if (index < 0) { - deleteButton.setEnabled(false); - } else { - deleteButton.setEnabled(true); + if (!e.getValueIsAdjusting()) { + int index = table.getSelectionModel().getMaxSelectionIndex(); + + if (index < 0) { + deleteButton.setEnabled(false); + } else { + deleteButton.setEnabled(true); + } } - } }); - deletePanel.add(deleteButton); + deletePanel.add(deleteButton); - buttonPanel.add(newPanel); - buttonPanel.add(deletePanel); + buttonPanel.add(newPanel); + buttonPanel.add(deletePanel); - listPanel.add(panel, BorderLayout.NORTH); + listPanel.add(panel, BorderLayout.NORTH); - JPanel tablePanel = new JPanel(new BorderLayout()); - tableScrollPane.setBorder(BorderFactory.createEtchedBorder()); - tablePanel.add(tableScrollPane, BorderLayout.CENTER); - tablePanel.add(buildUpDownPanel(), BorderLayout.EAST); - listPanel.add(tablePanel, BorderLayout.CENTER); - listPanel.add(buttonPanel, BorderLayout.SOUTH); + JPanel tablePanel = new JPanel(new BorderLayout()); + tableScrollPane.setBorder(BorderFactory.createEtchedBorder()); + tablePanel.add(tableScrollPane, BorderLayout.CENTER); + tablePanel.add(buildUpDownPanel(), BorderLayout.EAST); + listPanel.add(tablePanel, BorderLayout.CENTER); + listPanel.add(buttonPanel, BorderLayout.SOUTH); - return listPanel; - } + return listPanel; + } class ColorListCellRenderer extends JLabel implements ListCellRenderer { - ColorListCellRenderer() { - setOpaque(true); - } + ColorListCellRenderer() { + setOpaque(true); + } + + public Component getListCellRendererComponent( + JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + setText(" "); - public Component getListCellRendererComponent( - JList list, Object value, int index, boolean isSelected, - boolean cellHasFocus) { - setText(" "); + if (isSelected && (index > -1)) { + setBorder(BorderFactory.createLineBorder(Color.black, 2)); + } else { + setBorder(BorderFactory.createEmptyBorder()); + } - if (isSelected && (index > -1)) { - setBorder(BorderFactory.createLineBorder(Color.black, 2)); - } else { - setBorder(BorderFactory.createEmptyBorder()); - } + if (value instanceof Color) { + setBackground((Color) value); + } else { + setBackground(Color.white); - if (value instanceof Color) { - setBackground((Color) value); - } else { - setBackground(Color.white); + if (value != null) { + setText(value.toString()); + } + } - if (value != null) { - setText(value.toString()); + return this; } - } - - return this; - } - } - - class ColorItemListener implements ItemListener { - JComboBox box; - JDialog dialog; - JColorChooser colorChooser; - Color lastColor; - - ColorItemListener(final JComboBox box) { - this.box = box; - colorChooser = new JColorChooser(); - dialog = - JColorChooser.createDialog( - box, "Pick a Color", true, //modal - colorChooser, - e -> { - box.insertItemAt(colorChooser.getColor(), 0); - box.setSelectedIndex(0); - }, //OK button handler - e -> box.setSelectedItem(lastColor)); //CANCEL button handler - dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); } - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - if (box.getSelectedItem() instanceof Color) { - box.setBackground((Color) box.getSelectedItem()); - repaint(); - } else { - box.setBackground(Color.white); - int selectedRow = table.getSelectedRow(); - int selectedColumn = table.getSelectedColumn(); - if (selectedRow != -1 && selectedColumn != -1) { - colorChooser.setColor((Color)table.getValueAt(selectedRow, selectedColumn)); - lastColor = (Color)table.getValueAt(selectedRow, selectedColumn); - } - dialog.setVisible(true); + class ColorItemListener implements ItemListener { + JComboBox box; + JDialog dialog; + JColorChooser colorChooser; + Color lastColor; + + ColorItemListener(final JComboBox box) { + this.box = box; + colorChooser = new JColorChooser(); + dialog = + JColorChooser.createDialog( + box, "Pick a Color", true, //modal + colorChooser, + e -> { + box.insertItemAt(colorChooser.getColor(), 0); + box.setSelectedIndex(0); + }, //OK button handler + e -> box.setSelectedItem(lastColor)); //CANCEL button handler + dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); } - } - } - } - - class ColorTableCellRenderer implements TableCellRenderer { - Border border; - JPanel panel; - - ColorTableCellRenderer() { - panel = new JPanel(); - panel.setOpaque(true); - } - public Color getCurrentColor() { - return panel.getBackground(); + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + if (box.getSelectedItem() instanceof Color) { + box.setBackground((Color) box.getSelectedItem()); + repaint(); + } else { + box.setBackground(Color.white); + int selectedRow = table.getSelectedRow(); + int selectedColumn = table.getSelectedColumn(); + if (selectedRow != -1 && selectedColumn != -1) { + colorChooser.setColor((Color) table.getValueAt(selectedRow, selectedColumn)); + lastColor = (Color) table.getValueAt(selectedRow, selectedColumn); + } + dialog.setVisible(true); + } + } + } } - public Component getTableCellRendererComponent( - JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, - int column) { - if (value instanceof Color) { - panel.setBackground((Color) value); - } - if (border == null) { - border = BorderFactory.createMatteBorder(2, 2, 2, 2, table.getBackground()); - } + class ColorTableCellRenderer implements TableCellRenderer { + Border border; + JPanel panel; - panel.setBorder(border); + ColorTableCellRenderer() { + panel = new JPanel(); + panel.setOpaque(true); + } - return panel; - } - } - - class ExpressionTableCellRenderer implements TableCellRenderer { - JPanel panel = new JPanel(); - JLabel expressionLabel = new JLabel(); - JLabel iconLabel = new JLabel(); - Icon selectedIcon = new SelectedIcon(true); - Icon unselectedIcon = new SelectedIcon(false); - - ExpressionTableCellRenderer() { - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - panel.setOpaque(true); - panel.add(iconLabel); - panel.add(Box.createHorizontalStrut(5)); - panel.add(expressionLabel); - } - - void setToolTipText(String text) { - panel.setToolTipText(text); + public Color getCurrentColor() { + return panel.getBackground(); + } + + public Component getTableCellRendererComponent( + JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, + int column) { + if (value instanceof Color) { + panel.setBackground((Color) value); + } + if (border == null) { + border = BorderFactory.createMatteBorder(2, 2, 2, 2, table.getBackground()); + } + + panel.setBorder(border); + + return panel; + } } - public Component getTableCellRendererComponent( - JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, - int column) { - if (value == null) { - return panel; - } - - Vector v = tableModel.getDataVector(); - Vector r = (Vector) v.elementAt(row); - expressionLabel.setText(value.toString()); - - if (r.elementAt(1) instanceof Color) { - expressionLabel.setBackground((Color) r.elementAt(1)); - panel.setBackground((Color) r.elementAt(1)); - } - - if (r.elementAt(2) instanceof Color) { - expressionLabel.setForeground((Color) r.elementAt(2)); - panel.setForeground((Color) r.elementAt(2)); - } - - if (isSelected) { - iconLabel.setIcon(selectedIcon); - } else { - iconLabel.setIcon(unselectedIcon); - } - - return panel; + class ExpressionTableCellRenderer implements TableCellRenderer { + JPanel panel = new JPanel(); + JLabel expressionLabel = new JLabel(); + JLabel iconLabel = new JLabel(); + Icon selectedIcon = new SelectedIcon(true); + Icon unselectedIcon = new SelectedIcon(false); + + ExpressionTableCellRenderer() { + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + panel.setOpaque(true); + panel.add(iconLabel); + panel.add(Box.createHorizontalStrut(5)); + panel.add(expressionLabel); + } + + void setToolTipText(String text) { + panel.setToolTipText(text); + } + + public Component getTableCellRendererComponent( + JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, + int column) { + if (value == null) { + return panel; + } + + Vector v = tableModel.getDataVector(); + Vector r = (Vector) v.elementAt(row); + expressionLabel.setText(value.toString()); + + if (r.elementAt(1) instanceof Color) { + expressionLabel.setBackground((Color) r.elementAt(1)); + panel.setBackground((Color) r.elementAt(1)); + } + + if (r.elementAt(2) instanceof Color) { + expressionLabel.setForeground((Color) r.elementAt(2)); + panel.setForeground((Color) r.elementAt(2)); + } + + if (isSelected) { + iconLabel.setIcon(selectedIcon); + } else { + iconLabel.setIcon(unselectedIcon); + } + + return panel; + } } - } - - class SelectedIcon implements Icon { - private boolean isSelected; - private int width = 9; - private int height = 18; - private int[] xPoints = new int[4]; - private int[] yPoints = new int[4]; - - public SelectedIcon(boolean isSelected) { - this.isSelected = isSelected; - xPoints[0] = 0; - yPoints[0] = -1; - xPoints[1] = 0; - yPoints[1] = height; - xPoints[2] = width; - yPoints[2] = height / 2; - xPoints[3] = width; - yPoints[3] = (height / 2) - 1; - } - - public int getIconHeight() { - return height; - } - - public int getIconWidth() { - return width; - } - - public void paintIcon(Component c, Graphics g, int x, int y) { - if (isSelected) { - int length = xPoints.length; - int[] newXPoints = new int[length]; - int[] newYPoints = new int[length]; - - for (int i = 0; i < length; i++) { - newXPoints[i] = xPoints[i] + x; - newYPoints[i] = yPoints[i] + y; - } - - g.setColor(Color.black); - - g.fillPolygon(newXPoints, newYPoints, length); + + class SelectedIcon implements Icon { + private boolean isSelected; + private int width = 9; + private int height = 18; + private int[] xPoints = new int[4]; + private int[] yPoints = new int[4]; + + public SelectedIcon(boolean isSelected) { + this.isSelected = isSelected; + xPoints[0] = 0; + yPoints[0] = -1; + xPoints[1] = 0; + yPoints[1] = height; + xPoints[2] = width; + yPoints[2] = height / 2; + xPoints[3] = width; + yPoints[3] = (height / 2) - 1; + } + + public int getIconHeight() { + return height; } - } - } + + public int getIconWidth() { + return width; + } + + public void paintIcon(Component c, Graphics g, int x, int y) { + if (isSelected) { + int length = xPoints.length; + int[] newXPoints = new int[length]; + int[] newYPoints = new int[length]; + + for (int i = 0; i < length; i++) { + newXPoints[i] = xPoints[i] + x; + newYPoints[i] = yPoints[i] + y; + } + + g.setColor(Color.black); + + g.fillPolygon(newXPoints, newYPoints, length); + } + } + } }
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/96ebd9ad/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java b/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java index 3a2a91e..464070c 100644 --- a/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java +++ b/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,26 +19,27 @@ package org.apache.log4j.chainsaw.color; import org.apache.log4j.spi.LoggingEvent; -import java.awt.Color; +import java.awt.*; /** * Given a LoggingEvent, can determine an appropriate * Color to use based on whatever this implementation * has been coded. - * + * * @author Paul Smith <psm...@apache.org> * @author Scott Deboy <sde...@apache.org> */ public interface Colorizer { - /** - * Given a LoggingEvent, returns a Color to use for background, - * or null if this instance cannot determine one, or that - * the stanard color should be used. - * @param event - * @return background color - */ - Color getBackgroundColor(LoggingEvent event); - - Color getForegroundColor(LoggingEvent event); + /** + * Given a LoggingEvent, returns a Color to use for background, + * or null if this instance cannot determine one, or that + * the stanard color should be used. + * + * @param event + * @return background color + */ + Color getBackgroundColor(LoggingEvent event); + + Color getForegroundColor(LoggingEvent event); }