1 23 24 package org.objectweb.medor.filter.lib; 25 26 import org.objectweb.medor.api.MedorException; 27 import org.objectweb.medor.expression.api.ExpressionException; 28 import org.objectweb.medor.expression.api.MalformedExpressionException; 29 import org.objectweb.medor.expression.api.ParameterOperand; 30 import org.objectweb.medor.expression.api.Operand; 31 import org.objectweb.medor.expression.api.Expression; 32 import org.objectweb.medor.expression.lib.BasicBinaryOperator; 33 import org.objectweb.medor.expression.lib.BasicVariableOperand; 34 import org.objectweb.medor.filter.api.BelongOperator; 35 import org.objectweb.medor.tuple.api.Tuple; 36 import org.objectweb.medor.tuple.api.TupleCollection; 37 import org.objectweb.medor.type.lib.PTypeSpaceMedor; 38 import org.objectweb.medor.type.lib.QTypeTuple; 39 40 44 public class BasicBelongOperator 45 extends BasicBinaryOperator 46 implements BelongOperator { 47 48 public BasicBelongOperator() { 49 super(PTypeSpaceMedor.BOOLEAN); 50 } 51 52 public BasicBelongOperator(Expression e0, Expression e1) { 53 super(PTypeSpaceMedor.BOOLEAN, e0, e1); 54 } 55 56 public Operand evaluate(ParameterOperand[] pos, Object o) 57 throws ExpressionException { 58 try { 59 result.setValue( 60 evaluate( 61 (Tuple) (expressions[0].evaluate(pos, o)).getObject(), 62 (TupleCollection) (expressions[1].evaluate(pos, o)).getObject())); 63 } catch (Exception e) { 64 throw new ExpressionException("Unevaluable Expression: Not compiled"); 65 } 66 return result; 67 } 68 69 public boolean evaluate(Tuple tuple, TupleCollection tc) 70 throws MedorException { 71 Tuple element; 72 boolean belong = false; 73 if (tc.isEmpty()) 74 belong = false; 75 else { 76 do { 77 element = tc.getTuple(); 78 belong = equalTuple(element, tuple); 79 } while ((!belong) && (tc.next())); 80 } 81 return belong; 82 } 83 84 private boolean equalTuple(Tuple t1, Tuple t2) throws MedorException { 85 boolean equalOperand = true; 86 if (t1.getSize() == t2.getSize()) { 87 int cpt = 1; 88 while ((cpt < t1.getSize()) && (equalOperand)) { 89 if (t1.getLikeOperand(cpt).getType() == 90 t1.getLikeOperand(cpt).getType()) { 91 switch (t1.getLikeOperand(cpt).getType().getTypeCode()) { 92 case QTypeTuple.TYPECODE_INT: 93 equalOperand = (t1.getInt(cpt) == t2.getInt(cpt)); 94 cpt++; 95 break; 96 case QTypeTuple.TYPECODE_SHORT: 97 equalOperand = 98 (t1.getShort(cpt) == t2.getShort(cpt)); 99 cpt++; 100 break; 101 case QTypeTuple.TYPECODE_BYTE: 102 equalOperand = (t1.getByte(cpt) == t2.getByte(cpt)); 103 cpt++; 104 break; 105 case QTypeTuple.TYPECODE_LONG: 106 equalOperand = (t1.getLong(cpt) == t2.getLong(cpt)); 107 cpt++; 108 break; 109 case QTypeTuple.TYPECODE_DOUBLE: 110 equalOperand = 111 (t1.getDouble(cpt) == t2.getDouble(cpt)); 112 cpt++; 113 break; 114 case QTypeTuple.TYPECODE_BOOLEAN: 115 equalOperand = 116 (t1.getBoolean(cpt) == t2.getBoolean(cpt)); 117 cpt++; 118 break; 119 case QTypeTuple.TYPECODE_FLOAT: 120 equalOperand = 121 (t1.getFloat(cpt) == t2.getFloat(cpt)); 122 cpt++; 123 break; 124 case QTypeTuple.TYPECODE_STRING: 125 equalOperand = 126 (t1.getString(cpt).equalsIgnoreCase(t2.getString(cpt))); 127 cpt++; 128 break; 129 case QTypeTuple.TYPECODE_BIGDECIMAL: 130 equalOperand = 131 (t1.getBigDecimal(cpt).equals(t2.getBigDecimal(cpt))); 132 cpt++; 133 break; 134 case QTypeTuple.TYPECODE_BIGINTEGER: 135 equalOperand = 136 (t1.getBigInteger(cpt).equals(t2.getBigInteger(cpt))); 137 cpt++; 138 break; 139 case QTypeTuple.TYPECODE_CHAR: 140 equalOperand = (t1.getChar(cpt) == t2.getChar(cpt)); 141 cpt++; 142 break; 143 case QTypeTuple.TYPECODE_DATE: 144 equalOperand = 145 ((t1.getDate(cpt).compareTo(t2.getDate(cpt)) == 0)); 146 cpt++; 147 break; 148 149 159 } 160 } 161 } 162 } 163 return equalOperand; 164 } 165 166 public Operand compileExpression() 167 throws ExpressionException, MalformedExpressionException { 168 if (!verified) { 169 if ((expressions[0] == null) || (expressions[1] == null)) 170 throw new MalformedExpressionException("null children value"); 171 else { 172 expressions[0].compileExpression(); 173 expressions[1].compileExpression(); 174 verified = true; 177 result = new BasicVariableOperand(PTypeSpaceMedor.BOOLEAN); 178 } 181 } 182 return result; 183 } 184 185 188 public String getOperatorString() { 189 return null; 190 } 191 } 192 | Popular Tags |