1 46 package org.mr.api.jms.selector.syntax; 47 48 import javax.jms.Message ; 49 50 51 57 abstract class LogicalOperator extends BinaryOperator { 58 59 66 protected LogicalOperator(final String operator, final Expression leftHand,final Expression rightHand) { 67 super(operator, leftHand, rightHand); 68 } 70 71 78 public MantaObject evaluate(final Message msg) throws TypeMismatchException { 79 80 MantaBoolean result = null; 81 MantaObject leftHand = left().evaluate(msg); 82 83 if (leftHand != null) { 84 MantaObject rightHand = right().evaluate(msg); 85 if (rightHand!= null) { 86 checkTypes(leftHand.type(), rightHand.type()); 87 result = evaluate(leftHand, rightHand); 88 } } return result; 91 } 93 94 101 protected MantaBoolean evaluate(final MantaObject leftHand, final MantaObject rightHand) { 102 return null; 103 } 105 106 113 protected void checkTypes(final Type leftHand, final Type rightHand) throws TypeMismatchException { 114 115 if (leftHand!= rightHand) { 116 StringBuffer msg = new StringBuffer (); 117 msg.append("expecting a "); 118 msg.append(leftHand); 119 msg.append(" expression for operator "); 120 msg.append(operator()); 121 msg.append(", found a "); 122 msg.append(rightHand); 123 124 throw new TypeMismatchException(msg.toString()); 125 } }} 129 | Popular Tags |