package fr.openwide.core.wicket.more.link.factory;
import java.util.Collection;
import java.util.Collections;
import org.apache.wicket.Page;
import org.apache.wicket.model.IModel;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
import fr.openwide.core.wicket.more.link.descriptor.builder.state.base.IBaseState;
import fr.openwide.core.wicket.more.link.descriptor.builder.state.pageinstance.IPageInstanceState;
import fr.openwide.core.wicket.more.link.descriptor.generator.IPageLinkGenerator;
import fr.openwide.core.wicket.more.link.model.PageModel;
public abstract class AbstractLinkFactory {
/**
* @deprecated Use {@link LinkDescriptorBuilder#start()} or {@link LinkDescriptorBuilder#toPageInstance(Page)} or
* {@link LinkDescriptorBuilder#toPageInstance(IModel)} instead.
*/
@Deprecated
protected IBaseState builder() {
return new LinkDescriptorBuilder();
}
public IPageLinkGenerator linkGenerator(Page pageInstance, Class<? extends Page> expectedClass) {
return linkGenerator(pageInstance, Collections.singleton(expectedClass));
}
public IPageLinkGenerator linkGenerator(IModel<? extends Page> pageInstanceModel, Class<? extends Page> expectedClass) {
return linkGenerator(pageInstanceModel, Collections.singleton(expectedClass));
}
public IPageLinkGenerator linkGenerator(Page pageInstance, Collection<? extends Class<? extends Page>> expectedClasses) {
return linkGenerator(PageModel.of(pageInstance), expectedClasses);
}
public IPageLinkGenerator linkGenerator(IModel<? extends Page> pageInstanceModel,
Collection<? extends Class<? extends Page>> expectedClasses) {
IPageInstanceState<?> builder = LinkDescriptorBuilder.toPageInstance(pageInstanceModel);
for (Class<? extends Page> expectedClass : expectedClasses) {
builder.validate(expectedClass);
}
return builder.build();
}
}