package fr.openwide.core.wicket.more.link.descriptor.builder.impl.factory; import java.util.List; import java.util.Map; import org.apache.wicket.model.IDetachable; import org.apache.wicket.model.IModel; import org.javatuples.Pair; import org.javatuples.Tuple; import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder; import fr.openwide.core.wicket.more.link.descriptor.builder.impl.parameter.LinkParameterMappingEntryBuilder; import fr.openwide.core.wicket.more.link.descriptor.parameter.mapping.ILinkParameterMappingEntry; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.ILinkParameterValidator; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.factory.ILinkParameterValidatorFactory; import fr.openwide.core.wicket.more.markup.html.factory.IDetachableFactory; /** * A factory of link descriptors to be stored in the {@link LinkDescriptorBuilder} for keeping memory of the actual * link descriptor type that should be built. * @param <TTarget> The link target type (<code>Class<? extends Page></code>, <code>ResourceReference</code>, ...) * @param <TLinkDescriptor> The link descriptor type. */ public interface IBuilderLinkDescriptorFactory<TTarget, TLinkDescriptor> extends IDetachable { TLinkDescriptor create( IModel<? extends TTarget> targetModel, Iterable<? extends ILinkParameterMappingEntry> parameterMappingEntries, Iterable<? extends ILinkParameterValidator> validators ); IBuilderMapperLinkDescriptorFactory<TLinkDescriptor> forMapper( Pair< ? extends IDetachableFactory<? extends Tuple, ? extends IModel<? extends TTarget>>, ? extends List<Integer> > targetFactory, Map<LinkParameterMappingEntryBuilder<?>, List<Integer>> mappingEntryBuilders, Map<ILinkParameterValidatorFactory<?>, List<Integer>> validatorFactories ); }