sdeboy 2003/10/30 00:10:27
Modified: src/java/org/apache/log4j/chainsaw/rule RuleTest.java
src/java/org/apache/log4j/chainsaw
LoggingEventFieldResolver.java
Log:
added event field and operator support to expression builder's context menu
Revision Changes Path
1.13 +94 -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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- RuleTest.java 30 Oct 2003 07:04:27 -0000 1.12
+++ RuleTest.java 30 Oct 2003 08:10:26 -0000 1.13
@@ -49,14 +49,6 @@
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.ChainsawConstants;
-import org.apache.log4j.chainsaw.LoggingEventFieldResolver;
-import org.apache.log4j.chainsaw.filter.FilterModel;
-import org.apache.log4j.spi.LoggingEvent;
-
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Point;
@@ -65,12 +57,12 @@
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;
import javax.swing.AbstractAction;
+import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
@@ -82,6 +74,14 @@
import javax.swing.JTextField;
import javax.swing.WindowConstants;
+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 {
/**
@@ -233,11 +233,38 @@
JPopupMenu contextMenu = new JPopupMenu();
JList list = new JList();
final JTextField textField;
+ private DefaultListModel fieldModel = new DefaultListModel();
+ private DefaultListModel operatorModel = new DefaultListModel();
public ContextListener(final JTextField textField) {
this.textField = textField;
- list.setVisibleRowCount(5);
+ fieldModel.addElement("LOGGER");
+ fieldModel.addElement("LEVEL");
+ fieldModel.addElement("CLASS");
+ fieldModel.addElement("FILE");
+ fieldModel.addElement("LINE");
+ fieldModel.addElement("METHOD");
+ fieldModel.addElement("MSG");
+ fieldModel.addElement("NDC");
+ fieldModel.addElement("EXCEPTION");
+ fieldModel.addElement("TIMESTAMP");
+ fieldModel.addElement("THREAD");
+ fieldModel.addElement("MDC");
+ fieldModel.addElement("PROP");
+
+ operatorModel.addElement("&&");
+ operatorModel.addElement("||");
+ operatorModel.addElement("!");
+ operatorModel.addElement("!=");
+ operatorModel.addElement("==");
+ operatorModel.addElement("~=");
+ operatorModel.addElement("like");
+ operatorModel.addElement("<");
+ operatorModel.addElement(">");
+ operatorModel.addElement("<=");
+ operatorModel.addElement(">=");
+ list.setVisibleRowCount(5);
PopupListener popupListener = new PopupListener();
textField.addMouseListener(popupListener);
@@ -269,8 +296,8 @@
String text = textField.getText();
int position = textField.getCaretPosition();
textField.setText(
- text.substring(0, position) + value + text.substring(position));
- textField.setCaretPosition(position + value.length());
+ text.substring(0, position) + value + " " + text.substring(position));
+ textField.setCaretPosition(position + value.length() + 1);
}
public void keyPressed(KeyEvent e) {
@@ -289,9 +316,33 @@
list.setSelectedIndex(0);
Point p = textField.getCaret().getMagicCaretPosition();
- contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 6)));
+ contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 5)));
list.requestFocus();
- }
+ } else {
+ if (isOperatorContextValid()) {
+ list.setModel(operatorModel);
+ list.setSelectedIndex(0);
+
+ Point p = textField.getCaret().getMagicCaretPosition();
+ contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 5)));
+ list.requestFocus();
+ } else if (isFieldContextValid()) {
+ list.setModel(fieldModel);
+ list.setSelectedIndex(0);
+ Point p = textField.getCaret().getMagicCaretPosition();
+ if (p == null) {
+ p = new Point(textField.getLocation().x, (textField.getLocation().y
- textField.getHeight() + 5));
+ }
+ contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 5)));
+ list.requestFocus();
+ }
+ }
+ }
+
+ private boolean isFieldContextValid() {
+ String text = textField.getText();
+ int currentPosition = textField.getCaretPosition();
+ return ((currentPosition == 0) || (text.charAt(currentPosition - 1) == '
'));
}
private String getContextKey() {
@@ -304,9 +355,38 @@
return field;
}
+ private boolean isOperatorContextValid() {
+ String text = textField.getText();
+
+ int currentPosition = textField.getCaretPosition();
+
+ if ((currentPosition < 1) || (text.charAt(currentPosition - 1) != ' ')) {
+ return false;
+ }
+
+ int lastFieldPosition = text.lastIndexOf(" ", currentPosition - 1);
+ if (lastFieldPosition == -1) {
+ return false;
+ }
+
+ int lastFieldStartPosition =
+ Math.max(0, text.lastIndexOf(" ", lastFieldPosition - 1));
+ String field =
+ text.substring(lastFieldStartPosition, lastFieldPosition).trim();
+
+ if (field.startsWith("MDC.")) {
+ return true;
+ }
+ if (resolver.isField(field)) {
+ return true;
+ }
+
+ return false;
+ }
//returns the currently active field which can be used to display a context menu
//the field returned is the left hand portion of an expression (for example,
logger == )
//logger is the field that is returned
+
private String getField() {
String text = textField.getText();
1.11 +0 -4
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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- LoggingEventFieldResolver.java 30 Oct 2003 07:04:27 -0000 1.10
+++ LoggingEventFieldResolver.java 30 Oct 2003 08:10:27 -0000 1.11
@@ -133,10 +133,6 @@
return resolver;
}
- public List getKeywords() {
- return keywordList;
- }
-
public boolean isField(String fieldName) {
return ((fieldName != null) && (keywordList.contains(fieldName.toUpperCase())));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]