package in.twizmwaz.cardinal.module.modules.filter.type.logic; import in.twizmwaz.cardinal.module.ModuleCollection; import in.twizmwaz.cardinal.module.modules.filter.FilterModule; import in.twizmwaz.cardinal.module.modules.filter.FilterState; import in.twizmwaz.cardinal.module.modules.filter.parsers.ChildrenFilterParser; import static in.twizmwaz.cardinal.module.modules.filter.FilterState.*; public class AllFilter extends FilterModule { private final ModuleCollection<FilterModule> children; public AllFilter(final String name, final ModuleCollection<FilterModule> children) { super(name, null); this.children = children; } public AllFilter(final ChildrenFilterParser parser) { this(parser.getName(), parser.getChildren()); } @Override public FilterState evaluate(final Object... objects) { boolean abstain = true; for (FilterModule child : children) { if (!child.evaluate(objects).equals(ABSTAIN)) abstain = false; if (child.evaluate(objects).equals(DENY)) { return DENY; } } if (abstain) return (getParent() == null ? ABSTAIN : getParent().evaluate(objects)); return ALLOW; } }