package fr.openwide.core.wicket.more.link.descriptor.parameter.validator; import java.util.Collection; import org.apache.wicket.model.IModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.lang.Args; import com.google.common.collect.ImmutableList; @SuppressWarnings("rawtypes") public class SimpleMandatoryCollectionLinkParameterValidator implements ILinkParameterValidator { private static final long serialVersionUID = 7015800524943994171L; private final Collection<String> parameterNames; private final Collection<? extends IModel<? extends Collection>> parameterModels; public SimpleMandatoryCollectionLinkParameterValidator(String parameterName, IModel<? extends Collection> parameterModel) { this(ImmutableList.of(parameterName), ImmutableList.of(parameterModel)); } public SimpleMandatoryCollectionLinkParameterValidator(Collection<String> parameterNames, Collection<? extends IModel<? extends Collection>> parameterModels) { Args.notNull(parameterNames, "parameterNames"); Args.notNull(parameterModels, "parameterModels"); this.parameterNames = ImmutableList.copyOf(parameterNames); this.parameterModels = ImmutableList.copyOf(parameterModels); } @Override public void validateSerialized(PageParameters parameters, LinkParameterValidationErrorCollector collector) { for (String parameterName : parameterNames) { if (parameters.get(parameterName).isNull()) { collector.addError(String.format("Mandatory parameter '%s' was missing.", parameterName)); } } } @Override public void validateModel(LinkParameterValidationErrorCollector collector) { for (IModel<? extends Collection> parameterModel : parameterModels) { Collection<?> object = parameterModel.getObject(); if (object == null || object.isEmpty()) { collector.addError(String.format("A mandatory parameter model object for parameter names '%s' was null or empty.", parameterNames)); } } } @Override public void detach() { for (IModel<?> parameterModel : parameterModels) { parameterModel.detach(); } } }