package context.arch.intelligibility.reducers; import java.util.ArrayList; import java.util.List; import context.arch.intelligibility.expression.Parameter; import context.arch.intelligibility.expression.Reason; import context.arch.intelligibility.reducers.ConjunctionReducer; import context.arch.storage.Attributes; /** * Conjunction reducer to reduce expressions to a pre-selected list of attribute names. * It assumes a conjunction of Parameters (not Values); * child Expressions that are not Parameters (or subclasses of them) are ignored. * @author Brian Y. Lim * */ public class FilteredCReducer extends ConjunctionReducer { protected List<String> names; /** * @param attributes from which to extract names */ public FilteredCReducer(Attributes attributes) { names = new ArrayList<String>(); for (String name : attributes.keySet()) { names.add(name); } } /** * @param attributeNames */ public FilteredCReducer(String ... attributeNames) { names = new ArrayList<String>(); for (String name : attributeNames) { names.add(name); } } /** * @param attributeNames */ public FilteredCReducer(List<String> attributeNames) { this.names = attributeNames; } @Override public Reason apply(Reason original) { Reason reduced = new Reason(); for (Parameter<?> param : original) { if (names.contains(param.getName())) { reduced.add(param); } } return reduced; } }