sdeboy      2003/10/23 02:32:23

  Modified:    src/java/org/apache/log4j/chainsaw/rule ExpressionRule.java
               src/java/org/apache/log4j/chainsaw
                        LoggingEventFieldResolver.java
  Log:
  Simplified expressionrule, referencing constants in fieldresolver
  
  Revision  Changes    Path
  1.2       +6 -37     
jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/ExpressionRule.java
  
  Index: ExpressionRule.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/ExpressionRule.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ExpressionRule.java       23 Oct 2003 09:18:12 -0000      1.1
  +++ ExpressionRule.java       23 Oct 2003 09:32:23 -0000      1.2
  @@ -52,9 +52,6 @@
   import org.apache.log4j.spi.LoggingEvent;
   
   import java.util.Enumeration;
  -import java.util.Iterator;
  -import java.util.LinkedList;
  -import java.util.List;
   import java.util.Stack;
   import java.util.StringTokenizer;
   
  @@ -72,11 +69,11 @@
     private static InFixToPostFix convertor = new InFixToPostFix();
     private static PostFixExpressionCompiler compiler =
       new PostFixExpressionCompiler();
  -  List list = null;
  +  Rule rule = null;
     Stack stack = new Stack();
   
  -  private ExpressionRule(List list) {
  -    this.list = list;
  +  private ExpressionRule(Rule rule) {
  +    this.rule = rule;
     }
   
     static Rule getRule(String expression, boolean isPostFix) {
  @@ -88,30 +85,7 @@
     }
   
     public boolean evaluate(LoggingEvent event) {
  -    stack.clear();
  -
  -    boolean result = false;
  -    Iterator iter = list.iterator();
  -
  -    while (iter.hasNext()) {
  -      //examine each token
  -      Object nextItem = iter.next();
  -
  -      //if a symbol is found, pop 2 off the stack, evaluate and push the result 
  -      if (nextItem instanceof Rule) {
  -        Rule r = (Rule) nextItem;
  -        stack.push(new Boolean(r.evaluate(event)));
  -      } else {
  -        //variables or constants are pushed onto the stack
  -        stack.push(nextItem);
  -      }
  -    }
  -
  -    if (stack.size() > 0) {
  -      result = new Boolean(stack.pop().toString()).booleanValue();
  -    }
  -
  -    return result;
  +      return rule.evaluate(event);
     }
   }
   
  @@ -122,10 +96,9 @@
    */
   class PostFixExpressionCompiler {
   
  -  List compileExpression(String expression) {
  +  Rule compileExpression(String expression) {
       System.out.println("compiling expression: " + expression);
   
  -    List list = new LinkedList();
       Stack stack = new Stack();
       Enumeration tokenizer = new StringTokenizer(expression);
   
  @@ -146,10 +119,6 @@
         }
       }
   
  -    while (!stack.isEmpty()) {
  -      list.add(stack.pop());
  -    }
  -
  -    return list;
  +    return (Rule)stack.pop();
     }
   }
  
  
  
  1.5       +54 -25    
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- LoggingEventFieldResolver.java    17 Sep 2003 06:24:38 -0000      1.4
  +++ LoggingEventFieldResolver.java    23 Oct 2003 09:32:23 -0000      1.5
  @@ -49,6 +49,9 @@
   
   package org.apache.log4j.chainsaw;
   
  +import java.util.ArrayList;
  +import java.util.List;
  +
   import org.apache.log4j.spi.LoggingEvent;
   
   
  @@ -93,62 +96,88 @@
    *
    */
   public final class LoggingEventFieldResolver {
  +  private static final List keywordList = new ArrayList();
  +    
  +  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 LINE_FIELD = "LINE";
  +  private static final String METHOD_FIELD = "METHOD";
  +  private static final String MSG_FIELD = "MSG";
  +  private static final String NDC_FIELD = "NDC";
  +  private static final String EXCEPTION_FIELD = "EXCEPTION";
  +  private static final String TIMESTAMP_FIELD = "TIMESTAMP";
  +  private static final String THREAD_FIELD = "THREAD";
  +  private static final String MDC_FIELD = "MDC.";
  +  private static final String PROP_FIELD = "PROP.";
  +  
  +  private static final String EMPTY_STRING = "";
  +
     private static final LoggingEventFieldResolver resolver =
       new LoggingEventFieldResolver();
  -
  +  
     private LoggingEventFieldResolver() {
  +    keywordList.add(LOGGER_FIELD);
  +    keywordList.add(LEVEL_FIELD);
  +    keywordList.add(CLASS_FIELD);
  +    keywordList.add(FILE_FIELD);
  +    keywordList.add(LINE_FIELD);
  +    keywordList.add(METHOD_FIELD);
  +    keywordList.add(MSG_FIELD);
  +    keywordList.add(NDC_FIELD);
  +    keywordList.add(EXCEPTION_FIELD);
  +    keywordList.add(TIMESTAMP_FIELD);
  +    keywordList.add(THREAD_FIELD);
  +    keywordList.add(MDC_FIELD);
  +    keywordList.add(PROP_FIELD);
     }
   
     public static LoggingEventFieldResolver getInstance() {
       return resolver;
     }
   
  +  public List getKeywords() {
  +    return keywordList;
  +  }
  +
     public boolean isField(String fieldName) {
  -     if (fieldName == null) {
  -             return false;
  -     }
  -     String upperField = fieldName.toUpperCase();
  -     
  -     return (upperField != null && ("LOGGER".equals(upperField) || 
"LEVEL".equals(upperField) || 
  -     "CLASS".equals(upperField) || "FILE".equals(upperField) || 
"LINE".equals(upperField) ||
  -     "METHOD".equals(upperField) || "MSG".equals(upperField) || 
"NDC".equals(upperField) || 
  -     "EXCEPTION".equals(upperField) || "TIMESTAMP".equals(upperField) || 
"THREAD".equals(upperField) ||
  -     upperField.startsWith("MDC.") || upperField.startsWith("PROP.")));
  +    return keywordList.contains(fieldName);
     }
     
     public Object getValue(String fieldName, LoggingEvent event) {
       if (fieldName == null) {
  -      return "";
  +      return EMPTY_STRING;
       }
   
       String upperField = fieldName.toUpperCase();
   
  -    if ("LOGGER".equals(upperField)) {
  +    if (LOGGER_FIELD.equals(upperField)) {
         return event.getLoggerName();
  -    } else if ("LEVEL".equals(upperField)) {
  +    } else if (LEVEL_FIELD.equals(upperField)) {
         return event.getLevel();
  -    } else if ("CLASS".equals(upperField)) {
  +    } else if (CLASS_FIELD.equals(upperField)) {
         return event.getLocationInformation().getClassName();
  -    } else if ("FILE".equals(upperField)) {
  +    } else if (FILE_FIELD.equals(upperField)) {
         return event.getLocationInformation().getFileName();
  -    } else if ("LINE".equals(upperField)) {
  +    } else if (LINE_FIELD.equals(upperField)) {
         return event.getLocationInformation().getLineNumber();
  -    } else if ("METHOD".equals(upperField)) {
  +    } else if (METHOD_FIELD.equals(upperField)) {
         return event.getLocationInformation().getMethodName();
  -    } else if ("MSG".equals(upperField)) {
  +    } else if (MSG_FIELD.equals(upperField)) {
         return event.getMessage();
  -    } else if ("NDC".equals(upperField)) {
  +    } else if (NDC_FIELD.equals(upperField)) {
         return event.getNDC();
  -    } else if ("EXCEPTION".equals(upperField)) {
  +    } else if (EXCEPTION_FIELD.equals(upperField)) {
          return event.getThrowableInformation();
  -    } else if ("TIMESTAMP".equals(upperField)) {
  +    } else if (TIMESTAMP_FIELD.equals(upperField)) {
         return new Long(event.timeStamp);
  -    } else if ("THREAD".equals(upperField)) {
  +    } else if (THREAD_FIELD.equals(upperField)) {
         return event.getThreadName();
  -    } else if (upperField.startsWith("MDC.")) {
  +    } else if (upperField.startsWith(MDC_FIELD)) {
         //note: need to use actual fieldname since case matters
         return event.getMDC(fieldName.substring(4));
  -    } else if (upperField.startsWith("PROP.")) {
  +    } else if (upperField.startsWith(PROP_FIELD)) {
                //note: need to use actual fieldname since case matters
         return event.getProperty(fieldName.substring(5));
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to