package fr.openwide.core.wicket.more.link.descriptor.parameter.validator;
import java.io.Serializable;
import java.util.Collection;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.lang.Args;
import com.google.common.collect.ImmutableList;
public final class LinkParameterValidators {
private LinkParameterValidators() { }
/**
* @return True if the parameters model is valid according to the validator, false otherwise.
* @throws NullPointerException if <code>validator</code> is null.
*/
public static boolean isModelValid(ILinkParameterValidator validator) {
Args.notNull(validator, "validator");
LinkParameterValidationErrorCollector collector = new LinkParameterValidationErrorCollector();
validator.validateModel(collector);
Collection<ILinkParameterValidationErrorDescription> errors = collector.getErrors();
return errors.isEmpty();
}
/**
* Checks that parameters model is valid according to a validator, throwing a {@link LinkParameterModelValidationException} if it is not.
* @throws LinkParameterModelValidationException if the parameters model is invalid according to the validator.
* @throws NullPointerException if <code>validator</code> is null.
*/
public static void checkModel(ILinkParameterValidator validator) throws LinkParameterModelValidationException {
Args.notNull(validator, "validator");
LinkParameterValidationErrorCollector collector = new LinkParameterValidationErrorCollector();
validator.validateModel(collector);
Collection<ILinkParameterValidationErrorDescription> errors = collector.getErrors();
if ( ! errors.isEmpty() ) {
throw new LinkParameterModelValidationException(errors);
}
}
/**
* @return True if the serialized form of the parameters is valid according to the validator, false otherwise.
* @throws NullPointerException if <code>parameters</code> or <code>validator</code> is null.
*/
public static boolean isSerializedValid(PageParameters parameters, ILinkParameterValidator validator) {
Args.notNull(parameters, "parameters");
Args.notNull(validator, "validator");
LinkParameterValidationErrorCollector collector = new LinkParameterValidationErrorCollector();
validator.validateSerialized(parameters, collector);
Collection<ILinkParameterValidationErrorDescription> errors = collector.getErrors();
return errors.isEmpty();
}
/**
* Checks that the serialized form of the parameters is valid according to a validator, throwing a {@link LinkParameterSerializedFormValidationException} if it is not.
* @throws LinkParameterSerializedFormValidationException if the serialized form of the parameters is invalid according to the validator.
* @throws NullPointerException if <code>parameters</code> or <code>validator</code> is null.
*/
public static void checkSerialized(PageParameters parameters, ILinkParameterValidator validator) throws LinkParameterSerializedFormValidationException {
Args.notNull(parameters, "parameters");
Args.notNull(validator, "validator");
LinkParameterValidationErrorCollector collector = new LinkParameterValidationErrorCollector();
validator.validateSerialized(parameters, collector);
Collection<ILinkParameterValidationErrorDescription> errors = collector.getErrors();
if ( ! errors.isEmpty() ) {
throw new LinkParameterSerializedFormValidationException(parameters, errors);
}
}
/**
* Creates a validator that performs the validation sequentially with each validator in the given order.
* <p>The resulting validator is {@link Serializable} if <code>validators</code> is Serializable.
* @param validators The validators to be chained
* @return A validator chaining the given validators. If empty, no validation will be performed and no {@link ILinkParameterValidationErrorDescription error} will ever be reported.
* @throws NullPointerException if <code>validators</code> is null.
*/
public static ILinkParameterValidator chain(Iterable<? extends ILinkParameterValidator> validators) {
Args.notNull(validators, "validators");
return new ChainedParameterValidator(validators);
}
private static class ChainedParameterValidator implements ILinkParameterValidator {
private static final long serialVersionUID = 1L;
private final Iterable<? extends ILinkParameterValidator> validators;
public ChainedParameterValidator(Iterable<? extends ILinkParameterValidator> validators) {
super();
this.validators = ImmutableList.copyOf(validators);
}
@Override
public void validateSerialized(PageParameters parameters, LinkParameterValidationErrorCollector collector) {
for (ILinkParameterValidator validator : validators) {
validator.validateSerialized(parameters, collector);
}
}
@Override
public void validateModel(LinkParameterValidationErrorCollector collector) {
for (ILinkParameterValidator validator : validators) {
validator.validateModel(collector);
}
}
@Override
public void detach() {
for (ILinkParameterValidator validator : validators) {
validator.detach();
}
}
}
}