private void evaluate2(int from, Record record, StringBuilder buf, ArrayList<Object> results) { if (from >= fields.size()) { results.add(buf.toString()); return; } Object item = fields.get(from); if (item instanceof String) { buf.append(item); evaluate2(from + 1, record, buf, results); } else { String ref = ((Field) item).getName(); if (ref.length() == 0) { buf.append(record.toString()); // @{} means dump string representation of entire record evaluate2(from + 1, record, buf, results); } else { List resolvedValues = record.get(ref); for (Object value : resolvedValues) { StringBuilder buf2 = new StringBuilder(buf); buf2.append(value.toString()); evaluate2(from + 1, record, buf2, results); } } } }
private void evaluate2(int from, Record record, StringBuilder buf, ArrayList<Object> results) { if (from >= fields.size()) { results.add(buf.toString()); return; } Object item = fields.get(from); if (item instanceof String) { buf.append(item); evaluate2(from + 1, record, buf, results); } else { String ref = ((Field) item).getName(); if (ref.length() == 0) { buf.append(record.toString()); // @{} means dump string representation of entire record evaluate2(from + 1, record, buf, results); } else { List resolvedValues = record.get(ref); for (Object value : resolvedValues) { StringBuilder buf2 = new StringBuilder(buf); buf2.append(value.toString()); evaluate2(from + 1, record, buf2, results); } } } }
/** Returns the values of a {@link Record} referred to by the given field expression */ public List evaluate(Record record) { // fast path (not functionally necessary): if (fields.size() == 1) { Object first = fields.get(0); if (first instanceof String) { return Collections.singletonList(first); } else { String ref = ((Field) first).getName(); if (ref.length() != 0) { List resolvedValues = record.get(ref); return resolvedValues; } } } // slow path: ArrayList<Object> results = new ArrayList<Object>(1); evaluate2(0, record, new StringBuilder(), results); return results; }
/** Returns the values of a {@link Record} referred to by the given field expression */ public List evaluate(Record record) { // fast path (not functionally necessary): if (fields.size() == 1) { Object first = fields.get(0); if (first instanceof String) { return Collections.singletonList(first); } else { String ref = ((Field) first).getName(); if (ref.length() != 0) { List resolvedValues = record.get(ref); return resolvedValues; } } } // slow path: ArrayList<Object> results = new ArrayList<Object>(1); evaluate2(0, record, new StringBuilder(), results); return results; }