package fr.openwide.core.showcase.web.application.links.page;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import fr.openwide.core.showcase.core.business.user.model.User;
import fr.openwide.core.showcase.web.application.links.component.DynamicImageTestPanel;
import fr.openwide.core.showcase.web.application.links.component.DynamicLinkTestPanel;
import fr.openwide.core.showcase.web.application.util.template.MainTemplate;
import fr.openwide.core.wicket.more.condition.Condition;
import fr.openwide.core.wicket.more.link.descriptor.IPageLinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
import fr.openwide.core.wicket.more.link.descriptor.parameter.CommonParameters;
import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterValidationException;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
public abstract class LinksTemplate extends MainTemplate {
private static final long serialVersionUID = -2979443021509594346L;
public static final IPageLinkDescriptor linkDescriptor(IModel<? extends Class<? extends Page>> pageModel, IModel<User> userModel) {
return LinkDescriptorBuilder.start()
.map(CommonParameters.ID, userModel, User.class).mandatory()
.page(pageModel);
}
public LinksTemplate(PageParameters parameters) {
super(parameters);
IModel<User> userModel = new GenericEntityModel<Long, User>(null);
try {
linkDescriptor(new Model<Class<Page>>(null), userModel).extract(parameters);
} catch (LinkParameterValidationException ignored) {
// Get around the parameter validation for the purpose of this test
}
add(new Label("title", getTitleModel()));
Component linkToPage1 = LinkDescriptorBuilder.toPageInstance(this).validate(LinksPage1.class).build()
.link("linkToThisPageInstanceOnlyIfPage1").hideIfInvalid();
add(linkToPage1);
add(LinkDescriptorBuilder.toPageInstance(this).validate(LinksTemplate.class).build().link("linkToThisPageInstance")
.add(Condition.componentVisible(linkToPage1).thenHide()));
add(new DynamicLinkTestPanel("linkTestPanel", userModel));
add(new DynamicImageTestPanel("imageTestPanel"));
}
@Override
protected Class<? extends WebPage> getFirstMenuPage() {
return LinksPage1.class;
}
protected abstract IModel<String> getTitleModel();
}