/* * This file is part of the Wayback archival access software * (http://archive-access.sourceforge.net/projects/wayback/). * * Licensed to the Internet Archive (IA) by one or more individual * contributors. * * The IA licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.archive.wayback.util; import java.util.ArrayList; import java.util.Collection; /** * ObjectFilterChain implements AND logic to chain together multiple * ObjectFilters into a composite. ABORT and EXCLUDE short circuit the chain, * all filters must INCLUDE for inclusion. * * @author brad * @version $Date$, $Revision$ * @param <E> */ public class ObjectFilterChain<E> implements ObjectFilter<E> { private ArrayList<ObjectFilter<E>> filters = null; /** * Constructor */ public ObjectFilterChain() { this.filters = new ArrayList<ObjectFilter<E>>(); } /** * @return the filters */ public ArrayList<ObjectFilter<E>> getFilters() { return filters; } /** * @param filters the filters to set */ public void setFilters(ArrayList<ObjectFilter<E>> filters) { this.filters = filters; } /** * @param filter to be added to the chain. filters are processed in the * order they are added to the chain. */ public void addFilter(ObjectFilter<E> filter) { filters.add(filter); } public void addFilters(Collection<ObjectFilter<E>> list) { filters.addAll(list); } /* (non-Javadoc) * @see org.archive.wayback.cdx.filter.RecordFilter#filterRecord(org.archive.wayback.cdx.CDXRecord) */ public int filterObject(E o) { int size = filters.size(); int result = FILTER_ABORT; for (int i = 0; i < size; i++) { result = filters.get(i).filterObject(o); if (result == FILTER_ABORT) { break; } else if (result == FILTER_EXCLUDE) { break; } } return result; } }