001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.log4j.chainsaw; 018 019import java.awt.GridBagConstraints; 020import java.awt.GridBagLayout; 021import java.awt.event.ActionEvent; 022import java.awt.event.ActionListener; 023import javax.swing.BorderFactory; 024import javax.swing.JButton; 025import javax.swing.JComboBox; 026import javax.swing.JLabel; 027import javax.swing.JPanel; 028import javax.swing.JTextField; 029import javax.swing.event.DocumentEvent; 030import javax.swing.event.DocumentListener; 031import org.apache.log4j.Logger; 032import org.apache.log4j.Priority; 033import org.apache.log4j.Level; 034 035/** 036 * Represents the controls for filtering, pausing, exiting, etc. 037 * 038 * @author <a href="mailto:oliver@puppycrawl.com">Oliver Burn</a> 039 */ 040class ControlPanel extends JPanel { 041 /** use the log messages **/ 042 private static final Logger LOG = 043 Logger.getLogger(ControlPanel.class); 044 045 /** 046 * Creates a new <code>ControlPanel</code> instance. 047 * 048 * @param aModel the model to control 049 */ 050 ControlPanel(final MyTableModel aModel) { 051 setBorder(BorderFactory.createTitledBorder("Controls: ")); 052 final GridBagLayout gridbag = new GridBagLayout(); 053 final GridBagConstraints c = new GridBagConstraints(); 054 setLayout(gridbag); 055 056 // Pad everything 057 c.ipadx = 5; 058 c.ipady = 5; 059 060 // Add the 1st column of labels 061 c.gridx = 0; 062 c.anchor = GridBagConstraints.EAST; 063 064 c.gridy = 0; 065 JLabel label = new JLabel("Filter Level:"); 066 gridbag.setConstraints(label, c); 067 add(label); 068 069 c.gridy++; 070 label = new JLabel("Filter Thread:"); 071 gridbag.setConstraints(label, c); 072 add(label); 073 074 c.gridy++; 075 label = new JLabel("Filter Logger:"); 076 gridbag.setConstraints(label, c); 077 add(label); 078 079 c.gridy++; 080 label = new JLabel("Filter NDC:"); 081 gridbag.setConstraints(label, c); 082 add(label); 083 084 c.gridy++; 085 label = new JLabel("Filter Message:"); 086 gridbag.setConstraints(label, c); 087 add(label); 088 089 // Add the 2nd column of filters 090 c.weightx = 1; 091 //c.weighty = 1; 092 c.gridx = 1; 093 c.anchor = GridBagConstraints.WEST; 094 095 c.gridy = 0; 096 final Level[] allPriorities = new Level[] {Level.FATAL, 097 Level.ERROR, 098 Level.WARN, 099 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}