You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by sd...@apache.org on 2009/05/21 10:58:45 UTC
svn commit: r777023 - in /logging/chainsaw/trunk/src/main:
java/org/apache/log4j/chainsaw/LogPanel.java
java/org/apache/log4j/chainsaw/LogUI.java
java/org/apache/log4j/chainsaw/color/ColorPanel.java
resources/org/apache/log4j/chainsaw/WelcomePanel.html
Author: sdeboy
Date: Thu May 21 08:58:44 2009
New Revision: 777023
URL: http://svn.apache.org/viewvc?rev=777023&view=rev
Log:
Add support for copying color rules from one tab to another (from color panel)
Also added Ctrl-G goto-line info to Welcome tab
Modified:
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java?rev=777023&r1=777022&r2=777023&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java Thu May 21 08:58:44 2009
@@ -200,6 +200,7 @@
private final String identifier;
private final ChainsawStatusBar statusBar;
private final JFrame preferencesFrame = new JFrame();
+ private ColorPanel colorPanel;
private final JFrame colorFrame = new JFrame();
private final JFrame undockedFrame;
private final DockablePanel externalPanel;
@@ -243,14 +244,14 @@
private final Vector filterExpressionVector;
private static final Color INVALID_EXPRESSION_BACKGROUND = new Color(251, 186, 186);
- /**
+ /**
* 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) {
+ public LogPanel(final ChainsawStatusBar statusBar, final String identifier, int cyclicBufferSize, Map allColorizers) {
this.identifier = identifier;
this.statusBar = statusBar;
logger.debug("creating logpanel for " + identifier);
@@ -647,7 +648,8 @@
colorFrame.setIconImage(
((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
- final ColorPanel colorPanel = new ColorPanel(colorizer, filterModel);
+ allColorizers.put(identifier, colorizer);
+ colorPanel = new ColorPanel(colorizer, filterModel, allColorizers);
colorFrame.getContentPane().add(colorPanel);
@@ -1678,6 +1680,7 @@
* Display the color rule frame
*/
void showColorPreferences() {
+ colorPanel.loadLogPanelColorizers();
colorFrame.pack();
colorFrame.setVisible(true);
}
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java?rev=777023&r1=777022&r2=777023&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java Thu May 21 08:58:44 2009
@@ -107,10 +107,8 @@
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.chainsaw.receivers.ReceiversPanel;
import org.apache.log4j.chainsaw.version.VersionManager;
-import org.apache.log4j.helpers.Constants;
import org.apache.log4j.net.SocketNodeEventListener;
import org.apache.log4j.plugins.Plugin;
-import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.plugins.PluginEvent;
import org.apache.log4j.plugins.PluginListener;
import org.apache.log4j.plugins.PluginRegistry;
@@ -124,6 +122,7 @@
import org.apache.log4j.spi.LoggerRepositoryEx;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.RepositorySelector;
+import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.xml.XMLDecoder;
@@ -202,8 +201,10 @@
private static final LoggerRepositoryExImpl repositoryExImpl = new LoggerRepositoryExImpl(LogManager.getLoggerRepository());
private PluginRegistry pluginRegistry;
+ //map of tab names to rulecolorizers
+ private Map allColorizers = new HashMap();
- /**
+ /**
* Constructor which builds up all the visual elements of the frame including
* the Menu bar
*/
@@ -1918,7 +1919,8 @@
private void buildLogPanel(
boolean customExpression, final String ident, final List events)
throws IllegalArgumentException {
- final LogPanel thisPanel = new LogPanel(getStatusBar(), ident, cyclicBufferSize);
+ final LogPanel thisPanel = new LogPanel(getStatusBar(), ident, cyclicBufferSize, allColorizers);
+
/**
* Now add the panel as a batch listener so it can handle it's own
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java?rev=777023&r1=777022&r2=777023&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java Thu May 21 08:58:44 2009
@@ -38,11 +38,12 @@
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.DefaultListModel;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
@@ -82,8 +83,10 @@
* @author Scott Deboy <sd...@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 ruleSetsPanel;
private JPanel rulesPanel;
private FilterModel filterModel;
private DefaultTableModel tableModel;
@@ -92,17 +95,20 @@
private ActionListener closeListener;
private JLabel statusBar;
private Vector columns;
- private String currentRuleSet = "Default";
- private DefaultListModel ruleSetListModel;
+ private final String currentTabString = "Current tab";
+ private DefaultComboBoxModel logPanelColorizersModel;
+ private Map allLogPanelColorizers;
+ private RuleColorizer currentLogPanelColorizer;
- public ColorPanel(
- final RuleColorizer colorizer, final FilterModel filterModel) {
+ public ColorPanel(final RuleColorizer currentLogPanelColorizer, final FilterModel filterModel, final Map allLogPanelColorizers) {
super(new BorderLayout());
- this.colorizer = colorizer;
+ this.currentLogPanelColorizer = currentLogPanelColorizer;
+ this.colorizer = currentLogPanelColorizer;
this.filterModel = filterModel;
-
- colorizer.addPropertyChangeListener(
+ this.allLogPanelColorizers = allLogPanelColorizers;
+
+ currentLogPanelColorizer.addPropertyChangeListener(
"colorrule",
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
@@ -113,14 +119,12 @@
tableModel = new DefaultTableModel();
table = new JTable(tableModel);
- ruleSetListModel = new DefaultListModel();
-
columns = new Vector();
columns.add("Expression");
columns.add("Background");
columns.add("Foreground");
- table.setPreferredScrollableViewportSize(new Dimension(400, 200));
+ table.setPreferredScrollableViewportSize(new Dimension(525, 200));
tableScrollPane = new JScrollPane(table);
Vector data = getColorizerVector();
@@ -134,10 +138,7 @@
configureTable();
- statusBar = new JLabel("Ruleset support not yet implemented");
-
- ruleSetsPanel = buildRuleSetsPanel();
- ruleSetsPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+ statusBar = new JLabel(DEFAULT_STATUS);
rulesPanel = buildRulesPanel();
rulesPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
@@ -164,18 +165,87 @@
rightPanel.add(southPanel, BorderLayout.SOUTH);
rightOuterPanel.add(rightPanel);
- add(ruleSetsPanel, BorderLayout.WEST);
+ 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();
+ RuleColorizer sourceColorizer = (RuleColorizer) allLogPanelColorizers.get(loadPanelColorizersComboBox.getSelectedItem().toString());
+ colorizer.setRules(sourceColorizer.getRules());
+ updateColors();
+ }
+ };
+
+ loadPanelColorizersComboBox.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ String selectedColorizerName = loadPanelColorizersComboBox.getSelectedItem().toString();
+ copyRulesAction.setEnabled(!(currentTabString.equals(selectedColorizerName)));
+ }
+ });
+
+ copyRulesAction.putValue(Action.NAME, "Copy color rules");
+ copyRulesAction.setEnabled(!(currentTabString.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(currentTabString) == -1) {
+ logPanelColorizersModel.addElement(currentTabString);
+ }
+ for (Iterator iter = allLogPanelColorizers.entrySet().iterator();iter.hasNext();) {
+ Map.Entry entry = (Map.Entry)iter.next();
+ if (!entry.getValue().equals(currentLogPanelColorizer)) {
+ if (logPanelColorizersModel.getIndexOf(entry.getKey()) == -1) {
+ logPanelColorizersModel.addElement(entry.getKey());
+ }
+ }
+ }
+ }
+
public static void main(String[] args) {
FilterModel filterModel = new FilterModel();
RuleColorizer colorizer = new RuleColorizer();
- ColorPanel p = new ColorPanel(colorizer, filterModel);
+ Map otherColorizers = new HashMap();
+
+ RuleColorizer panel1Colorizer = new RuleColorizer();
+ HashMap entry1 = new HashMap();
+ List list1 = new ArrayList();
+ list1.add(new ColorRule("logger == test1", ExpressionRule.getRule("logger == test1"), Color.YELLOW, Color.BLACK));
+ entry1.put("Default", list1);
+ panel1Colorizer.setRules(entry1);
+ otherColorizers.put("test1", panel1Colorizer);
+
+ RuleColorizer panel2Colorizer = new RuleColorizer();
+ HashMap entry2 = new HashMap();
+ List list2 = new ArrayList();
+ list2.add(new ColorRule("logger == test2", ExpressionRule.getRule("logger == test2"), Color.YELLOW, Color.BLACK));
+ entry2.put("Default", list2);
+ panel2Colorizer.setRules(entry2);
+ otherColorizers.put("test2", panel2Colorizer);
+
+ ColorPanel p = new ColorPanel(colorizer, filterModel, otherColorizers);
final JFrame f = new JFrame();
p.setCloseActionListener(
@@ -186,7 +256,7 @@
});
// Following does not compile on JDK 1.3.1
-// f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+ f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(p);
f.pack();
f.setVisible(true);
@@ -195,20 +265,19 @@
public void updateColors() {
tableModel.getDataVector().clear();
tableModel.getDataVector().addAll(getColorizerVector());
+ tableModel.fireTableDataChanged();
}
private Vector getColorizerVector() {
Vector data = new Vector();
Map map = colorizer.getRules();
Iterator iter = map.entrySet().iterator();
- ruleSetListModel.removeAllElements();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
//update ruleset list
- ruleSetListModel.addElement(entry.getKey());
if (entry.getKey().equals(currentRuleSet)) {
Iterator iter2 = ((List)entry.getValue()).iterator();
-
+
while (iter2.hasNext()) {
ColorRule rule = (ColorRule)iter2.next();
Vector v = new Vector();
@@ -340,7 +409,7 @@
if (result.toString().equals("")) {
((ExpressionTableCellRenderer) table.getColumnModel().getColumn(0).getCellRenderer())
.setToolTipText("Double click to edit");
- statusBar.setText("");
+ statusBar.setText(DEFAULT_STATUS);
//only update rules if there were no errors
Map map = new HashMap();
@@ -472,53 +541,11 @@
return panel;
}
- JPanel buildRuleSetsPanel() {
- JPanel panel = new JPanel(new BorderLayout());
-
- JLabel ruleSetLabel = new JLabel("RuleSets:");
- panel.add(ruleSetLabel, BorderLayout.NORTH);
-
- final JList list = new JList(ruleSetListModel);
- JScrollPane scrollPane = new JScrollPane(list);
- list.setEnabled(false);
-
- panel.add(scrollPane, BorderLayout.CENTER);
-
- JPanel buttonPanel = new JPanel(new GridLayout(0, 2));
-
- JPanel newPanel = new JPanel();
- JButton newButton = new JButton("New");
- newButton.setEnabled(false);
- newPanel.add(newButton);
-
- JPanel deletePanel = new JPanel();
- JButton deleteButton = new JButton("Delete");
- deleteButton.setEnabled(false);
- deletePanel.add(deleteButton);
-
- buttonPanel.add(newPanel);
- buttonPanel.add(deletePanel);
-
- panel.add(buttonPanel, BorderLayout.SOUTH);
-
- return panel;
- }
-
JPanel buildRulesPanel() {
JPanel listPanel = new JPanel(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
- JLabel ruleSetLabel = new JLabel("RuleSet Name:");
- panel.add(ruleSetLabel);
-
- JTextField ruleSetTextField = new JTextField(20);
- ruleSetTextField.setText(currentRuleSet);
- ruleSetTextField.setAlignmentX(Component.LEFT_ALIGNMENT);
- ruleSetTextField.setEnabled(false);
-
- panel.add(ruleSetTextField);
-
panel.add(Box.createVerticalStrut(10));
JLabel rulesLabel = new JLabel("Rules:");
@@ -607,7 +634,7 @@
return listPanel;
}
- class ColorListCellRenderer extends JLabel implements ListCellRenderer {
+ class ColorListCellRenderer extends JLabel implements ListCellRenderer {
ColorListCellRenderer() {
setOpaque(true);
}
Modified: logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html?rev=777023&r1=777022&r2=777023&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html (original)
+++ logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/WelcomePanel.html Thu May 21 08:58:44 2009
@@ -76,10 +76,13 @@
<td width="50" align="center">-</td>
<td colspan="1">Find previous</td>
</tr>
-<tr valign="top">
+<tr valign="top" bgcolor="#EEEEEE">
<td nowrap class="HotKey">ALT-X</td>
<td width="50" align="center">-</td>
- <td colspan="4">Exits the Application</td>
+ <td colspan="1">Exits the Application</td>
+ <td nowrap class="HotKey">CTRL-G</td>
+ <td width="50" align="center">-</td>
+ <td colspan="1">Go to line</td>
</tr>
</table></P>
<!--<p><a href="#TheTop">Back to top</a></p>-->