1 23 24 package org.objectweb.medor.filter.lib; 25 26 import org.objectweb.medor.api.UnevaluableExpressionException; 27 import org.objectweb.medor.expression.api.ExpressionException; 28 import org.objectweb.medor.expression.api.MalformedExpressionException; 29 import org.objectweb.medor.expression.api.Operator; 30 import org.objectweb.medor.expression.api.ParameterOperand; 31 import org.objectweb.medor.expression.api.TypingException; 32 import org.objectweb.medor.expression.api.Operand; 33 import org.objectweb.medor.expression.api.Expression; 34 import org.objectweb.medor.expression.lib.BasicVariableOperand; 35 import org.objectweb.medor.expression.lib.BasicOperator; 36 import org.objectweb.medor.filter.api.FieldOperand; 37 import org.objectweb.medor.query.api.QueryLeaf; 38 import org.objectweb.medor.query.api.QueryTree; 39 import org.objectweb.medor.query.api.QueryTreeField; 40 import org.objectweb.medor.type.lib.PTypeSpaceMedor; 41 42 import java.util.List ; 43 44 70 public class MemberOf extends BasicOperator implements Operator { 71 72 81 public MemberOf(List left, List right) throws MalformedExpressionException { 82 super(PTypeSpaceMedor.BOOLEAN); 83 int size = left.size(); 84 if (right.size() != size) 86 throw new MalformedExpressionException( 87 "Left list has size " + size + 88 " whereas right list has size " + right.size() + 89 ". They should be the same."); 90 expressions = new Expression[size * 2]; 93 for(int i=0; i<size; i++) { 94 expressions[i] = (Expression) left.get(i); 95 expressions[i + size] = (Expression) right.get(i); 96 if (expressions[i] instanceof FieldOperand) { 97 QueryTree qt1 = ((QueryTreeField) ((FieldOperand)expressions[i]).getField()) 98 .getQueryTree(); 99 QueryTree qt2 = ((QueryTreeField) ((FieldOperand)expressions[i + size]).getField()) 100 .getQueryTree(); 101 if (!(qt1 instanceof QueryLeaf) && (qt1 == qt2)) 102 throw new MalformedExpressionException( 103 "The MemberOf fields may not be built on the same QueryTree " + qt1); 104 } 105 } 106 } 107 108 public Operand evaluate(ParameterOperand[] pos, Object o) 110 throws ExpressionException { 111 throw new UnevaluableExpressionException( 113 "Unevaluable Expression: MemberOf currently not implemented"); 114 } 115 116 public Operand compileExpression() 117 throws TypingException, MalformedExpressionException { 118 if (expressions != null) { 119 result = new BasicVariableOperand(type); 120 verified = true; 121 } 122 else 123 throw new MalformedExpressionException("null children value"); 125 return result; 126 } 127 128 public Operand getResult() throws IllegalStateException { 129 if (verified) { 130 return result; 131 } 132 else 133 throw new IllegalStateException ("Can't get result of an uncompiled expression"); 134 } 135 136 public String getOperatorString() { 138 return Operator.MEMBEROF; 139 } 140 } 141 | Popular Tags |