예제 #1
0
  /*
   * (non-Javadoc)
   *
   * @see com.sun.el.parser.NodeVisitor#visit(com.sun.el.parser.Node)
   */
  public void visit(Node node) throws ELException {
    if (node instanceof AstFunction) {

      AstFunction funcNode = (AstFunction) node;

      if (this.fnMapper == null) {
        throw new ELException(MessageFactory.get("error.fnMapper.null"));
      }
      Method m = fnMapper.resolveFunction(funcNode.getPrefix(), funcNode.getLocalName());
      if (m == null) {
        throw new ELException(
            MessageFactory.get("error.fnMapper.method", funcNode.getOutputName()));
      }
      int pcnt = m.getParameterTypes().length;
      if (node.jjtGetNumChildren() != pcnt) {
        throw new ELException(
            MessageFactory.get(
                "error.fnMapper.paramcount",
                funcNode.getOutputName(),
                "" + pcnt,
                "" + node.jjtGetNumChildren()));
      }
    } else if (node instanceof AstIdentifier && this.varMapper != null) {
      String variable = ((AstIdentifier) node).getImage();

      // simply capture it
      this.varMapper.resolveVariable(variable);
    }
  }
예제 #2
0
  @SuppressWarnings({"rawtypes", "unchecked"})
  private Optional compare(boolean isMax) {
    Comparable result = null;

    if (iterator.hasNext()) {
      Object obj = iterator.next();
      if ((obj instanceof Comparable)) {
        result = (Comparable) obj;
      } else {
        throw new ELException(MessageFactory.get("stream.compare.notComparable"));
      }
    }

    while (iterator.hasNext()) {
      Object obj = iterator.next();
      if ((obj instanceof Comparable)) {
        if (isMax && ((Comparable) obj).compareTo(result) > 0) {
          result = (Comparable) obj;
        } else if (!isMax && ((Comparable) obj).compareTo(result) < 0) {
          result = (Comparable) obj;
        }
      } else {
        throw new ELException(MessageFactory.get("stream.compare.notComparable"));
      }
    }

    if (result == null) {
      return Optional.EMPTY;
    } else {
      return new Optional(result);
    }
  }
예제 #3
0
 @Override
 public void setImage(String image) {
   if (!Validation.isIdentifier(image)) {
     throw new ELException(MessageFactory.get("error.identifier.notjava", image));
   }
   this.image = image;
 }
예제 #4
0
  private static final Node createNodeInternal(String expr) throws ELException {
    if (expr == null) {
      throw new ELException(MessageFactory.get("error.null"));
    }

    Node n = cache.get(expr);
    if (n == null) {
      try {
        n = (new ELParser(new StringReader(expr))).CompositeExpression();

        // validate composite expression
        if (n instanceof AstCompositeExpression) {
          int numChildren = n.jjtGetNumChildren();
          if (numChildren == 1) {
            n = n.jjtGetChild(0);
          } else {
            Class type = null;
            Node child = null;
            for (int i = 0; i < numChildren; i++) {
              child = n.jjtGetChild(i);
              if (child instanceof AstLiteralExpression) continue;
              if (type == null) type = child.getClass();
              else {
                if (!type.equals(child.getClass())) {
                  throw new ELException(MessageFactory.get("error.mixed", expr));
                }
              }
            }
          }
        }
        if (n instanceof AstDeferredExpression || n instanceof AstDynamicExpression) {
          n = n.jjtGetChild(0);
        }
        cache.put(expr, n);
      } catch (ParseException pe) {
        throw new ELException("Error Parsing: " + expr, pe);
      }
    }
    return n;
  }
예제 #5
0
 @Override
 public void setValue(EvaluationContext ctx, Object value) throws ELException {
   VariableMapper varMapper = ctx.getVariableMapper();
   if (varMapper != null) {
     ValueExpression expr = varMapper.resolveVariable(this.image);
     if (expr != null) {
       expr.setValue(ctx.getELContext(), value);
       return;
     }
   }
   ctx.setPropertyResolved(false);
   ctx.getELResolver().setValue(ctx, null, this.image, value);
   if (!ctx.isPropertyResolved()) {
     throw new PropertyNotFoundException(
         MessageFactory.get("error.resolver.unhandled.null", this.image));
   }
 }
예제 #6
0
 @Override
 public boolean isReadOnly(EvaluationContext ctx) throws ELException {
   VariableMapper varMapper = ctx.getVariableMapper();
   if (varMapper != null) {
     ValueExpression expr = varMapper.resolveVariable(this.image);
     if (expr != null) {
       return expr.isReadOnly(ctx.getELContext());
     }
   }
   ctx.setPropertyResolved(false);
   boolean result = ctx.getELResolver().isReadOnly(ctx, null, this.image);
   if (!ctx.isPropertyResolved()) {
     throw new PropertyNotFoundException(
         MessageFactory.get("error.resolver.unhandled.null", this.image));
   }
   return result;
 }
  protected final Number coerce(final Object obj) {

    if (isNumber(obj)) {
      return coerce((Number) obj);
    }
    if (obj instanceof String) {
      return coerce((String) obj);
    }
    if (obj == null || "".equals(obj)) {
      return coerce(ZERO);
    }

    if (obj instanceof Character) {
      return coerce(Short.valueOf((short) ((Character) obj).charValue()));
    }

    throw new IllegalArgumentException(
        MessageFactory.get("error.convert", obj, obj.getClass(), "Number"));
  }
 @Override
 public void setValue(ELContext context, Object value) {
   throw new PropertyNotWritableException(
       MessageFactory.get("error.value.literal.write", this.value));
 }