package fr.openwide.core.test.wicket.more.link.descriptor; import org.apache.wicket.Page; import org.apache.wicket.model.Model; import fr.openwide.core.commons.util.functional.SerializableFunction; import fr.openwide.core.test.wicket.more.link.descriptor.application.WicketMoreTestLinkDescriptorApplication; import fr.openwide.core.test.wicket.more.link.descriptor.page.TestLinkDescriptorNoParameterPage; import fr.openwide.core.test.wicket.more.link.descriptor.page.TestLinkDescriptorOneParameterPage; import fr.openwide.core.wicket.more.link.descriptor.IImageResourceLinkDescriptor; import fr.openwide.core.wicket.more.link.descriptor.ILinkDescriptor; import fr.openwide.core.wicket.more.link.descriptor.IPageLinkDescriptor; import fr.openwide.core.wicket.more.link.descriptor.IResourceLinkDescriptor; 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.ILateTargetDefinitionTerminalState; import fr.openwide.core.wicket.more.link.descriptor.mapper.IOneParameterLinkDescriptorMapper; import fr.openwide.core.wicket.more.markup.html.factory.DetachableFactories; import fr.openwide.core.wicket.more.markup.html.factory.ModelFactories; import fr.openwide.core.wicket.more.model.ReadOnlyModel; public class TestPageLinkDescriptorMapper extends AbstractAnyTargetTestLinkDescriptorMapper { @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithNullTarget( ILateTargetDefinitionTerminalState< IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.page(Model.of((Class<Page>) null)); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithOneParameterTarget( ILateTargetDefinitionTerminalState< IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.page(TestLinkDescriptorOneParameterPage.class); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithParameterDependentNullTarget(IOneChosenParameterState< ?, T, IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.page(ModelFactories.constant(Model.of((Class<Page>) null))); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithParameterDependentTarget(IOneChosenParameterState< ?, T, IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.page(DetachableFactories.forUnit(ReadOnlyModel.factory( new SerializableFunction<T, Class<? extends Page>>() { private static final long serialVersionUID = 1L; @Override public Class<? extends Page> apply(T input) { return input == null ? TestLinkDescriptorNoParameterPage.class : TestLinkDescriptorOneParameterPage.class; } } ))); } @Override protected String getNoParameterTargetPathPrefix() { return WicketMoreTestLinkDescriptorApplication.PAGE_NO_PARAMETER_PATH_PREFIX; } @Override protected String getOneParameterTargetPathPrefix() { return WicketMoreTestLinkDescriptorApplication.PAGE_ONE_PARAMETER_PATH_PREFIX; } }