You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by sd...@apache.org on 2003/10/31 09:29:53 UTC
cvs commit: jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule RuleTest.java
sdeboy 2003/10/31 00:29:53
Modified: src/java/org/apache/log4j/chainsaw/rule RuleTest.java
Log:
Added selection replacement from expression builder's context menu, corrected minor context menu-related bugs (scroll bar, attempting to load a tablemodel for fields that aren't supported)
Revision Changes Path
1.14 +65 -38 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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RuleTest.java 30 Oct 2003 08:10:26 -0000 1.13
+++ RuleTest.java 31 Oct 2003 08:29:53 -0000 1.14
@@ -49,6 +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.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;
@@ -57,6 +65,7 @@
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;
@@ -74,14 +83,6 @@
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 {
/**
@@ -232,6 +233,7 @@
String lastField = null;
JPopupMenu contextMenu = new JPopupMenu();
JList list = new JList();
+ JScrollPane scrollPane = new JScrollPane(list);
final JTextField textField;
private DefaultListModel fieldModel = new DefaultListModel();
private DefaultListModel operatorModel = new DefaultListModel();
@@ -258,13 +260,15 @@
operatorModel.addElement("!=");
operatorModel.addElement("==");
operatorModel.addElement("~=");
- operatorModel.addElement("like");
+ operatorModel.addElement("LIKE");
operatorModel.addElement("<");
operatorModel.addElement(">");
operatorModel.addElement("<=");
operatorModel.addElement(">=");
- list.setVisibleRowCount(5);
+ //make as large as operator list to avoid narrow list scrollbar issues
+ list.setVisibleRowCount(11);
+
PopupListener popupListener = new PopupListener();
textField.addMouseListener(popupListener);
@@ -288,16 +292,24 @@
}
});
- JScrollPane scrollPane = new JScrollPane(list);
contextMenu.insert(scrollPane, 0);
}
private void updateField(String value) {
String text = textField.getText();
- int position = textField.getCaretPosition();
+ int startPosition = textField.getSelectionStart();
+ int endPosition = textField.getSelectionEnd();
+ String spacer = "";
+
+ if (startPosition == endPosition) {
+ spacer = " ";
+ }
+
textField.setText(
- text.substring(0, position) + value + " " + text.substring(position));
- textField.setCaretPosition(position + value.length() + 1);
+ text.substring(0, startPosition) + value + spacer
+ + text.substring(endPosition));
+ textField.setCaretPosition(
+ startPosition + value.length() + spacer.length());
}
public void keyPressed(KeyEvent e) {
@@ -316,33 +328,43 @@
list.setSelectedIndex(0);
Point p = textField.getCaret().getMagicCaretPosition();
+
contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 5)));
list.requestFocus();
} else {
if (isOperatorContextValid()) {
- list.setModel(operatorModel);
- list.setSelectedIndex(0);
+ list.setModel(operatorModel);
+ list.setSelectedIndex(0);
- Point p = textField.getCaret().getMagicCaretPosition();
- contextMenu.show(textField, p.x, (p.y + (textField.getHeight() - 5)));
- list.requestFocus();
+ 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();
- }
+ 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) == ' '));
+ String text = textField.getText();
+ int currentPosition = textField.getSelectionStart();
+
+ return ((currentPosition == 0)
+ || (text.charAt(currentPosition - 1) == ' '));
}
private String getContextKey() {
@@ -358,13 +380,14 @@
private boolean isOperatorContextValid() {
String text = textField.getText();
- int currentPosition = textField.getCaretPosition();
+ int currentPosition = textField.getSelectionStart();
if ((currentPosition < 1) || (text.charAt(currentPosition - 1) != ' ')) {
return false;
}
int lastFieldPosition = text.lastIndexOf(" ", currentPosition - 1);
+
if (lastFieldPosition == -1) {
return false;
}
@@ -372,25 +395,27 @@
int lastFieldStartPosition =
Math.max(0, text.lastIndexOf(" ", lastFieldPosition - 1));
String field =
- text.substring(lastFieldStartPosition, lastFieldPosition).trim();
+ text.substring(lastFieldStartPosition, lastFieldPosition).toUpperCase()
+ .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();
- int currentPosition = textField.getCaretPosition();
+ int currentPosition = textField.getSelectionStart();
if ((currentPosition < 1) || (text.charAt(currentPosition - 1) != ' ')) {
return null;
@@ -416,7 +441,9 @@
String lastField =
text.substring(lastFieldStartPosition, lastFieldPosition).trim();
- if (RuleFactory.isRule(lastSymbol) && resolver.isField(lastField)) {
+ if (
+ RuleFactory.isRule(lastSymbol)
+ && filterModel.getContainer().modelExists(lastField)) {
return lastField;
}
@@ -426,10 +453,10 @@
//subfields allow the key portion of a field to provide context menu support
//and are available after the fieldname and a . (for example, MDC.)
private String getSubField() {
- int currentPosition = textField.getCaretPosition();
+ int currentPosition = textField.getSelectionStart();
String text = textField.getText();
- if (text.substring(0, currentPosition).endsWith("MDC.")) {
+ if (text.substring(0, currentPosition).toUpperCase().endsWith("MDC.")) {
return "MDC";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org