1 23 24 package org.objectweb.medor.filter.lib; 25 26 import org.objectweb.jorm.type.api.PType; 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.lib.BasicBinaryOperator; 34 import org.objectweb.medor.expression.lib.BasicVariableOperand; 35 import org.objectweb.medor.filter.api.FieldOperand; 36 import org.objectweb.medor.type.lib.PTypeSpaceMedor; 37 38 import java.util.Collection ; 39 import java.util.Iterator ; 40 import java.util.Map ; 41 42 47 public class InCollection extends BasicBinaryOperator { 48 49 52 private PType elemType; 53 54 55 public InCollection(FieldOperand left, Operand right, 56 PType elemType) { 57 super(PTypeSpaceMedor.BOOLEAN, left, right); 58 this.elemType = elemType; 59 } 60 61 public Object clone(Object clone, Map obj2clone) throws CloneNotSupportedException { 62 clone = super.clone(clone, obj2clone); 63 ((InCollection) clone).elemType = elemType; 64 return clone; 65 } 66 67 70 public PType getElemType() { 71 return elemType; 72 } 73 74 public Operand evaluate(ParameterOperand[] pos, Object o) 75 throws ExpressionException { 76 try { 77 expressions[0].evaluate(pos, o); 78 Collection c = null; 79 if (expressions[1] instanceof ParameterOperand) { 80 String pn = ((ParameterOperand) expressions[1]).getName(); 81 if (pos == null || pos.length == 0) 82 throw new ExpressionException("No Parameter"); 83 int i = 0; 84 while (i < pos.length && !pn.equals(pos[i].getName())) 85 i++; 86 if (i < pos.length) 87 c = (Collection ) pos[i].getObject(); 88 else 89 throw new ExpressionException("Parameter " + pn + " not found"); 90 } else 91 c = (Collection ) ((Operand) expressions[1]).getObject(); 92 Iterator it = c.iterator(); 93 boolean in = false; 94 Object obj = ((FieldOperand)expressions[0]).getObject(); 95 while (it.hasNext() && !in) 96 in = it.next().equals(obj); 97 result.setValue(in); 98 } 99 catch (NullPointerException e) { 100 throw new IllegalStateException ("Unevaluable Expression: Not compiled"); 102 } 103 return result; 104 } 105 106 public Operand compileExpression() 107 throws TypingException, MalformedExpressionException { 108 if ((expressions[0] != null) && (expressions[0] != null)) { 109 result = new BasicVariableOperand(type); 110 verified = true; 111 } 112 else 113 throw new MalformedExpressionException("null children value"); 115 return result; 116 } 117 118 public String getOperatorString() { 119 return Operator.IN; 120 } 121 } 122 | Popular Tags |