package fr.openwide.core.wicket.more.link.descriptor.builder.state.main; import java.util.Collection; import org.springframework.core.convert.TypeDescriptor; import com.google.common.base.Supplier; import fr.openwide.core.wicket.more.link.descriptor.builder.state.main.common.IMainState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.main.common.IMappableParameterDeclarationState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.main.generic.IGenericThreeMappableParameterMainState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.parameter.chosen.common.IChosenParameterState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.terminal.IBackwardCompatibleTerminalState; import fr.openwide.core.wicket.more.link.descriptor.mapper.IThreeParameterLinkDescriptorMapper; /** * A builder state with three mappable parameters from which one may: * <ul> * <li>call any of the {@link IMainState} methods to map parameters and defined validators * <li>call {@link #pickFirst()} or {@link #pickSecond()} (etc.) to choose among mappable parameters and then use any * of the {@link IChosenParameterState} methods, allowing to reference these mappable parameters without them being * entirely defined (no model was provided yet). * <li>add another mappable parameter by calling the {@link #model(Class)} method. * <li>end the build with one of the {@link IBackwardCompatibleTerminalState} methods. * </ul> */ public interface IThreeMappableParameterMainState < TParam1, TParam2, TParam3, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > extends IGenericThreeMappableParameterMainState < IThreeMappableParameterMainState < TParam1, TParam2, TParam3, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor >, TParam1, TParam2, TParam3, IThreeParameterLinkDescriptorMapper < TEarlyTargetDefinitionLinkDescriptor, TParam1, TParam2, TParam3 >, IThreeParameterLinkDescriptorMapper < TLateTargetDefinitionPageLinkDescriptor, TParam1, TParam2, TParam3 >, IThreeParameterLinkDescriptorMapper < TLateTargetDefinitionResourceLinkDescriptor, TParam1, TParam2, TParam3 >, IThreeParameterLinkDescriptorMapper < TLateTargetDefinitionImageResourceLinkDescriptor, TParam1, TParam2, TParam3 > >, IMappableParameterDeclarationState { @Override <TParam4> IFourMappableParameterMainState< TParam1, TParam2, TParam3, TParam4, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<TParam4> clazz); @Override <TParam4 extends Collection<TElement>, TElement> IFourMappableParameterMainState< TParam1, TParam2, TParam3, TParam4, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam4> clazz, Class<TElement> elementType); @Override <TParam4 extends Collection<?>> IFourMappableParameterMainState< TParam1, TParam2, TParam3, TParam4, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam4> clazz, TypeDescriptor elementTypeDescriptor); @Override <TParam4 extends Collection<?>> IFourMappableParameterMainState< TParam1, TParam2, TParam3, TParam4, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam4> clazz, TypeDescriptor elementTypeDescriptor, Supplier<? extends TParam4> emptyCollectionSupplier); }