/*
* Copyright 2013 Mark Rogers.
*
* Licensed 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 liquibase.util.csv.opencsv.bean;
/**
* Here's an example showing how to use {@link CsvToBean} with a column
* name mapping and line filtering. It assumes that there is a class named
* <code>Feature</code> defined with setters <code>setName(String)</code> and
* <code>setState(String)</code>. The FEATURE_NAME and STATE columns in the
* CSV file will be used. Any additional columns will be ignored. The filter
* will eliminate any lines where the STATE value is "production".
*
* <pre>
* {@code
* private class StateFilter implements CsvToBeanFilter {
*
* private final MappingStrategy strategy;
*
* public NonProductionFilter(MappingStrategy strategy) {
* this.strategy = strategy;
* }
*
* public boolean allowLine(String[] line) {
* int index = strategy.getColumnIndex("STATE");
* String value = line[index];
* boolean result = !"production".equals(value);
* return result;
* }
*
* }
*
* public List<Feature> parseCsv(InputStreamReader streamReader) {
* HeaderColumnNameTranslateMappingStrategy<Feature> strategy = new HeaderColumnNameTranslateMappingStrategy();
* Map<String, String> columnMap = new HashMap();
* columnMap.put("FEATURE_NAME", "name");
* columnMap.put("STATE", "state");
* strategy.setColumnMapping(columnMap);
* strategy.setType(Feature.class);
* CSVReader reader = new CSVReader(streamReader);
* CsvToBeanFilter filter = new StateFilter(strategy);
* return new CsvToBean().parse(strategy, reader, filter);
* }
* }
* </pre>
*/
public interface CsvToBeanFilter {
/**
* Determines if a line from the CSV file will be included in the
* output of {@link CsvToBean}. If the CSV file has a header row, it
* may be useful for implementations to call
* {@link MappingStrategy#getColumnIndex} to identify the correct column
* indexes to examine.
*
* @param line a line of data from the CSV file
* @return true if the line is to be included in the output. Otherwise,
* false.
*/
boolean allowLine(String[] line);
}