sdeboy      2003/09/14 19:20:26

  Modified:    src/java/org/apache/log4j/chainsaw/rule RuleTest.java
  Log:
  Jalopy-ized
  
  Revision  Changes    Path
  1.3       +363 -303  
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RuleTest.java     15 Sep 2003 02:15:49 -0000      1.2
  +++ RuleTest.java     15 Sep 2003 02:20:26 -0000      1.3
  @@ -52,6 +52,7 @@
   import java.awt.BorderLayout;
   import java.awt.GridLayout;
   import java.awt.event.ActionEvent;
  +
   import java.util.Enumeration;
   import java.util.HashMap;
   import java.util.List;
  @@ -71,307 +72,366 @@
   import javax.swing.table.DefaultTableModel;
   import javax.swing.table.TableModel;
   
  -public class RuleTest extends JFrame {
   
  -/**
  - * Simple infix/postfix conversion and evaluation...work in progress..a ui test 
tool to work through expression building issues.
  - * 
  - * Infix to postfix conversion routines and evaluation methods for boolean 
expressions.
  - * See http://www.qiksearch.com/articles/cs/infix-postfix/
  - * and http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/
  - *
  - * for more information.
  - *  
  - * @author Scott Deboy <[EMAIL PROTECTED]>
  - *
  - */
  -     private final Vector data = new Vector();
  -     private final Vector colnames = new Vector();
  -     
  -     public RuleTest(String booleanPostFixExpression, String inFixExpression) {
  -             setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  -             getContentPane().setLayout(new BorderLayout());
  -             JPanel fieldPanel = new JPanel(new GridLayout(8, 1));
  -             
  -             fieldPanel.add(
  -                     new JLabel("Enter boolean postfix expression to evaluate: "));
  -             final JTextField booleanPostFixTextField = new 
JTextField(booleanPostFixExpression);
  -             fieldPanel.add(booleanPostFixTextField);
  -             JButton booleanPostFixButton = new JButton("Evaluate Boolean PostFix");
  -             fieldPanel.add(booleanPostFixButton);
  -             final JTextField booleanResult = new JTextField();
  -             fieldPanel.add(booleanResult);
  -             booleanPostFixButton.addActionListener(new AbstractAction() {
  -                     public void actionPerformed(ActionEvent evt) {
  -                             EvaluateBooleanPostFix booleanPostFixEvaluator = new 
EvaluateBooleanPostFix();
  -                             
booleanResult.setText(booleanPostFixEvaluator.evaluate(booleanPostFixTextField.getText()));
  -                     }
  -             });
  -
  -
  -             fieldPanel.add(
  -                     new JLabel("Enter infix expression to convert to postfix: "));
  -             final JTextField inFixTextField = new JTextField(inFixExpression);
  -             fieldPanel.add(inFixTextField);
  -             JButton inFixButton = new JButton("Convert InFix to PostFix");
  -             fieldPanel.add(inFixButton);
  -             final JTextField inFixResult = new JTextField();
  -             fieldPanel.add(inFixResult);
  -             inFixButton.addActionListener(new AbstractAction() {
  -                     public void actionPerformed(ActionEvent evt) {
  -                             InFixToPostFix inFixConverter = new InFixToPostFix();
  -                             
inFixResult.setText(inFixConverter.convert(inFixTextField.getText()));
  -                     }
  -             });
  -
  -             colnames.add("level");
  -             colnames.add("logger");
  -             colnames.add("message");
  -             colnames.add("result");         
  -
  -             data.add(createEvent("DEBUG", "org.apache.log4j.chainsaw", "TEST 
MESSAGE 1"));
  -             data.add(createEvent("DEBUG", "test logger", "TEST MESSAGE 2"));
  -             data.add(createEvent("INFO", "org.apache.log4j.chainsaw", "TEST 
MESSAGE 3"));
  -             data.add(createEvent("INFO", "org.aache.log4j.chainsaw", "TEST MESSAGE 
4"));
  -             data.add(createEvent("WARN", "test logger", "TEST MESSAGE 5"));
  -             data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 6"));
  -             data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 7"));
  -
  -             TableModel tm = new EventTableModel(data, colnames);
  -             JPanel tablePanel = new JPanel();
  -             JTable table = new JTable(tm);
  -             tablePanel.add(table);
  -             getContentPane().add(fieldPanel, BorderLayout.NORTH);
  -             getContentPane().add(tablePanel, BorderLayout.CENTER);
  -     }
  -
  -     private Vector createEvent(String level, String logger, String message) {
  -             Vector v = new Vector();
  -             v.add(level);
  -             v.add(logger);
  -             v.add(message);
  -             return v;
  -     }
  -     
  -     public static void main(String[] args) {
  -             RuleTest test = new RuleTest("level debug == BLAH test == logger 
org.apache == && ||", "( ( level == debug ) || ( BLAH == test ) ) && logger == 
org.apache");
  -             test.pack();
  -             test.setVisible(true);
  -     }
  -
  -     abstract class BooleanOperator {
  -             abstract boolean evaluate(String firstParam, String secondParam);
  -     }
  -      
  -     class AndOperator extends BooleanOperator {
  -             boolean evaluate(String firstParam, String secondParam) {
  -                     System.out.println("and op");
  -                     return (convertToBoolean(firstParam) && 
convertToBoolean(secondParam));
  -             }
  -     }
  -
  -     boolean convertToBoolean(String param) {
  -             //use tostring to convert params to boolean.boolvalues
  -             boolean result = false;
  -             if (param == null) {
  -                     return result;
  -             }
  -             try {
  -                     result = Boolean.valueOf(param).booleanValue();
  -             } catch (Exception e) {
  -                     e.printStackTrace();
  -                     return result;
  -             }
  -             return result;                          
  -     }
  -     
  -     class OrOperator extends BooleanOperator {
  -             boolean evaluate(String firstParam, String secondParam) {
  -                     System.out.println("or op");
  -                     return (convertToBoolean(firstParam) || 
convertToBoolean(secondParam));
  -             }
  -     }
  -     
  -     class PartialTextMatchOperator extends BooleanOperator {
  -             boolean evaluate(String firstParam, String secondParam) {
  -                     System.out.println("part text match op " + firstParam 
+".."+secondParam);
  -                     return (secondParam != null && secondParam.indexOf(firstParam) 
> -1) ? true:false;
  -             } 
  -     }
  -
  -     class TextMatchOperator extends BooleanOperator {
  -             boolean evaluate(String firstParam, String secondParam) {
  -                     System.out.println("text match op " + firstParam 
+".."+secondParam);
  -                     boolean result = false;
  -                             //second parameter is field name
  -                             //first parameter is value
  -                             //fake out logic here to examine passed in parameters 
and value retrieval from table
  -                             if ((secondParam.equalsIgnoreCase("level") && 
firstParam.equalsIgnoreCase("debug")) ||
  -                             (secondParam.equalsIgnoreCase("logger") && 
firstParam.equalsIgnoreCase("org.apache")))
  -                              {
  -                                     result = true;
  -                             } else {
  -                                     result = ((secondParam != null && 
secondParam.equals(firstParam))?true:false);
  -                             }
  -                     return result;
  -             } 
  -     }
  -     
  -/**
  - * Evaluate a boolean postfix expression.
  - *
  - */
  -     class EvaluateBooleanPostFix {
  -             private final Map symbolMap = new HashMap();
  -             private final Stack stack = new Stack();
  -             String result = null;
  -
  -             EvaluateBooleanPostFix() {
  -                     symbolMap.put("&&", new AndOperator());
  -                     symbolMap.put("||", new OrOperator());
  -                     symbolMap.put("==", new TextMatchOperator());
  -                     symbolMap.put("~=", new PartialTextMatchOperator());
  -             }
  -
  -             String evaluate(String expression) {
  -                     String result = null;
  -                     Enumeration tokenizer = new StringTokenizer(expression);
  -                     while (tokenizer.hasMoreElements()) {
  -                             //examine each token
  -                             String nextToken = ((String) tokenizer.nextElement());
  -                             //if a symbol is found, pop 2 off the stack, evaluate 
and push the result 
  -                             if (symbolMap.containsKey(nextToken)) {
  -                                     BooleanOperator op = (BooleanOperator) 
symbolMap.get(nextToken);
  -                                     Object o = stack.pop();
  -                                     Object p = stack.pop();
  -                                     //notice the evaluate takes the 2nd parameter 
as the first field 
  -                                     Boolean output = 
Boolean.valueOf(op.evaluate(o.toString(), p.toString()));
  -                                     System.out.println("o, p,output is " + o + 
".." + p + ".." + output);
  -                                     stack.push(output);
  -                             } else {
  -                                     //variables or constants are pushed onto the 
stack
  -                                     stack.push(nextToken);
  -                                     
//stack.push("T".equalsIgnoreCase(nextToken)?Boolean.TRUE:Boolean.FALSE);
  -                             }
  -                     }
  -                     if (stack.size() > 0) {
  -                             result = stack.pop().toString();
  -                     } else {
  -                             result = "ERRROR";
  -                     }
  -                     return result;
  -             }
  -     }
  -
  -/**
  - * precedence: !, &, ^, |, &&, ||
  - * Convert an infix expression to postfix.  Supports parentheses, ||, &&, == and ~= 
  - *
  - */
  -     public class InFixToPostFix {
  -             private final Stack stack = new Stack();
  -             private final Map precedenceMap = new HashMap();
  -             private final List operators = new Vector();
  -             
  -             public InFixToPostFix() {
  -                     //parentheses are treated as quasi-operators
  -                     operators.add("(");
  -                     operators.add(")");
  -
  -                     //boolean operators
  -                     operators.add("==");
  -                     operators.add("~=");
  -                     operators.add("||");
  -                     operators.add("&&");
  -
  -                     //boolean precedence
  -                     precedenceMap.put("==", new Integer(2));
  -                     precedenceMap.put("~=", new Integer(2));
  -                     precedenceMap.put("||", new Integer(3));
  -                     precedenceMap.put("&&", new Integer(3));                       
 
  -             }                                               
  -
  -             public String convert(String expression) {
  -                     return infixToPostFix(expression);
  -             }
  -
  -             boolean isOperand(String symbol) {
  -                     return (!operators.contains(symbol));
  -             }
  -
  -             boolean precedes(String symbol1, String symbol2) {
  -                     if (!precedenceMap.keySet().contains(symbol1)) {
  -                             return false;
  -                     }
  -                     if (!precedenceMap.keySet().contains(symbol2)) {
  -                             return false;
  -                     }
  -
  -                     int index1 = ((Integer)precedenceMap.get(symbol1)).intValue();
  -                     int index2 = ((Integer)precedenceMap.get(symbol2)).intValue();
  -
  -                     //boolean precedesResult = !(((index1 == 0) || (index1 == 1)) 
&& (index2 > 1)); 
  -
  -                     boolean precedesResult = (index1 < index2); 
  -                     System.out.println("SYMBOL1: " + symbol1 + "SYMBOL2: " + 
symbol2 + " index1: " + index1 + " index2: " + index2 + " precedesresult: " + 
precedesResult);
  -                     return precedesResult; 
  -             }
  -
  -             String infixToPostFix(String infixParam) {
  -                     String SPACE = " ";
  -                     StringBuffer postfix = new StringBuffer();
  -                     StringTokenizer tokenizer = new StringTokenizer(infixParam);
  -                     for (int i = 0, j = tokenizer.countTokens(); i < j; i++) {
  -                             String token = tokenizer.nextToken();
  -                             System.out.println("FOUND TOKEN " + token);
  -                             if (isOperand(token)) {
  -                                     postfix.append(token+SPACE);
  -                                     System.out.println("OPERAND - APPENDING TO 
POSTFIX " + postfix);
  -                             } else {
  -                                     System.out.println("OPERATOR - ITERATING 
THROUGH STACK");
  -                                     while ((!(stack.size() == 0))
  -                                             && (precedes(stack.peek().toString(), 
token))) {
  -                                                     
postfix.append(stack.pop().toString()+SPACE);
  -                                                     System.out.println("appending 
to postfix and popping from stack - postfix: " + postfix + "..stack: " + stack);
  -                                     }
  -                                     if ((!(stack.size() == 0)) && 
(")".equals(token))) {
  -                                             if ("(".equals(stack.peek())) {
  -                                                     System.out.println("found left 
paren - popping without adding to output - result: " + stack);
  -                                                     stack.pop();
  -                                             } else {
  -                                                     
postfix.append(stack.pop().toString()+SPACE);
  -                                                     System.out.println("FOUND 
RIGHT PAREN - POPPING - result: " + stack);
  -                                             }
  -                                     } else {
  -                                             stack.push(token);
  -                                             System.out.println("NOT RIGHT PAREN - 
PUSHING - result: " + stack);
  -                                     }
  -                             }
  -                     }
  -                     System.out.println("OUT OF TOKEN LOOP - remaining stack is " + 
stack);
  -                     while (!(stack.size() == 0)) {
  -                             if ("(".equals(stack.peek().toString())) {
  -                                     //pop off the stack but don't process
  -                                     stack.pop();
  -                                     System.out.println("popping left paren off 
stack. stack is " + stack);
  -                             } else {
  -                                     postfix.append(stack.pop().toString()+SPACE);
  -                                     System.out.println("appending to postfix and 
popping from stack - postfix: " + postfix + "..stack: " + stack);
  -                             }                       
  -                     }
  -                     System.out.println("RETURNING " + postfix);
  -                     stack.clear();
  -                     return postfix.toString();
  -             }
  -     }
  -     
  -     class EventTableModel extends DefaultTableModel {
  -             Vector data;
  -             Vector colnames;
  -             EventTableModel(Vector data, Vector colnames) {
  -                     super(data, colnames);
  -                     this.data = data;
  -                     this.colnames = colnames;
  -             }
  -     }
  -}
  \ No newline at end of file
  +public class RuleTest extends JFrame {
  +  /**
  +   * Simple infix/postfix conversion and evaluation...work in progress..a ui test 
tool to work through expression building issues.
  +   *
  +   * Infix to postfix conversion routines and evaluation methods for boolean 
expressions.
  +   * See http://www.qiksearch.com/articles/cs/infix-postfix/
  +   * and http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/
  +   *
  +   * for more information.
  +   *
  +   * @author Scott Deboy <[EMAIL PROTECTED]>
  +   *
  +   */
  +  private final Vector data = new Vector();
  +  private final Vector colnames = new Vector();
  +
  +  public RuleTest(String booleanPostFixExpression, String inFixExpression) {
  +    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  +    getContentPane().setLayout(new BorderLayout());
  +
  +    JPanel fieldPanel = new JPanel(new GridLayout(8, 1));
  +
  +    fieldPanel.add(
  +      new JLabel("Enter boolean postfix expression to evaluate: "));
  +
  +    final JTextField booleanPostFixTextField =
  +      new JTextField(booleanPostFixExpression);
  +    fieldPanel.add(booleanPostFixTextField);
  +
  +    JButton booleanPostFixButton = new JButton("Evaluate Boolean PostFix");
  +    fieldPanel.add(booleanPostFixButton);
  +
  +    final JTextField booleanResult = new JTextField();
  +    fieldPanel.add(booleanResult);
  +    booleanPostFixButton.addActionListener(
  +      new AbstractAction() {
  +        public void actionPerformed(ActionEvent evt) {
  +          EvaluateBooleanPostFix booleanPostFixEvaluator =
  +            new EvaluateBooleanPostFix();
  +          booleanResult.setText(
  +            booleanPostFixEvaluator.evaluate(
  +              booleanPostFixTextField.getText()));
  +        }
  +      });
  +
  +    fieldPanel.add(
  +      new JLabel("Enter infix expression to convert to postfix: "));
  +
  +    final JTextField inFixTextField = new JTextField(inFixExpression);
  +    fieldPanel.add(inFixTextField);
  +
  +    JButton inFixButton = new JButton("Convert InFix to PostFix");
  +    fieldPanel.add(inFixButton);
  +
  +    final JTextField inFixResult = new JTextField();
  +    fieldPanel.add(inFixResult);
  +    inFixButton.addActionListener(
  +      new AbstractAction() {
  +        public void actionPerformed(ActionEvent evt) {
  +          InFixToPostFix inFixConverter = new InFixToPostFix();
  +          inFixResult.setText(
  +            inFixConverter.convert(inFixTextField.getText()));
  +        }
  +      });
  +
  +    colnames.add("level");
  +    colnames.add("logger");
  +    colnames.add("message");
  +    colnames.add("result");
  +
  +    data.add(
  +      createEvent("DEBUG", "org.apache.log4j.chainsaw", "TEST MESSAGE 1"));
  +    data.add(createEvent("DEBUG", "test logger", "TEST MESSAGE 2"));
  +    data.add(
  +      createEvent("INFO", "org.apache.log4j.chainsaw", "TEST MESSAGE 3"));
  +    data.add(
  +      createEvent("INFO", "org.aache.log4j.chainsaw", "TEST MESSAGE 4"));
  +    data.add(createEvent("WARN", "test logger", "TEST MESSAGE 5"));
  +    data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 6"));
  +    data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 7"));
  +
  +    TableModel tm = new EventTableModel(data, colnames);
  +    JPanel tablePanel = new JPanel();
  +    JTable table = new JTable(tm);
  +    tablePanel.add(table);
  +    getContentPane().add(fieldPanel, BorderLayout.NORTH);
  +    getContentPane().add(tablePanel, BorderLayout.CENTER);
  +  }
  +
  +  private Vector createEvent(String level, String logger, String message) {
  +    Vector v = new Vector();
  +    v.add(level);
  +    v.add(logger);
  +    v.add(message);
  +
  +    return v;
  +  }
  +
  +  public static void main(String[] args) {
  +    RuleTest test =
  +      new RuleTest(
  +        "level debug == BLAH test == logger org.apache == && ||",
  +        "( ( level == debug ) || ( BLAH == test ) ) && logger == org.apache");
  +    test.pack();
  +    test.setVisible(true);
  +  }
  +
  +  boolean convertToBoolean(String param) {
  +    boolean result = false;
  +
  +    if (param == null) {
  +      return result;
  +    }
  +
  +    try {
  +      result = Boolean.valueOf(param).booleanValue();
  +    } catch (Exception e) {
  +      e.printStackTrace();
  +
  +      return result;
  +    }
  +
  +    return result;
  +  }
  +
  +  abstract class BooleanOperator {
  +    abstract boolean evaluate(String firstParam, String secondParam);
  +  }
  +
  +  class AndOperator extends BooleanOperator {
  +    boolean evaluate(String firstParam, String secondParam) {
  +      System.out.println("and op");
  +
  +      return (convertToBoolean(firstParam) && convertToBoolean(secondParam));
  +    }
  +  }
  +
  +  class OrOperator extends BooleanOperator {
  +    boolean evaluate(String firstParam, String secondParam) {
  +      System.out.println("or op");
  +
  +      return (convertToBoolean(firstParam) || convertToBoolean(secondParam));
  +    }
  +  }
  +
  +  class PartialTextMatchOperator extends BooleanOperator {
  +    boolean evaluate(String firstParam, String secondParam) {
  +      System.out.println(
  +        "part text match op " + firstParam + ".." + secondParam);
  +
  +      return ((secondParam != null) && (secondParam.indexOf(firstParam) > -1))
  +      ? true : false;
  +    }
  +  }
  +
  +  class TextMatchOperator extends BooleanOperator {
  +    boolean evaluate(String firstParam, String secondParam) {
  +      System.out.println("text match op " + firstParam + ".." + secondParam);
  +
  +      boolean result = false;
  +
  +      //second parameter is field name
  +      //first parameter is value
  +      //fake out logic here to examine passed in parameters and value retrieval 
from table
  +      if (
  +        (secondParam.equalsIgnoreCase("level")
  +          && firstParam.equalsIgnoreCase("debug"))
  +          || (secondParam.equalsIgnoreCase("logger")
  +          && firstParam.equalsIgnoreCase("org.apache"))) {
  +        result = true;
  +      } else {
  +        result = (((secondParam != null) && secondParam.equals(firstParam))
  +          ? true : false);
  +      }
  +
  +      return result;
  +    }
  +  }
  +
  +  /**
  +   * Evaluate a boolean postfix expression.
  +   *
  +   */
  +  class EvaluateBooleanPostFix {
  +    private final Map symbolMap = new HashMap();
  +    private final Stack stack = new Stack();
  +    String result = null;
  +
  +    EvaluateBooleanPostFix() {
  +      symbolMap.put("&&", new AndOperator());
  +      symbolMap.put("||", new OrOperator());
  +      symbolMap.put("==", new TextMatchOperator());
  +      symbolMap.put("~=", new PartialTextMatchOperator());
  +    }
  +
  +    String evaluate(String expression) {
  +      String result = null;
  +      Enumeration tokenizer = new StringTokenizer(expression);
  +
  +      while (tokenizer.hasMoreElements()) {
  +        //examine each token
  +        String nextToken = ((String) tokenizer.nextElement());
  +
  +        //if a symbol is found, pop 2 off the stack, evaluate and push the result 
  +        if (symbolMap.containsKey(nextToken)) {
  +          BooleanOperator op = (BooleanOperator) symbolMap.get(nextToken);
  +          Object o = stack.pop();
  +          Object p = stack.pop();
  +
  +          //notice the evaluate takes the 2nd parameter as the first field 
  +          Boolean output =
  +            Boolean.valueOf(op.evaluate(o.toString(), p.toString()));
  +          System.out.println("o, p,output is " + o + ".." + p + ".." + output);
  +          stack.push(output);
  +        } else {
  +          //variables or constants are pushed onto the stack
  +          stack.push(nextToken);
  +        }
  +      }
  +
  +      if (stack.size() > 0) {
  +        result = stack.pop().toString();
  +      } else {
  +        result = "ERRROR";
  +      }
  +
  +      return result;
  +    }
  +  }
  +
  +  /**
  +   * precedence: !, &, ^, |, &&, ||
  +   * Convert an infix expression to postfix.  Supports parentheses, ||, &&, == and 
~=
  +   *
  +   */
  +  public class InFixToPostFix {
  +    private final Stack stack = new Stack();
  +    private final Map precedenceMap = new HashMap();
  +    private final List operators = new Vector();
  +
  +    public InFixToPostFix() {
  +      //parentheses are treated as quasi-operators
  +      operators.add("(");
  +      operators.add(")");
  +
  +      //boolean operators
  +      operators.add("==");
  +      operators.add("~=");
  +      operators.add("||");
  +      operators.add("&&");
  +
  +      //boolean precedence
  +      precedenceMap.put("==", new Integer(2));
  +      precedenceMap.put("~=", new Integer(2));
  +      precedenceMap.put("||", new Integer(3));
  +      precedenceMap.put("&&", new Integer(3));
  +    }
  +
  +    public String convert(String expression) {
  +      return infixToPostFix(expression);
  +    }
  +
  +    boolean isOperand(String symbol) {
  +      return (!operators.contains(symbol));
  +    }
  +
  +    boolean precedes(String symbol1, String symbol2) {
  +      if (!precedenceMap.keySet().contains(symbol1)) {
  +        return false;
  +      }
  +
  +      if (!precedenceMap.keySet().contains(symbol2)) {
  +        return false;
  +      }
  +
  +      int index1 = ((Integer) precedenceMap.get(symbol1)).intValue();
  +      int index2 = ((Integer) precedenceMap.get(symbol2)).intValue();
  +
  +      boolean precedesResult = (index1 < index2);
  +      System.out.println(
  +        "SYMBOL1: " + symbol1 + "SYMBOL2: " + symbol2 + " index1: " + index1
  +        + " index2: " + index2 + " precedesresult: " + precedesResult);
  +
  +      return precedesResult;
  +    }
  +
  +    String infixToPostFix(String infixParam) {
  +      String SPACE = " ";
  +      StringBuffer postfix = new StringBuffer();
  +      StringTokenizer tokenizer = new StringTokenizer(infixParam);
  +
  +      for (int i = 0, j = tokenizer.countTokens(); i < j; i++) {
  +        String token = tokenizer.nextToken();
  +        System.out.println("FOUND TOKEN " + token);
  +
  +        if (isOperand(token)) {
  +          postfix.append(token + SPACE);
  +          System.out.println("OPERAND - APPENDING TO POSTFIX " + postfix);
  +        } else {
  +          System.out.println("OPERATOR - ITERATING THROUGH STACK");
  +
  +          while (
  +            (!(stack.size() == 0))
  +              && (precedes(stack.peek().toString(), token))) {
  +            postfix.append(stack.pop().toString() + SPACE);
  +            System.out.println(
  +              "appending to postfix and popping from stack - postfix: "
  +              + postfix + "..stack: " + stack);
  +          }
  +
  +          if ((!(stack.size() == 0)) && (")".equals(token))) {
  +            if ("(".equals(stack.peek())) {
  +              System.out.println(
  +                "found left paren - popping without adding to output - result: "
  +                + stack);
  +              stack.pop();
  +            } else {
  +              postfix.append(stack.pop().toString() + SPACE);
  +              System.out.println(
  +                "FOUND RIGHT PAREN - POPPING - result: " + stack);
  +            }
  +          } else {
  +            stack.push(token);
  +            System.out.println("NOT RIGHT PAREN - PUSHING - result: " + stack);
  +          }
  +        }
  +      }
  +
  +      System.out.println("OUT OF TOKEN LOOP - remaining stack is " + stack);
  +
  +      while (!(stack.size() == 0)) {
  +        if ("(".equals(stack.peek().toString())) {
  +          //pop off the stack but don't process
  +          stack.pop();
  +          System.out.println(
  +            "popping left paren off stack. stack is " + stack);
  +        } else {
  +          postfix.append(stack.pop().toString() + SPACE);
  +          System.out.println(
  +            "appending to postfix and popping from stack - postfix: "
  +            + postfix + "..stack: " + stack);
  +        }
  +      }
  +
  +      System.out.println("RETURNING " + postfix);
  +      stack.clear();
  +
  +      return postfix.toString();
  +    }
  +  }
  +
  +  class EventTableModel extends DefaultTableModel {
  +    Vector data;
  +    Vector colnames;
  +
  +    EventTableModel(Vector data, Vector colnames) {
  +      super(data, colnames);
  +      this.data = data;
  +      this.colnames = colnames;
  +    }
  +  }
  +}
  
  
  

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

Reply via email to