package ca.uhn.fhir.narrative.template.nodes;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import ca.uhn.fhir.narrative.template.filters.Filter;
public class FilterNode implements LNode {
private Filter filter;
private List<LNode> params;
public FilterNode(String filterName, Filter filter) {
if (filter == null) {
throw new IllegalArgumentException("no filter available named: " + filterName);
}
this.filter = filter;
this.params = new ArrayList<LNode>();
}
public void add(LNode param) {
params.add(param);
}
public Object apply(Object value, Map<String, Object> variables) {
List<Object> paramValues = new ArrayList<Object>();
for (LNode node : params) {
paramValues.add(node.render(variables));
}
return filter.apply(value, paramValues.toArray(new Object[paramValues.size()]));
}
@Override
public Object render(Map<String, Object> context) {
throw new RuntimeException("cannot render a filter");
}
}