LogicExpression xref

View Javadoc

    1   /***
    2    *
    3    * Copyright 2004 Hiram Chirino
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18  package org.codehaus.activemq.filter;
    19
    20  import javax.jms.JMSException;
    21  import javax.jms.Message;
    22
    23  /***
    24   * A filter performing a comparison of two objects
    25   *
    26   * @version $Revision: 1.1 $
    27   */
    28  public abstract class LogicExpression extends BinaryExpression implements BooleanExpression {
    29
    30      public static BooleanExpression createOR(BooleanExpression lvalue, BooleanExpression rvalue) {
    31          return new LogicExpression(lvalue, rvalue) {
    32              protected Object evaluate(Boolean lv, Boolean rv) {
    33                  return lv.booleanValue() || rv.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
    34              }
    35
    36              public String getExpressionSymbol() {
    37                  return "OR";
    38              }
    39          };
    40      }
    41
    42      public static BooleanExpression createAND(BooleanExpression lvalue, BooleanExpression rvalue) {
    43          return new LogicExpression(lvalue, rvalue) {
    44              protected Object evaluate(Boolean lv, Boolean rv) {
    45                  return lv.booleanValue() && rv.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
    46              }
    47
    48              public String getExpressionSymbol() {
    49                  return "AND";
    50              }
    51          };
    52      }
    53
    54      /***
    55       * @param left
    56       * @param right
    57       */
    58      public LogicExpression(BooleanExpression left, BooleanExpression right) {
    59          super(left, right);
    60      }
    61
    62      public Object evaluate(Message message) throws JMSException {
    63          Boolean lv = (Boolean) left.evaluate(message);
    64          if (lv == null) {
    65              return null;
    66          }
    67          Boolean rv = (Boolean) right.evaluate(message);
    68          if (rv == null) {
    69              return null;
    70          }
    71          return evaluate(lv, rv);
    72      }
    73
    74      abstract protected Object evaluate(Boolean lv, Boolean rv);
    75
    76  }