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.IGenericOneMappableParameterMainState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.parameter.chosen.common.IChosenParameterState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.parameter.chosen.common.IOneChosenParameterState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.terminal.IBackwardCompatibleTerminalState; import fr.openwide.core.wicket.more.link.descriptor.mapper.IOneParameterLinkDescriptorMapper; /** * A builder state with one mappable parameter from which one may: * <ul> * <li>call any of the {@link IMainState} methods to map parameters and defined validators * <li>call any of the {@link IChosenParameterState} and {@link IOneChosenParameterState} methods, allowing to * reference the newly-added mappable parameters without it 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 IOneMappableParameterMainState < TParam1, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > extends IGenericOneMappableParameterMainState < IOneMappableParameterMainState < TParam1, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor >, TParam1, IOneParameterLinkDescriptorMapper < TEarlyTargetDefinitionLinkDescriptor, TParam1 >, IOneParameterLinkDescriptorMapper < TLateTargetDefinitionPageLinkDescriptor, TParam1 >, IOneParameterLinkDescriptorMapper < TLateTargetDefinitionResourceLinkDescriptor, TParam1 >, IOneParameterLinkDescriptorMapper < TLateTargetDefinitionImageResourceLinkDescriptor, TParam1 > >, IMappableParameterDeclarationState { @Override <TParam2> ITwoMappableParameterMainState< TParam1, TParam2, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<TParam2> clazz); @Override <TParam2 extends Collection<TElement>, TElement> ITwoMappableParameterMainState< TParam1, TParam2, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam2> clazz, Class<TElement> elementType); @Override <TParam2 extends Collection<?>> ITwoMappableParameterMainState< TParam1, TParam2, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam2> clazz, TypeDescriptor elementTypeDescriptor); @Override <TParam2 extends Collection<?>> ITwoMappableParameterMainState< TParam1, TParam2, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > model(Class<? super TParam2> clazz, TypeDescriptor elementTypeDescriptor, Supplier<? extends TParam2> emptyCollectionSupplier); }