@Override public List<PropertyEntry> extractProperties(List<Expression> expressions) { return expressions.stream(). filter(expression -> PROPERTY_EXPRESSION.equals(expression.getExpressionName()) && expression.getSubExpressions().length > 0). map(expression -> { List<String> meanings = new LinkedList<>(); Value value = new Value(); extractMeanings(meanings, value, expression.getSubExpressions()[0]); return new PropertyEntry(meanings, value.getExpressionName()); }).collect(Collectors.toCollection(LinkedList::new)); }
@Override public Expression getExpression(Expression exp) { try { if (exp != null) { if (expressions.containsKey(exp.getExpressionName())) { Expression tmpExp = exp; exp = (Expression) expressions.get(exp.getExpressionName()).clone(); exp.setSubExpressions(tmpExp.getSubExpressions()); } else { if (exp.getSubExpressions().length == 0 && CharacterUtilities.isNumber(exp.getExpressionName(), false)) { exp = new Value(exp.getExpressionName()); } else { exp = new Expression(exp.getExpressionName(), exp.getSubExpressions()); } } exp.setDomain(exp.getDomain()); } } catch (CloneNotSupportedException e) { log.error(e.getLocalizedMessage(), e); } return exp; } }
public Double toDouble() { if (!isNumeric()) return Double.NaN; return Double.parseDouble(expressionName); }
private void extractMeanings(List<String> meanings, Value value, Expression expression) { if (expression.getSubExpressions().length > 0) { meanings.add(expression.getExpressionName()); extractMeanings(meanings, value, expression.getSubExpressions()[0]); } else { value.setExpressionName(expression.getExpressionName()); } } }