package fr.openwide.core.basicapp.web.application.administration.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.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import fr.openwide.core.basicapp.core.business.user.model.UserGroup;
import fr.openwide.core.basicapp.core.util.binding.Bindings;
import fr.openwide.core.basicapp.web.application.administration.component.UserGroupDescriptionPanel;
import fr.openwide.core.basicapp.web.application.administration.component.UserGroupMembersPanel;
import fr.openwide.core.basicapp.web.application.administration.template.AdministrationTemplate;
import fr.openwide.core.basicapp.web.application.navigation.link.LinkFactory;
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.generator.IPageLinkGenerator;
import fr.openwide.core.wicket.more.link.descriptor.mapper.IOneParameterLinkDescriptorMapper;
import fr.openwide.core.wicket.more.link.descriptor.mapper.ITwoParameterLinkDescriptorMapper;
import fr.openwide.core.wicket.more.link.descriptor.parameter.CommonParameters;
import fr.openwide.core.wicket.more.link.model.PageModel;
import fr.openwide.core.wicket.more.markup.html.template.model.BreadCrumbElement;
import fr.openwide.core.wicket.more.model.BindingModel;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
public class AdministrationUserGroupDescriptionPage extends AdministrationTemplate {
private static final long serialVersionUID = -5780326896837623229L;
public static final IOneParameterLinkDescriptorMapper<IPageLinkDescriptor, UserGroup> MAPPER =
LinkDescriptorBuilder.start()
.model(UserGroup.class).map(CommonParameters.ID).mandatory()
.page(AdministrationUserGroupDescriptionPage.class);
public static final ITwoParameterLinkDescriptorMapper<IPageLinkDescriptor, UserGroup, Page> MAPPER_SOURCE =
LinkDescriptorBuilder.start()
.model(UserGroup.class).map(CommonParameters.ID).mandatory()
.model(Page.class).pickSecond().map(CommonParameters.SOURCE_PAGE_ID).optional()
.page(AdministrationUserGroupDescriptionPage.class);
public static final IPageLinkDescriptor linkDescriptor(IModel<UserGroup> userGroupModel, IModel<Page> sourcePageModel) {
return MAPPER_SOURCE.map(userGroupModel, sourcePageModel);
}
public AdministrationUserGroupDescriptionPage(PageParameters parameters) {
super(parameters);
IModel<UserGroup> userGroupModel = new GenericEntityModel<Long, UserGroup>(null);
IModel<Page> sourcePageModel = new PageModel<Page>();
linkDescriptor(userGroupModel, sourcePageModel).extractSafely(parameters, AdministrationUserGroupPortfolioPage.linkDescriptor(),
getString("administration.usergroup.error"));
addBreadCrumbElement(new BreadCrumbElement(new ResourceModel("navigation.administration.usergroup"),
AdministrationUserGroupPortfolioPage.linkDescriptor()));
addBreadCrumbElement(new BreadCrumbElement(BindingModel.of(userGroupModel, Bindings.userGroup().name()),
AdministrationUserGroupDescriptionPage.linkDescriptor(userGroupModel, sourcePageModel)));
Component backToSourcePage = LinkFactory.get().linkGenerator(sourcePageModel, AdministrationUserGroupPortfolioPage.class)
.link("backToSourcePage").hideIfInvalid();
add(
new Label("pageTitle", BindingModel.of(userGroupModel, Bindings.userGroup().name())),
backToSourcePage,
AdministrationUserGroupPortfolioPage.linkDescriptor().link("backToList")
.add(Condition.componentVisible(backToSourcePage).thenHide()),
new UserGroupDescriptionPanel("description", userGroupModel),
new UserGroupMembersPanel("members", userGroupModel)
);
}
public static IPageLinkGenerator linkGenerator(IModel<UserGroup> userGroupModel) {
return linkDescriptor(userGroupModel, Model.of((Page)null));
}
@Override
protected Class<? extends WebPage> getSecondMenuPage() {
return AdministrationUserGroupPortfolioPage.class;
}
}