/**
* AnalyzerBeans
* Copyright (C) 2014 Neopost - Customer Information Management
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.eobjects.analyzer.beans.api;
import org.eobjects.analyzer.data.InputRow;
/**
* Interface for components that filter/categorize rows.
*
* A filter will process incoming rows and label them with a category. A
* category is defined as a value in an enum. When a row is categorized, this
* category can then be used to set up a requirement for succeeding row
* processing.
*
* A sub-interface of Filter exists, {@link QueryOptimizedFilter}, which allows
* filter functionality to be pushed down to the query in certain circumstances
* where it is desirable to do so.
*
* @param <C>
* an enum type with the available categories
*/
public interface Filter<C extends Enum<C>> {
/**
* Categorizes/filters a single row.
*
* @param inputRow
* the row to categorize.
* @return an enum representing the category applied to the row.
*/
public C categorize(InputRow inputRow);
}