1 23 package org.objectweb.medor.expression.lib; 24 25 import org.objectweb.jorm.type.api.PType; 26 import org.objectweb.jorm.type.api.PTypeSpace; 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 35 40 public class Substring extends BasicOperator { 41 42 50 public Substring(Expression inputString, Expression start, 51 Expression length) { 52 super(PTypeSpace.STRING, new Expression[]{inputString, start, length}); 53 } 54 55 public Substring() { 56 super(PTypeSpace.STRING); 57 } 58 59 public Operand evaluate(ParameterOperand[] pos, Object o) 60 throws ExpressionException { 61 try { 62 result.setValue( 63 evaluate( 64 getExpression(0).evaluate(pos, o).getString(), 65 getExpression(1).evaluate(pos, o).getInt(), 66 getExpression(2).evaluate(pos, o).getInt())); 67 } 68 catch (NullPointerException e) { 69 throw new ExpressionException("Unevaluable Expression: May not be compiled"); 71 } 72 return result; 73 } 74 75 76 public Operand compileExpression() 77 throws ExpressionException, MalformedExpressionException { 78 if ((getExpression(0) != null) && (getExpression(1) != null) && (getExpression(2) != null)) { 79 getExpression(0).compileExpression(); 80 getExpression(1).compileExpression(); 81 getExpression(2).compileExpression(); 82 if ((getExpression(0).getType().getTypeCode() == 83 PType.TYPECODE_STRING) && 84 (getExpression(1).getType().isa(PTypeSpace.STRING)) && 85 (getExpression(2).getType().isa(PTypeSpace.INT))) { 86 result = new BasicVariableOperand(type); 87 verified = true; 88 } else 89 throw new TypingException("Attempt Arg Types: String, int , int"); 91 } else 92 throw new MalformedExpressionException("Null children value"); 94 return result; 95 } 96 97 public String evaluate(String op, int start, int length) { 98 return op.substring(start-1, length + start-1); 99 } 100 101 public String getOperatorString() { 102 return Operator.SUBSTRING; 103 } 104 } 105 | Popular Tags |