@Override public Expression parseExpression(String expression) { expression = expression.trim(); Expression exp; int indexOfOpening = expression.indexOf("("); int indexOfClosing = expression.lastIndexOf(")"); if (indexOfOpening > -1 && indexOfClosing > -1) { String tmp = expression.substring(0, indexOfOpening); exp = new Expression(tmp.trim()); try { String subExpressions = expression.substring(indexOfOpening + 1, indexOfClosing); List<Expression> expressions = parseExpressions(subExpressions); exp.setSubExpressions(expressions); } catch (Exception e) { log.error("Error while parsing Expression: %s, indexOfOpening: %s, indexOfClosing: %s, message: %s", expression, indexOfOpening, indexOfClosing, e.getLocalizedMessage()); } } else { exp = new Expression(expression); } return expressionFactory.getExpression(exp); }