View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.log4j.chainsaw;
    18
    19  import java.awt.GridBagConstraints;
    20  import java.awt.GridBagLayout;
    21  import java.awt.event.ActionEvent;
    22  import java.awt.event.ActionListener;
    23  import javax.swing.BorderFactory;
    24  import javax.swing.JButton;
    25  import javax.swing.JComboBox;
    26  import javax.swing.JLabel;
    27  import javax.swing.JPanel;
    28  import javax.swing.JTextField;
    29  import javax.swing.event.DocumentEvent;
    30  import javax.swing.event.DocumentListener;
    31  import org.apache.log4j.Logger;
    32  import org.apache.log4j.Priority;
    33  import org.apache.log4j.Level;
    34
    35  /***
    36   * Represents the controls for filtering, pausing, exiting, etc.
    37   *
    38   * @author <a href="mailto:oliver@puppycrawl.com">Oliver Burn</a>
    39   */
    40  class ControlPanel extends JPanel {
    41      /*** use the log messages **/
    42      private static final Logger LOG =
    43                                    Logger.getLogger(ControlPanel.class);
    44
    45      /***
    46       * Creates a new <code>ControlPanel</code> instance.
    47       *
    48       * @param aModel the model to control
    49       */
    50      ControlPanel(final MyTableModel aModel) {
    51          setBorder(BorderFactory.createTitledBorder("Controls: "));
    52          final GridBagLayout gridbag = new GridBagLayout();
    53          final GridBagConstraints c = new GridBagConstraints();
    54          setLayout(gridbag);
    55
    56          // Pad everything
    57          c.ipadx = 5;
    58          c.ipady = 5;
    59
    60          // Add the 1st column of labels
    61          c.gridx = 0;
    62          c.anchor = GridBagConstraints.EAST;
    63
    64          c.gridy = 0;
    65          JLabel label = new JLabel("Filter Level:");
    66          gridbag.setConstraints(label, c);
    67          add(label);
    68
    69          c.gridy++;
    70          label = new JLabel("Filter Thread:");
    71          gridbag.setConstraints(label, c);
    72          add(label);
    73
    74          c.gridy++;
    75          label = new JLabel("Filter Logger:");
    76          gridbag.setConstraints(label, c);
    77          add(label);
    78
    79          c.gridy++;
    80          label = new JLabel("Filter NDC:");
    81          gridbag.setConstraints(label, c);
    82          add(label);
    83
    84          c.gridy++;
    85          label = new JLabel("Filter Message:");
    86          gridbag.setConstraints(label, c);
    87          add(label);
    88
    89          // Add the 2nd column of filters
    90          c.weightx = 1;
    91          //c.weighty = 1;
    92          c.gridx = 1;
    93          c.anchor = GridBagConstraints.WEST;
    94
    95          c.gridy = 0;
    96          final Level[] allPriorities = new Level[] {Level.FATAL,
    97                 Level.ERROR,
    98                 Level.WARN,
    99  			   Level.INFO,
    100 			   Level.DEBUG,
    101 			   Level.TRACE };
    102
    103         final JComboBox priorities = new JComboBox(allPriorities);
    104         final Level lowest = allPriorities[allPriorities.length - 1];
    105         priorities.setSelectedItem(lowest);
    106         aModel.setPriorityFilter(lowest);
    107         gridbag.setConstraints(priorities, c);
    108         add(priorities);
    109         priorities.setEditable(false);
    110         priorities.addActionListener(new ActionListener() {
    111                 public void actionPerformed(ActionEvent aEvent) {
    112                     aModel.setPriorityFilter(
    113                         (Priority) priorities.getSelectedItem());
    114                 }
    115             });
    116
    117
    118         c.fill = GridBagConstraints.HORIZONTAL;
    119         c.gridy++;
    120         final JTextField threadField = new JTextField("");
    121         threadField.getDocument().addDocumentListener(new DocumentListener () {
    122                 public void insertUpdate(DocumentEvent aEvent) {
    123                     aModel.setThreadFilter(threadField.getText());
    124                 }
    125                 public void removeUpdate(DocumentEvent aEvente) {
    126                     aModel.setThreadFilter(threadField.getText());
    127                 }
    128                 public void changedUpdate(DocumentEvent aEvent) {
    129                     aModel.setThreadFilter(threadField.getText());
    130                 }
    131             });
    132         gridbag.setConstraints(threadField, c);
    133         add(threadField);
    134
    135         c.gridy++;
    136         final JTextField catField = new JTextField("");
    137         catField.getDocument().addDocumentListener(new DocumentListener () {
    138                 public void insertUpdate(DocumentEvent aEvent) {
    139                     aModel.setCategoryFilter(catField.getText());
    140                 }
    141                 public void removeUpdate(DocumentEvent aEvent) {
    142                     aModel.setCategoryFilter(catField.getText());
    143                 }
    144                 public void changedUpdate(DocumentEvent aEvent) {
    145                     aModel.setCategoryFilter(catField.getText());
    146                 }
    147             });
    148         gridbag.setConstraints(catField, c);
    149         add(catField);
    150
    151         c.gridy++;
    152         final JTextField ndcField = new JTextField("");
    153         ndcField.getDocument().addDocumentListener(new DocumentListener () {
    154                 public void insertUpdate(DocumentEvent aEvent) {
    155                     aModel.setNDCFilter(ndcField.getText());
    156                 }
    157                 public void removeUpdate(DocumentEvent aEvent) {
    158                     aModel.setNDCFilter(ndcField.getText());
    159                 }
    160                 public void changedUpdate(DocumentEvent aEvent) {
    161                     aModel.setNDCFilter(ndcField.getText());
    162                 }
    163             });
    164         gridbag.setConstraints(ndcField, c);
    165         add(ndcField);
    166
    167         c.gridy++;
    168         final JTextField msgField = new JTextField("");
    169         msgField.getDocument().addDocumentListener(new DocumentListener () {
    170                 public void insertUpdate(DocumentEvent aEvent) {
    171                     aModel.setMessageFilter(msgField.getText());
    172                 }
    173                 public void removeUpdate(DocumentEvent aEvent) {
    174                     aModel.setMessageFilter(msgField.getText());
    175                 }
    176                 public void changedUpdate(DocumentEvent aEvent) {
    177                     aModel.setMessageFilter(msgField.getText());
    178                 }
    179             });
    180
    181
    182         gridbag.setConstraints(msgField, c);
    183         add(msgField);
    184
    185         // Add the 3rd column of buttons
    186         c.weightx = 0;
    187         c.fill = GridBagConstraints.HORIZONTAL;
    188         c.anchor = GridBagConstraints.EAST;
    189         c.gridx = 2;
    190
    191         c.gridy = 0;
    192         final JButton exitButton = new JButton("Exit");
    193         exitButton.setMnemonic('x');
    194         exitButton.addActionListener(ExitAction.INSTANCE);
    195         gridbag.setConstraints(exitButton, c);
    196         add(exitButton);
    197
    198         c.gridy++;
    199         final JButton clearButton = new JButton("Clear");
    200         clearButton.setMnemonic('c');
    201         clearButton.addActionListener(new ActionListener() {
    202                 public void actionPerformed(ActionEvent aEvent) {
    203                     aModel.clear();
    204                 }
    205             });
    206         gridbag.setConstraints(clearButton, c);
    207         add(clearButton);
    208
    209         c.gridy++;
    210         final JButton toggleButton = new JButton("Pause");
    211         toggleButton.setMnemonic('p');
    212         toggleButton.addActionListener(new ActionListener() {
    213                 public void actionPerformed(ActionEvent aEvent) {
    214                     aModel.toggle();
    215                     toggleButton.setText(
    216                         aModel.isPaused() ? "Resume" : "Pause");
    217                 }
    218             });
    219         gridbag.setConstraints(toggleButton, c);
    220         add(toggleButton);
    221     }
    222 }