package com.limegroup.gnutella.gui.search; /** * A filter that takes multiple other filters. */ class CompositeFilter implements TableLineFilter { /** * The underlying filters. */ private TableLineFilter[] delegates; /** * Creates a new CompositeFilter of the specified depth. * By default, all the filters are an AllowFilter. */ CompositeFilter(int depth) { this.delegates = new TableLineFilter[depth]; reset(); } /** * Resets this filter to all AllowFilters. */ public void reset() { for(int i = 0; i < delegates.length; i++) { delegates[i] = AllowFilter.instance(); } } /** * Determines whether or not the specified TableLine * can be displayed. */ public boolean allow(TableLine line) { for (int i=0; i<delegates.length; i++) { if (! delegates[i].allow(line)) return false; } return true; } /** * Sets the filter at the specified depth. */ boolean setFilter(int depth, TableLineFilter filter) { if(delegates[depth].equals(filter)) return false; else { delegates[depth] = filter; return true; } } }