private void fillValueWithMetadata( final TemplateTree tree, final ValueNode root, final Object metadata, final Map<String, Set<Object>> excluded, final boolean prune, final boolean overwrite) throws ParseException { final List<ValueNode> children = new ArrayList<>(root.children); for (ValueNode node : children) { final ValueNode origNode = new ValueNode(node); final Object obj = getValue(node, metadata, excluded, overwrite); if (obj instanceof Collection && !((Collection) obj).isEmpty()) { final Iterator it = ((Collection) obj).iterator(); int i = node.ordinal; while (it.hasNext()) { Object child = it.next(); node = tree.duplicateNode(origNode, i); if (node.isField()) { node.value = valueToString(node, child, !prune, overwrite); } else { fillValueWithMetadata(tree, node, child, excluded, prune, overwrite); } i++; } } else { if (node.isField()) { node.value = valueToString(node, obj, !prune, overwrite); } else { fillValueWithMetadata(tree, node, obj, excluded, prune, overwrite); } } } }
public boolean isTrue(Env env) throws EvaluationError { int leftVal = left.value(env); int rightVal = right.value(env); switch (op) { case '<': return leftVal < rightVal; case '>': return leftVal > rightVal; case '=': return leftVal == rightVal; default: throw new EvaluationError(String.format("Invalid operator %c", op)); } }
private ValueNode extractSubTreeFromMetadata( final ValueNode root, final Object metadata, final Map<String, Set<Object>> excluded) throws ParseException { if (root.isField()) { root.value = valueToString(root, metadata, false, false); return root; } final List<ValueNode> children = new ArrayList<>(root.children); for (ValueNode node : children) { final ValueNode origNode = new ValueNode(node); final Object obj = getValue(node, metadata, excluded, false); if (obj instanceof Collection && !((Collection) obj).isEmpty()) { final Iterator it = ((Collection) obj).iterator(); int i = node.ordinal; boolean first = true; while (it.hasNext()) { Object child = it.next(); if (!first) { node = new ValueNode(origNode, root, i); } if (node.isField()) { node.value = valueToString(node, child, false, false); } else { extractSubTreeFromMetadata(node, child, excluded); } first = false; i++; } } else { if (node.isField()) { node.value = valueToString(node, obj, false, false); } else { extractSubTreeFromMetadata(node, obj, excluded); } } } return root; }