Package cambridge.parser.expressions

Source Code of cambridge.parser.expressions.FunctionExpression

package cambridge.parser.expressions;

import cambridge.Cambridge;
import cambridge.ExpressionEvaluationException;
import cambridge.runtime.ExpressionContext;

import java.util.ArrayList;

/**
* @author Erdinc Yilmazel
* Date: Oct 31, 2009
* Time: 1:29:09 AM
*/
public class FunctionExpression implements CambridgeExpression {
   private final String functionName;
   private CambridgeExpression[] parameters;
   private final FunctionRunner runner;

   public FunctionExpression(String functionName) {
      this.functionName = functionName;
      runner = Cambridge.getInstance().getFunctionRunner(functionName);
   }

   public void setParameters(ArrayList<CambridgeExpression> params) {
      parameters = params.toArray(new CambridgeExpression[params.size()]);
   }

   public Type getType(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      if (o instanceof Boolean) {
         return Type.Boolean;
      }
      if (o instanceof Integer) {
         return Type.Int;
      }
      if (o instanceof Long) {
         return Type.Long;
      }
      if (o instanceof Float) {
         return Type.Float;
      }
      if (o instanceof Double) {
         return Type.Double;
      }
      if (o instanceof String) {
         return Type.String;
      }
      return o == null ? Type.Null : Type.Object;
   }

   public Object eval(ExpressionContext context) throws ExpressionEvaluationException {
      if (runner == null) {
         throw new ExpressionEvaluationException("Unknown function " + functionName);
      }
      return runner.eval(context, parameters);
   }

   public boolean asBoolean(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      return o instanceof Boolean && (Boolean) o;
   }

   public int asInt(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      if (o instanceof Number) {
         return ((Number) o).intValue();
      }
      return 0;
   }

   public float asFloat(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      if (o instanceof Number) {
         return ((Number) o).floatValue();
      }

      return 0;
   }

   public double asDouble(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      if (o instanceof Number) {
         return ((Number) o).doubleValue();
      }
      return 0;
   }

   public long asLong(ExpressionContext context) throws ExpressionEvaluationException {
      Object o = eval(context);
      if (o instanceof Number) {
         return ((Number) o).longValue();
      }
      return 0;
   }

   public String asString(ExpressionContext context) throws ExpressionEvaluationException {
      return eval(context).toString();
   }
}
TOP

Related Classes of cambridge.parser.expressions.FunctionExpression

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.