package fr.openwide.core.test.wicket.more.link.descriptor; import org.apache.wicket.model.Model; import org.apache.wicket.request.resource.ResourceReference; 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.resource.TestLinkDescriptorNoParameterResource; import fr.openwide.core.test.wicket.more.link.descriptor.resource.TestLinkDescriptorOneParameterResource; 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 TestResourceLinkDescriptorMapper extends AbstractAnyTargetTestLinkDescriptorMapper { @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithNullTarget( ILateTargetDefinitionTerminalState< IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.resource(Model.of((ResourceReference) null)); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithOneParameterTarget( ILateTargetDefinitionTerminalState< IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.resource(TestLinkDescriptorOneParameterResource.REFERENCE); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithParameterDependentNullTarget(IOneChosenParameterState< ?, T, IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.resource(ModelFactories.constant(Model.of((ResourceReference) null))); } @Override protected <T> IOneParameterLinkDescriptorMapper<? extends ILinkDescriptor, T> buildWithParameterDependentTarget(IOneChosenParameterState< ?, T, IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IResourceLinkDescriptor, T>, IOneParameterLinkDescriptorMapper<IImageResourceLinkDescriptor, T> > builder) { return builder.resource(DetachableFactories.forUnit(ReadOnlyModel.factory( new SerializableFunction<T, ResourceReference>() { private static final long serialVersionUID = 1L; @Override public ResourceReference apply(T input) { return input == null ? TestLinkDescriptorNoParameterResource.REFERENCE : TestLinkDescriptorOneParameterResource.REFERENCE; } } ))); } @Override protected String getNoParameterTargetPathPrefix() { return WicketMoreTestLinkDescriptorApplication.RESOURCE_NO_PARAMETER_PATH_PREFIX; } @Override protected String getOneParameterTargetPathPrefix() { return WicketMoreTestLinkDescriptorApplication.RESOURCE_ONE_PARAMETER_PATH_PREFIX; } }