package fr.openwide.core.wicket.more.link.descriptor.mapper;
import org.apache.wicket.model.IModel;
import org.javatuples.Quartet;
import fr.openwide.core.wicket.more.link.descriptor.ILinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.state.main.common.IMappableParameterDeclarationState;
/**
* An object that can create a {@link ILinkDescriptor} using four {@link IModel}s.
* @see ILinkDescriptorMapper
* @see IMappableParameterDeclarationState#model(Class)
*/
public interface IFourParameterLinkDescriptorMapper<L, T1, T2, T3, T4>
extends ILinkDescriptorMapper
<
L,
Quartet
<
? extends IModel<T1>,
? extends IModel<T2>,
? extends IModel<T3>,
? extends IModel<T4>
>
> {
/**
* {@inheritDoc}
* @deprecated Provided in order to implement {@link ILinkDescriptorMapper}. When you're using a
* {@link IThreeParameterLinkDescriptorMapper}, please use {@link #map(IModel, IModel, IModel)} instead.
*/
@Override
@Deprecated
L map(Quartet<? extends IModel<T1>, ? extends IModel<T2>, ? extends IModel<T3>, ? extends IModel<T4>> param);
/**
* Map the given models to a newly-created {@link ILinkDescriptor}.
* @see #map(Quartet)
*/
L map(IModel<T1> model1, IModel<T2> model2, IModel<T3> model3, IModel<T4> model4);
IThreeParameterLinkDescriptorMapper<L, T2, T3, T4> setParameter1(final IModel<T1> model1);
IThreeParameterLinkDescriptorMapper<L, T2, T3, T4> ignoreParameter1();
IThreeParameterLinkDescriptorMapper<L, T1, T3, T4> setParameter2(final IModel<T2> model2);
IThreeParameterLinkDescriptorMapper<L, T1, T3, T4> ignoreParameter2();
IThreeParameterLinkDescriptorMapper<L, T1, T2, T4> setParameter3(final IModel<T3> model3);
IThreeParameterLinkDescriptorMapper<L, T1, T2, T4> ignoreParameter3();
IThreeParameterLinkDescriptorMapper<L, T1, T2, T3> setParameter4(final IModel<T4> model4);
IThreeParameterLinkDescriptorMapper<L, T1, T2, T3> ignoreParameter4();
}