1 23 package org.objectweb.medor.expression.lib; 24 25 import org.objectweb.jorm.type.api.PTypeSpace; 26 import org.objectweb.jorm.type.api.PType; 27 import org.objectweb.medor.expression.api.Expression; 28 import org.objectweb.medor.expression.api.ExpressionException; 29 import org.objectweb.medor.expression.api.MalformedExpressionException; 30 import org.objectweb.medor.expression.api.Operand; 31 import org.objectweb.medor.expression.api.Operator; 32 import org.objectweb.medor.expression.api.ParameterOperand; 33 import org.objectweb.medor.expression.api.TypingException; 34 import org.objectweb.medor.expression.api.UnaryOperator; 35 36 public class Length extends BasicUnaryOperator implements UnaryOperator { 37 38 public Length() { 39 } 40 41 public Length(Expression e) { 42 super(PTypeSpace.INT, e); 43 } 44 45 public Operand evaluate(ParameterOperand[] pos, Object o) 46 throws ExpressionException { 47 try { 48 result.setValue(evaluate(expressions[0].evaluate(pos, o).getString())); 49 } catch (NullPointerException e) { 50 throw new ExpressionException("Unevaluable Expression: Not compiled"); 51 } 52 return result; 53 } 54 55 public int evaluate(String op) { 56 return op.length(); 57 } 58 59 public Operand compileExpression() 60 throws ExpressionException, MalformedExpressionException { 61 if (expressions[0] != null) { 62 expressions[0].compileExpression(); 63 if (expressions[0].getType().getTypeCode() == PType.TYPECODE_STRING) { 64 result = new BasicVariableOperand(type); 65 verified = true; 66 } else 67 throw new TypingException("Attempt a String type"); 68 } else 69 throw new MalformedExpressionException("null childeren value"); 71 return result; 72 } 73 74 public String getOperatorString() { 75 return Operator.LENGTH; 76 } 77 } 78 | Popular Tags |