package fr.openwide.core.wicket.more.link.descriptor.builder.impl.main; import org.apache.wicket.Page; import org.apache.wicket.model.IModel; import org.apache.wicket.request.resource.ResourceReference; import org.bindgen.BindingRoot; import org.bindgen.binding.AbstractBinding; import org.javatuples.Unit; import com.google.common.base.Predicate; import fr.openwide.core.wicket.more.condition.Condition; import fr.openwide.core.wicket.more.link.descriptor.builder.impl.parameter.LinkParameterTypeInformation; import fr.openwide.core.wicket.more.link.descriptor.builder.state.main.common.IMainState; 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.IOneChosenParameterState; import fr.openwide.core.wicket.more.link.descriptor.builder.state.parameter.mapping.IAddedParameterMappingState; import fr.openwide.core.wicket.more.link.descriptor.parameter.mapping.factory.ILinkParameterMappingEntryFactory; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.factory.ILinkParameterValidatorFactory; import fr.openwide.core.wicket.more.markup.html.factory.IDetachableFactory; /** * This class exists mainly to avoid having to repeatedly write down TSelf in its expanded form * (see {@link OneMappableParameterMainStateImpl}), which would be really verbose. * * @see OneMappableParameterMainStateImpl * @see IGenericOneMappableParameterMainState */ abstract class AbstractGenericOneMappableParameterMainStateImpl < TSelf extends IMainState<TSelf>, TParam1, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor, TEarlyTargetDefinitionResult, TLateTargetDefinitionPageResult, TLateTargetDefinitionResourceResult, TLateTargetDefinitionImageResourceResult > extends AbstractOneOrMoreMappableParameterMainStateImpl < TSelf, TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > implements IGenericOneMappableParameterMainState < TSelf, TParam1, TEarlyTargetDefinitionResult, TLateTargetDefinitionPageResult, TLateTargetDefinitionResourceResult, TLateTargetDefinitionImageResourceResult > { AbstractGenericOneMappableParameterMainStateImpl( NoMappableParameterMainStateImpl< TEarlyTargetDefinitionLinkDescriptor, TLateTargetDefinitionPageLinkDescriptor, TLateTargetDefinitionResourceLinkDescriptor, TLateTargetDefinitionImageResourceLinkDescriptor > previousState, LinkParameterTypeInformation<?> addedParameterType) { super(previousState, addedParameterType); } protected abstract IOneChosenParameterState< TSelf, TParam1, TLateTargetDefinitionPageResult, TLateTargetDefinitionResourceResult, TLateTargetDefinitionImageResourceResult > pickLast(); @Override public IAddedParameterMappingState<TSelf> map(String parameterName) { return pickLast().map(parameterName); } @Override public IAddedParameterMappingState<TSelf> map( ILinkParameterMappingEntryFactory<? super Unit<IModel<TParam1>>> parameterMappingEntryFactory) { return pickLast().map(parameterMappingEntryFactory); } @Override public IAddedParameterMappingState<TSelf> renderInUrl(String parameterName) { return pickLast().renderInUrl(parameterName); } @Override public IAddedParameterMappingState<TSelf> renderInUrl(String parameterName, AbstractBinding<? super TParam1, ?> binding) { return pickLast().renderInUrl(parameterName, binding); } @Override public TSelf validator( ILinkParameterValidatorFactory<? super Unit<IModel<TParam1>>> parameterValidatorFactory) { return pickLast().validator(parameterValidatorFactory); } @Override public TSelf validator(IDetachableFactory<? super Unit<IModel<TParam1>>, ? extends Condition> conditionFactory) { return pickLast().validator(conditionFactory); } @Override public TSelf validator(Predicate<? super TParam1> predicate) { return pickLast().validator(predicate); } @Override public TSelf permission(String permissionName) { return pickLast().permission(permissionName); } @Override public TSelf permission(String firstPermissionName, String... otherPermissionNames) { return pickLast().permission(firstPermissionName, otherPermissionNames); } @Override public TSelf permission(BindingRoot<? super TParam1, ?> binding, String firstPermissionName, String... otherPermissionNames) { return pickLast().permission(binding, firstPermissionName, otherPermissionNames); } @Override public TLateTargetDefinitionPageResult page( IDetachableFactory< ? super Unit<IModel<TParam1>>, ? extends IModel<? extends Class<? extends Page>> > pageClassFactory) { return pickLast().page(pageClassFactory); } @Override public TLateTargetDefinitionResourceResult resource( IDetachableFactory< ? super Unit<IModel<TParam1>>, ? extends IModel<? extends ResourceReference> > resourceReferenceFactory) { return pickLast().resource(resourceReferenceFactory); } @Override public TLateTargetDefinitionImageResourceResult imageResource( IDetachableFactory< ? super Unit<IModel<TParam1>>, ? extends IModel<? extends ResourceReference> > resourceReferenceFactory) { return pickLast().imageResource(resourceReferenceFactory); } }