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]

Reply via email to