/* * (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); } }
@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); } }
@Override public void setImage(String image) { if (!Validation.isIdentifier(image)) { throw new ELException(MessageFactory.get("error.identifier.notjava", image)); } this.image = image; }
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; }
@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)); } }
@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)); }