package fr.openwide.core.wicket.more.link.descriptor.builder.impl.parameter; import java.util.Collection; import java.util.List; import org.apache.wicket.model.IDetachable; import org.javatuples.Pair; import org.javatuples.Tuple; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import fr.openwide.core.wicket.more.link.descriptor.parameter.mapping.ILinkParameterMappingEntry; import fr.openwide.core.wicket.more.link.descriptor.parameter.mapping.factory.ILinkParameterMappingEntryFactory; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.ILinkParameterValidator; import fr.openwide.core.wicket.more.markup.html.factory.IDetachableFactory; public class LinkParameterMappingEntryBuilder<TTuple extends Tuple> implements IDetachableFactory < TTuple, Pair<ILinkParameterMappingEntry, Collection<ILinkParameterValidator>> > { private static final long serialVersionUID = -2030460237589017596L; private final ILinkParameterMappingEntryFactory<TTuple> factory; private boolean mandatory = false; private final List<ILinkParameterValidator> parameterValidators = Lists.newLinkedList(); public LinkParameterMappingEntryBuilder(ILinkParameterMappingEntryFactory<TTuple> factory) { super(); this.factory = factory; } @Override public Pair<ILinkParameterMappingEntry, Collection<ILinkParameterValidator>> create(TTuple parameters) { ILinkParameterMappingEntry entry = factory.create(parameters); ImmutableList.Builder<ILinkParameterValidator> validatorsListBuilder = ImmutableList.<ILinkParameterValidator>builder(); if (mandatory) { validatorsListBuilder.add(entry.mandatoryValidator()); } validatorsListBuilder.addAll(parameterValidators); Collection<ILinkParameterValidator> validators = validatorsListBuilder.build(); return Pair.with(entry, validators); } public void setMandatory(boolean mandatory) { this.mandatory = mandatory; } public void addParameterValidator(ILinkParameterValidator validator) { this.parameterValidators.add(validator); } @Override public void detach() { factory.detach(); for (IDetachable detachable : parameterValidators) { detachable.detach(); } } }