1 46 package org.mr.api.jms.selector.syntax; 47 48 import java.util.HashSet ; 49 50 import org.mr.api.jms.selector.parser.SelectorTokenTypes; 51 52 53 54 58 public final class DefaultExpressionFactory implements ExpressionFactory { 59 60 70 public Expression binaryOperator(final int operator, final Expression left,final Expression right) throws SelectorException { 71 72 Expression result = null; 73 74 switch (operator) { 75 case SelectorTokenTypes.LITERAL_and: 76 result = new And(left, right); 77 break; 78 case SelectorTokenTypes.LITERAL_or: 79 result = new Or(left, right); 80 break; 81 case SelectorTokenTypes.EQUAL: 82 result = new Equal(left, right); 83 break; 84 case SelectorTokenTypes.NOT_EQUAL: 85 result = new NotEqual(left, right); 86 break; 87 case SelectorTokenTypes.LT: 88 result = new Less(left, right); 89 break; 90 case SelectorTokenTypes.GT: 91 result = new Greater(left, right); 92 break; 93 case SelectorTokenTypes.LE: 94 result = new LessEqual(left, right); 95 break; 96 case SelectorTokenTypes.GE: 97 result = new GreaterEqual(left, right); 98 break; 99 case SelectorTokenTypes.PLUS: 100 result = new Add(left, right); 101 break; 102 case SelectorTokenTypes.MINUS: 103 result = new Subtract(left, right); 104 break; 105 case SelectorTokenTypes.MULTIPLY: 106 result = new Multiply(left, right); 107 break; 108 case SelectorTokenTypes.DIVIDE: 109 result = new Divide(left, right); 110 break; 111 default: 112 throw new SelectorException("Unknown binary operator type: " + operator); 113 } return result; 115 } 117 118 126 public Expression unaryOperator(final int operator,final Expression operand) throws SelectorException { 127 128 Expression result = null; 129 130 switch (operator) { 131 case SelectorTokenTypes.LITERAL_not: 132 result = new Not(operand); 133 break; 134 case SelectorTokenTypes.UNARY_MINUS: 135 result = new UnaryMinus(operand); 136 break; 137 default: 138 throw new SelectorException("Unknown unary operator type: " + operator); 139 } return result; 141 } 143 144 151 public Expression identifier(final String name) throws SelectorException { 152 return new Identifier(name); 153 } 155 156 163 public Expression isNull(final Expression identifier) 164 throws SelectorException { 165 return new IsExpression((Identifier) identifier); 166 } 168 169 178 public Expression like(final Expression identifier, final String pattern,final String escape) throws SelectorException { 179 return new LikeExpression((Identifier) identifier, pattern, escape); 180 } 182 183 194 public Expression between(final Expression num1, final Expression num2,final Expression num3) throws SelectorException { 195 return new BetweenExpression(num1, num2, num3); 196 } 198 199 207 public Expression in(final Expression identifier, final HashSet set) throws SelectorException { 208 return new InExpression((Identifier) identifier, set); 209 } 211 219 public Expression literal(final int type, final String text) throws SelectorException { 220 221 Expression result = null; 222 223 switch (type) { 224 case SelectorTokenTypes.NUM_FLOAT: 225 result = Literal.approxNumericLiteral(text); 226 break; 227 case SelectorTokenTypes.NUM_INT: 228 result = Literal.exactNumericLiteral(text); 229 break; 230 case SelectorTokenTypes.STRING_LITERAL: 231 result = Literal.stringLiteral(text); 232 break; 233 case SelectorTokenTypes.LITERAL_true: 234 result = Literal.booleanLiteral(true); 235 break; 236 case SelectorTokenTypes.LITERAL_false: 237 result = Literal.booleanLiteral(false); 238 break; 239 default: 240 throw new SelectorException("Unknown literal type: " + type); 241 } 243 return result; 244 }} | Popular Tags |