[prev in list] [next in list] [prev in thread] [next in thread]
List: log4j-dev
Subject: cvs commit: jakarta-log4j/src/java/org/apache/log4j/chainsaw LogPanelPreferencePanel.java LogPanel.j
From: sdeboy () apache ! org
Date: 2003-10-29 8:50:37
[Download RAW message or body]
sdeboy 2003/10/29 00:50:37
Modified: src/java/org/apache/log4j/chainsaw/filter FilterModel.java
EventTypeEntryContainer.java
src/java/org/apache/log4j/chainsaw/rule RuleFactory.java
RuleTest.java
src/java/org/apache/log4j/chainsaw
LogPanelPreferencePanel.java LogPanel.java
TableColorizingRenderer.java
LogPanelPreferenceModel.java
LoggingEventFieldResolver.java
ChainsawConstants.java
Log:
* added logger precision support to chainsaw as a panel preference - similar to \
patternlayout's c{x}
* beginning work on expression builder event context popup
* example: define expression "logger == ", hit ctrl-space, and a popup is displayed \
containing all of the the loggers which exist in the tab's set of events (which can \
then be inserted into the expression)
* increased visibility of accessor methods to enable context popup
* added 'modelexists' method on eventtypentrycontainer to determine which logging \
event fields can provide a context popup
Revision Changes Path
1.3 +1 -1 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/filter/FilterModel.java
Index: FilterModel.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/filter/FilterModel.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FilterModel.java 11 Sep 2003 12:32:52 -0000 1.2
+++ FilterModel.java 29 Oct 2003 08:50:36 -0000 1.3
@@ -85,7 +85,7 @@
}
}
- EventTypeEntryContainer getContainer() {
+ public EventTypeEntryContainer getContainer() {
// if(eventTypeMap.size()>0){
// return (EventTypeEntryContainer) \
eventTypeMap.values().iterator().next(); // }
1.2 +41 -1 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java \
Index: EventTypeEntryContainer.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EventTypeEntryContainer.java 11 Sep 2003 12:32:52 -0000 1.1
+++ EventTypeEntryContainer.java 29 Oct 2003 08:50:36 -0000 1.2
@@ -51,8 +51,10 @@
*/
package org.apache.log4j.chainsaw.filter;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import javax.swing.DefaultListModel;
@@ -65,7 +67,7 @@
* @author Paul Smith
*
*/
-class EventTypeEntryContainer {
+public class EventTypeEntryContainer {
private Set ColumnNames = new HashSet();
private Set Methods = new HashSet();
private Set Classes = new HashSet();
@@ -84,7 +86,45 @@
private DefaultListModel loggerListModel = new DefaultListModel();
private DefaultListModel threadListModel = new DefaultListModel();
private DefaultListModel fileNameListModel = new DefaultListModel();
+ private Map modelMap = new HashMap();
+ private static final String LOGGER_FIELD = "LOGGER";
+ private static final String LEVEL_FIELD = "LEVEL";
+ private static final String CLASS_FIELD = "CLASS";
+ private static final String FILE_FIELD = "FILE";
+ private static final String THREAD_FIELD = "THREAD";
+ private static final String METHOD_FIELD = "METHOD";
+ private static final String MDC_FIELD = "MDC.";
+ private static final String NDC_FIELD = "NDC";
+ public EventTypeEntryContainer() {
+ modelMap.put(LOGGER_FIELD, loggerListModel);
+ modelMap.put(LEVEL_FIELD, levelListModel);
+ modelMap.put(CLASS_FIELD, classesListModel);
+ modelMap.put(FILE_FIELD, fileNameListModel);
+ modelMap.put(THREAD_FIELD, threadListModel);
+ modelMap.put(METHOD_FIELD, methodListModel);
+ modelMap.put(NDC_FIELD, ndcListModel);
+ //mdc supported, but not in map
+ }
+
+ public boolean modelExists(String fieldName) {
+ if (fieldName != null) {
+ return ((fieldName.toUpperCase().startsWith(MDC_FIELD)) || \
(modelMap.keySet().contains(fieldName.toUpperCase()))); + }
+ return false;
+ }
+
+ public ListModel getModel(String fieldName) {
+ if (modelExists(fieldName)) {
+ if (fieldName.toUpperCase().startsWith(MDC_FIELD)) {
+ return mdcListModel;
+ } else {
+ return (ListModel)modelMap.get(fieldName.toUpperCase());
+ }
+ }
+ return null;
+ }
+
void addLevel(Object level) {
if (Levels.add(level)) {
levelListModel.addElement(level);
1.4 +1 -1 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleFactory.java
Index: RuleFactory.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleFactory.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RuleFactory.java 24 Oct 2003 08:04:03 -0000 1.3
+++ RuleFactory.java 29 Oct 2003 08:50:36 -0000 1.4
@@ -87,7 +87,7 @@
}
static boolean isRule(String symbol) {
- return rules.contains(symbol.toLowerCase());
+ return ((symbol != null) && (rules.contains(symbol.toLowerCase())));
}
static Rule getRule(String symbol, Stack stack) {
1.11 +121 -14 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleTest.java
Index: RuleTest.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleTest.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- RuleTest.java 25 Oct 2003 07:52:55 -0000 1.10
+++ RuleTest.java 29 Oct 2003 08:50:37 -0000 1.11
@@ -49,16 +49,14 @@
package org.apache.log4j.chainsaw.rule;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.MDC;
-import org.apache.log4j.chainsaw.LoggingEventFieldResolver;
-import org.apache.log4j.spi.LoggingEvent;
-
import java.awt.BorderLayout;
import java.awt.GridLayout;
+import java.awt.Point;
import java.awt.event.ActionEvent;
-
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -67,10 +65,23 @@
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
+import javax.swing.JList;
import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.MDC;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.LoggingEventFieldResolver;
+import org.apache.log4j.chainsaw.filter.FilterModel;
+import org.apache.log4j.spi.LoggingEvent;
public class RuleTest extends JFrame {
@@ -87,14 +98,16 @@
*
*/
Rule rule;
+ FilterModel filterModel;
- public RuleTest(String booleanPostFixExpression, String inFixExpression) {
+ public RuleTest(String inFixText) {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
- final LoggingEventFieldResolver resolver =
+ LoggingEventFieldResolver resolver =
LoggingEventFieldResolver.getInstance();
-
+
+ filterModel = new FilterModel();
final List eventList = new ArrayList();
MDC.put("entry1", "123");
eventList.add(
@@ -120,14 +133,22 @@
"org.apache.log4j.chainsaw", Logger.getLogger("logger4"),
System.currentTimeMillis(), Level.WARN, "message4",
new Exception("test4")));
+ Iterator iter = eventList.iterator();
+ while (iter.hasNext()) {
+ LoggingEvent event = (LoggingEvent)iter.next();
+ filterModel.processNewLoggingEvent(ChainsawConstants.LOG4J_EVENT_TYPE, \
event); + }
JPanel fieldPanel = new JPanel(new GridLayout(5, 1));
fieldPanel.add(
new JLabel("Enter infix expression to convert to postfix: "));
- final JTextField inFixTextField = new JTextField(inFixExpression);
+ final JTextField inFixTextField = new JTextField(inFixText);
fieldPanel.add(inFixTextField);
+ ContextListener listener = new ContextListener(inFixTextField);
+ inFixTextField.addKeyListener(listener);
+ inFixTextField.addCaretListener(listener);
JButton inFixButton = new JButton("Convert InFix to PostFix");
fieldPanel.add(inFixButton);
@@ -196,10 +217,96 @@
public static void main(String[] args) {
RuleTest test =
- new RuleTest(
- "level deb ~= BLAH test == || logger logger[1-3] like MDC.entry1 234 >= \
|| && ",
- "( ( level ~= deb ) || ( BLAH == test ) ) && ( logger like logger[1-3] || \
MDC.entry1 >= 234 )"); + new RuleTest("( level ~= deb ) && ( logger like \
logger[1-2] || MDC.entry1 >= 234 )"); test.pack();
test.setVisible(true);
+ }
+
+ class ContextListener extends KeyAdapter implements CaretListener {
+ LoggingEventFieldResolver resolver = \
LoggingEventFieldResolver.getInstance(); + String lastSymbol = null;
+ String lastField = null;
+ JPopupMenu contextMenu = new JPopupMenu();
+ JList list = new JList();
+ final JTextField textField;
+
+ public ContextListener(final JTextField textField) {
+ this.textField = textField;
+ list.setVisibleRowCount(5);
+ list.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ System.out.println("key pressed");
+ if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+ System.out.println("enter pressed");
+ updateField(list.getSelectedValue().toString());
+ contextMenu.setVisible(false);
+ }
+ }});
+
+ list.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 2) {
+ System.out.println("double clicked");
+ updateField(list.getSelectedValue().toString());
+ contextMenu.setVisible(false);
+ }
+ }});
+
+
+ JScrollPane scrollPane = new JScrollPane(list);
+ contextMenu.insert(scrollPane, 0);
+ }
+
+ private void updateField(String value) {
+ String text = textField.getText();
+ int position = textField.getCaretPosition();
+ textField.setText(text.substring(0, position) + value + \
text.substring(position)); + textField.setCaretPosition(position + \
value.length()); + }
+
+ public void keyTyped(KeyEvent e) {
+ if ((e.getKeyCode() == KeyEvent.VK_SPACE) && (e.getModifiers() == \
KeyEvent.CTRL_MASK)); + System.out.println("PRESSED CTRL-SPACE");
+ if (resolver.isField(lastField) && RuleFactory.isRule(lastSymbol)) {
+ System.out.println("showing popupmenu");
+ if (filterModel.getContainer().modelExists(lastField)) {
+ list.setModel(filterModel.getContainer().getModel(lastField));
+ list.setSelectedIndex(0);
+ Point p = \
((JTextField)e.getComponent()).getCaret().getMagicCaretPosition(); + \
contextMenu.show(e.getComponent(), p.x, (p.y + (e.getComponent().getHeight() - 5))); \
+ contextMenu.requestFocusInWindow(); + }
+ }
+ }
+
+ public void caretUpdate(CaretEvent e) {
+ //( level ~= deb )
+ String text = textField.getText();
+ int endPosition = e.getDot() - 2;
+ if (endPosition > -1 && text.charAt(endPosition) == ' ') {
+ endPosition--;
+ }
+ System.out.println("position is " + endPosition);
+ int startPosition = text.lastIndexOf(" ", endPosition) + 1;
+ System.out.println("startposition is " + startPosition);
+
+ if (startPosition > -1 && endPosition > -1) {
+ lastSymbol = text.substring(startPosition, endPosition + 1);
+ if (!RuleFactory.isRule(lastSymbol)) {
+ lastSymbol = null;
+ }
+ System.out.println("last SYMBOL IS " + lastSymbol);
+
+ int fieldStartPosition = text.lastIndexOf(" ", startPosition - 2);
+ System.out.println("fieldstart is " + fieldStartPosition);
+ if (fieldStartPosition > -1 ) {
+ lastField = text.substring(fieldStartPosition + 1, startPosition - \
1); + if (!resolver.isField(lastField)) {
+ lastField = null;
+ }
+ System.out.println("last field is " + lastField);
+ }
+ }
+ }
}
}
1.6 +24 -4 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java
Index: LogPanelPreferencePanel.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LogPanelPreferencePanel.java 3 Oct 2003 03:56:51 -0000 1.5
+++ LogPanelPreferencePanel.java 29 Oct 2003 08:50:37 -0000 1.6
@@ -75,6 +75,7 @@
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
+import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
@@ -112,10 +113,11 @@
private final JLabel titleLabel = new JLabel("Selected Pref Panel");
private final JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
private final JPanel selectedPrefPanel = new JPanel(new BorderLayout(0, 3));
- private final LogPanelPreferenceModel uncommitedPreferenceModel =
+ private final LogPanelPreferenceModel uncommittedPreferenceModel =
new LogPanelPreferenceModel();
private ActionListener okCancelListener;
private Component currentlyDisplayedPanel = null;
+ private JTextField loggerPrecision = new JTextField();
public LogPanelPreferencePanel(LogPanelPreferenceModel model) {
this.committedPreferenceModel = model;
@@ -158,7 +160,8 @@
okButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
- committedPreferenceModel.apply(uncommitedPreferenceModel);
+ uncommittedPreferenceModel.setLoggerPrecision(loggerPrecision.getText());
+ committedPreferenceModel.apply(uncommittedPreferenceModel);
hidePanel();
}
});
@@ -236,7 +239,7 @@
*
*/
public void updateModel() {
- this.uncommitedPreferenceModel.apply(committedPreferenceModel);
+ this.uncommittedPreferenceModel.apply(committedPreferenceModel);
}
private TreeModel createTreeModel() {
@@ -260,7 +263,7 @@
* @return
*/
private LogPanelPreferenceModel getModel() {
- return uncommitedPreferenceModel;
+ return uncommittedPreferenceModel;
}
public static void main(String[] args) {
@@ -393,6 +396,23 @@
levelFormatPanel.add(rdLevelText);
add(levelFormatPanel);
+
+ JPanel loggerFormatPanel = new JPanel();
+ loggerFormatPanel.setLayout(
+ new BoxLayout(loggerFormatPanel, BoxLayout.Y_AXIS));
+ loggerFormatPanel.setBorder(
+ BorderFactory.createTitledBorder(
+ BorderFactory.createEtchedBorder(), "Logger"));
+
+ final JLabel precisionLabel = new JLabel("Precision (package depth \
displayed)"); + final JLabel precisionLabel2 = new JLabel("leave blank to \
display full logger)"); +
+ loggerFormatPanel.add(precisionLabel);
+ loggerFormatPanel.add(precisionLabel2);
+ loggerFormatPanel.add(loggerPrecision);
+
+ add(loggerFormatPanel);
+
add(Box.createVerticalGlue());
}
1.22 +14 -0 jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java
Index: LogPanel.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanel.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- LogPanel.java 9 Oct 2003 22:08:02 -0000 1.21
+++ LogPanel.java 29 Oct 2003 08:50:37 -0000 1.22
@@ -464,6 +464,20 @@
}
};
+ PropertyChangeListener loggerPrecisionChangeListener =
+ new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ LogPanelPreferenceModel model =
+ (LogPanelPreferenceModel) evt.getSource();
+
+ renderer.setLoggerPrecision(model.getLoggerPrecision());
+
+ table.tableChanged(new TableModelEvent(getModel()));
+ }
+ };
+ preferenceModel.addPropertyChangeListener(
+ "loggerPrecision", loggerPrecisionChangeListener);
+
preferenceModel.addPropertyChangeListener(
"dateFormatPattern", datePrefsChangeListener);
preferenceModel.addPropertyChangeListener(
1.8 +34 -0 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
Index: TableColorizingRenderer.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- TableColorizingRenderer.java 2 Oct 2003 08:29:24 -0000 1.7
+++ TableColorizingRenderer.java 29 Oct 2003 08:50:37 -0000 1.8
@@ -101,6 +101,7 @@
// private String levelDisplay = ChainsawConstants.LEVEL_DISPLAY_ICONS;
private boolean levelUseIcons = true;
private DateFormat dateFormatInUse = DATE_FORMATTER;
+ private String loggerPrecision = "";
/**
* Creates a new TableColorizingRenderer object.
@@ -157,6 +158,31 @@
break;
+ case ChainsawColumns.INDEX_LOGGER_COL_NAME:
+ if (loggerPrecision.equals("")) {
+ break;
+ } else {
+ String logger = value.toString();
+ int precision = 0;
+ try {
+ precision = Integer.parseInt(loggerPrecision);
+ } catch (NumberFormatException nfe){}
+ if (precision < 1) {
+ break;
+ }
+ int startPos = logger.length();
+ for (int i=0;i<precision;i++) {
+ startPos = logger.lastIndexOf(".", startPos - 1);
+ }
+ if (startPos < 0) {
+ break;
+ } else {
+ ((JLabel)c).setText(logger.substring(startPos + 1));
+ }
+ }
+
+ break;
+
case ChainsawColumns.INDEX_LEVEL_COL_NAME:
Icon icon = (Icon) iconMap.get(value.toString());
@@ -235,6 +261,14 @@
*/
void setDateFormatter(DateFormat formatter) {
this.dateFormatInUse = formatter;
+ }
+
+ /**
+ * Changes the Logger precision.
+ * @param precision
+ */
+ void setLoggerPrecision(String loggerPrecision) {
+ this.loggerPrecision = loggerPrecision;
}
/**
1.6 +20 -0 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
Index: LogPanelPreferenceModel.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LogPanelPreferenceModel.java 9 Oct 2003 04:05:51 -0000 1.5
+++ LogPanelPreferenceModel.java 29 Oct 2003 08:50:37 -0000 1.6
@@ -100,6 +100,7 @@
private boolean toolTips = false;
private boolean scrollToBottom = true;
private boolean logTreePanelVisible = true;
+ private String loggerPrecision = "";
/**
* Returns the Date Pattern string for the alternate date formatter.
@@ -160,6 +161,7 @@
* all the properties from
*/
public void apply(LogPanelPreferenceModel that) {
+ setLoggerPrecision(that.getLoggerPrecision());
setDateFormatPattern(that.getDateFormatPattern());
setLevelIcons(that.isLevelIcons());
@@ -215,6 +217,24 @@
boolean oldVal = this.levelIcons;
this.levelIcons = levelIcons;
propertySupport.firePropertyChange("levelIcons", oldVal, this.levelIcons);
+ }
+
+ /**
+ * @param loggerPrecision - an integer representing the number of packages to \
display, + * or an empty string representing 'display all packages'
+ */
+ public void setLoggerPrecision(String loggerPrecision) {
+ String oldVal = this.loggerPrecision;
+ this.loggerPrecision = loggerPrecision;
+ propertySupport.firePropertyChange("loggerPrecision", oldVal, \
this.loggerPrecision); + }
+
+ /**
+ * Returns the Logger precision.
+ * @return
+ */
+ public final String getLoggerPrecision() {
+ return loggerPrecision;
}
/**
1.9 +1 -1 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggingEventFieldResolver.java
Index: LoggingEventFieldResolver.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggingEventFieldResolver.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- LoggingEventFieldResolver.java 27 Oct 2003 08:35:31 -0000 1.8
+++ LoggingEventFieldResolver.java 29 Oct 2003 08:50:37 -0000 1.9
@@ -138,7 +138,7 @@
}
public boolean isField(String fieldName) {
- return keywordList.contains(fieldName);
+ return ((fieldName != null) && \
(keywordList.contains(fieldName.toUpperCase()))); }
public Object getValue(String fieldName, LoggingEvent event) {
1.4 +2 -2 \
jakarta-log4j/src/java/org/apache/log4j/chainsaw/ChainsawConstants.java
Index: ChainsawConstants.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ChainsawConstants.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ChainsawConstants.java 4 Sep 2003 05:42:35 -0000 1.3
+++ ChainsawConstants.java 29 Oct 2003 08:50:37 -0000 1.4
@@ -46,8 +46,8 @@
public static final String DETAIL_CONTENT_TYPE = "text/html";
static final String EVENT_TYPE_KEY = "log4j.eventtype";
- static final String LOG4J_EVENT_TYPE = "log4j";
- static final String UTIL_LOGGING_EVENT_TYPE = "util-logging";
+ public static final String LOG4J_EVENT_TYPE = "log4j";
+ public static final String UTIL_LOGGING_EVENT_TYPE = "util-logging";
static final String LEVEL_DISPLAY = "level.display";
static final String LEVEL_DISPLAY_ICONS = "icons";
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic