223 lines
7.8 KiB
Java
223 lines
7.8 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* 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.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.apache.log4j.chainsaw;
|
|
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import javax.swing.BorderFactory;
|
|
import javax.swing.JButton;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
import org.apache.log4j.Logger;
|
|
import org.apache.log4j.Priority;
|
|
import org.apache.log4j.Level;
|
|
|
|
/**
|
|
* Represents the controls for filtering, pausing, exiting, etc.
|
|
*
|
|
* @author <a href="mailto:oliver@puppycrawl.com">Oliver Burn</a>
|
|
*/
|
|
class ControlPanel extends JPanel {
|
|
/** use the log messages **/
|
|
private static final Logger LOG =
|
|
Logger.getLogger(ControlPanel.class);
|
|
|
|
/**
|
|
* Creates a new <code>ControlPanel</code> instance.
|
|
*
|
|
* @param aModel the model to control
|
|
*/
|
|
ControlPanel(final MyTableModel aModel) {
|
|
setBorder(BorderFactory.createTitledBorder("Controls: "));
|
|
final GridBagLayout gridbag = new GridBagLayout();
|
|
final GridBagConstraints c = new GridBagConstraints();
|
|
setLayout(gridbag);
|
|
|
|
// Pad everything
|
|
c.ipadx = 5;
|
|
c.ipady = 5;
|
|
|
|
// Add the 1st column of labels
|
|
c.gridx = 0;
|
|
c.anchor = GridBagConstraints.EAST;
|
|
|
|
c.gridy = 0;
|
|
JLabel label = new JLabel("Filter Level:");
|
|
gridbag.setConstraints(label, c);
|
|
add(label);
|
|
|
|
c.gridy++;
|
|
label = new JLabel("Filter Thread:");
|
|
gridbag.setConstraints(label, c);
|
|
add(label);
|
|
|
|
c.gridy++;
|
|
label = new JLabel("Filter Logger:");
|
|
gridbag.setConstraints(label, c);
|
|
add(label);
|
|
|
|
c.gridy++;
|
|
label = new JLabel("Filter NDC:");
|
|
gridbag.setConstraints(label, c);
|
|
add(label);
|
|
|
|
c.gridy++;
|
|
label = new JLabel("Filter Message:");
|
|
gridbag.setConstraints(label, c);
|
|
add(label);
|
|
|
|
// Add the 2nd column of filters
|
|
c.weightx = 1;
|
|
//c.weighty = 1;
|
|
c.gridx = 1;
|
|
c.anchor = GridBagConstraints.WEST;
|
|
|
|
c.gridy = 0;
|
|
final Level[] allPriorities = new Level[] {Level.FATAL,
|
|
Level.ERROR,
|
|
Level.WARN,
|
|
Level.INFO,
|
|
Level.DEBUG,
|
|
Level.TRACE };
|
|
|
|
final JComboBox priorities = new JComboBox(allPriorities);
|
|
final Level lowest = allPriorities[allPriorities.length - 1];
|
|
priorities.setSelectedItem(lowest);
|
|
aModel.setPriorityFilter(lowest);
|
|
gridbag.setConstraints(priorities, c);
|
|
add(priorities);
|
|
priorities.setEditable(false);
|
|
priorities.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent aEvent) {
|
|
aModel.setPriorityFilter(
|
|
(Priority) priorities.getSelectedItem());
|
|
}
|
|
});
|
|
|
|
|
|
c.fill = GridBagConstraints.HORIZONTAL;
|
|
c.gridy++;
|
|
final JTextField threadField = new JTextField("");
|
|
threadField.getDocument().addDocumentListener(new DocumentListener () {
|
|
public void insertUpdate(DocumentEvent aEvent) {
|
|
aModel.setThreadFilter(threadField.getText());
|
|
}
|
|
public void removeUpdate(DocumentEvent aEvente) {
|
|
aModel.setThreadFilter(threadField.getText());
|
|
}
|
|
public void changedUpdate(DocumentEvent aEvent) {
|
|
aModel.setThreadFilter(threadField.getText());
|
|
}
|
|
});
|
|
gridbag.setConstraints(threadField, c);
|
|
add(threadField);
|
|
|
|
c.gridy++;
|
|
final JTextField catField = new JTextField("");
|
|
catField.getDocument().addDocumentListener(new DocumentListener () {
|
|
public void insertUpdate(DocumentEvent aEvent) {
|
|
aModel.setCategoryFilter(catField.getText());
|
|
}
|
|
public void removeUpdate(DocumentEvent aEvent) {
|
|
aModel.setCategoryFilter(catField.getText());
|
|
}
|
|
public void changedUpdate(DocumentEvent aEvent) {
|
|
aModel.setCategoryFilter(catField.getText());
|
|
}
|
|
});
|
|
gridbag.setConstraints(catField, c);
|
|
add(catField);
|
|
|
|
c.gridy++;
|
|
final JTextField ndcField = new JTextField("");
|
|
ndcField.getDocument().addDocumentListener(new DocumentListener () {
|
|
public void insertUpdate(DocumentEvent aEvent) {
|
|
aModel.setNDCFilter(ndcField.getText());
|
|
}
|
|
public void removeUpdate(DocumentEvent aEvent) {
|
|
aModel.setNDCFilter(ndcField.getText());
|
|
}
|
|
public void changedUpdate(DocumentEvent aEvent) {
|
|
aModel.setNDCFilter(ndcField.getText());
|
|
}
|
|
});
|
|
gridbag.setConstraints(ndcField, c);
|
|
add(ndcField);
|
|
|
|
c.gridy++;
|
|
final JTextField msgField = new JTextField("");
|
|
msgField.getDocument().addDocumentListener(new DocumentListener () {
|
|
public void insertUpdate(DocumentEvent aEvent) {
|
|
aModel.setMessageFilter(msgField.getText());
|
|
}
|
|
public void removeUpdate(DocumentEvent aEvent) {
|
|
aModel.setMessageFilter(msgField.getText());
|
|
}
|
|
public void changedUpdate(DocumentEvent aEvent) {
|
|
aModel.setMessageFilter(msgField.getText());
|
|
}
|
|
});
|
|
|
|
|
|
gridbag.setConstraints(msgField, c);
|
|
add(msgField);
|
|
|
|
// Add the 3rd column of buttons
|
|
c.weightx = 0;
|
|
c.fill = GridBagConstraints.HORIZONTAL;
|
|
c.anchor = GridBagConstraints.EAST;
|
|
c.gridx = 2;
|
|
|
|
c.gridy = 0;
|
|
final JButton exitButton = new JButton("Exit");
|
|
exitButton.setMnemonic('x');
|
|
exitButton.addActionListener(ExitAction.INSTANCE);
|
|
gridbag.setConstraints(exitButton, c);
|
|
add(exitButton);
|
|
|
|
c.gridy++;
|
|
final JButton clearButton = new JButton("Clear");
|
|
clearButton.setMnemonic('c');
|
|
clearButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent aEvent) {
|
|
aModel.clear();
|
|
}
|
|
});
|
|
gridbag.setConstraints(clearButton, c);
|
|
add(clearButton);
|
|
|
|
c.gridy++;
|
|
final JButton toggleButton = new JButton("Pause");
|
|
toggleButton.setMnemonic('p');
|
|
toggleButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent aEvent) {
|
|
aModel.toggle();
|
|
toggleButton.setText(
|
|
aModel.isPaused() ? "Resume" : "Pause");
|
|
}
|
|
});
|
|
gridbag.setConstraints(toggleButton, c);
|
|
add(toggleButton);
|
|
}
|
|
}
|