package com.opencsv.validators;
import com.opencsv.exceptions.CsvValidationException;
import java.util.ArrayList;
import java.util.List;
The aggregator's purpose is to collect multiple LineValidator
s and run them against a single line. This way complex validations can be performed. Author: Scott Conway Since: 5.0
/**
* The aggregator's purpose is to collect multiple {@link LineValidator}s and
* run them against a single line.
* This way complex validations can be performed.
*
* @author Scott Conway
* @since 5.0
*/
public class LineValidatorAggregator {
private static final int CAPACITY = 512;
private static final int MULTIPLIER = 3;
private List<LineValidator> validators = new ArrayList<>();
Default constructor.
/**
* Default constructor.
*/
public LineValidatorAggregator() {
}
Add an validator to the aggregator.
Params: - validator – Validator to be added.
/**
* Add an validator to the aggregator.
*
* @param validator Validator to be added.
*/
public void addValidator(LineValidator validator) {
if (validator != null) {
validators.add(validator);
}
}
Runs all LineValidators' LineValidator.isValid(String)
method against the line. This is a short circuit: as soon as one validator returns false
then false
is returned. Params: - line – String to be validated.
Returns: true
if all validators' LineValidator.isValid(String)
methods return true
, false
otherwise.
/**
* Runs all LineValidators' {@link LineValidator#isValid(String)} method against the line.
* This is a short circuit: as soon as one validator returns {@code false}
* then {@code false} is returned.
*
* @param line String to be validated.
* @return {@code true} if all validators'
* {@link LineValidator#isValid(String)} methods return {@code true},
* {@code false} otherwise.
*/
public boolean isValid(final String line) {
return validators.stream().allMatch(v -> v.isValid(line));
}
Runs all LineValidators validate commands and if the string is invalid then it combines all the validation error
messages in a single CsvValidationException.
Params: - line – String to be validated
Throws: - CsvValidationException – Thrown if the string is invalid
/**
* Runs all LineValidators validate commands and if the string is invalid then it combines all the validation error
* messages in a single CsvValidationException.
*
* @param line String to be validated
* @throws CsvValidationException Thrown if the string is invalid
*/
public void validate(String line) throws CsvValidationException {
if (validators.isEmpty()) {
return;
}
StringBuilder combinedExceptionMessage = null;
for (LineValidator validator : validators) {
try {
validator.validate(line);
} catch (CsvValidationException ex) {
if (combinedExceptionMessage == null) {
int length = (ex.getMessage().length() + 2) * MULTIPLIER;
combinedExceptionMessage = new StringBuilder(Math.max(length, CAPACITY));
}
combinedExceptionMessage.append(ex.getMessage()).append("\n");
}
}
if (combinedExceptionMessage != null && combinedExceptionMessage.length() > 0) {
throw new CsvValidationException(combinedExceptionMessage.toString());
}
}
Setter created for unit test.
Params: - validators – - list of validators to use.
/**
* Setter created for unit test.
*
* @param validators - list of validators to use.
*/
void setValidators(List<LineValidator> validators) {
this.validators = validators;
}
}