package com.evolveum.midpoint.web.component.data; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.web.util.SearchFormEnterBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.validation.validator.RangeValidator; /** * @author lazyman */ public class PageSizePopover extends BasePanel { private static final String ID_POP_BUTTON = "popButton"; private static final String ID_POPOVER = "popover"; private static final String ID_FORM = "form"; private static final String ID_INPUT = "input"; private static final String ID_BUTTON = "button"; public PageSizePopover(String id) { super(id); setRenderBodyOnly(true); initLayout(); } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); String buttonId = get(ID_POP_BUTTON).getMarkupId(); StringBuilder sb = new StringBuilder(); sb.append("initPageSizePopover('").append(buttonId); sb.append("','").append(get(ID_POPOVER).getMarkupId()); sb.append("','").append(buttonId); sb.append("');"); response.render(OnDomReadyHeaderItem.forScript(sb.toString())); } protected void initLayout() { Button popButton = new Button(ID_POP_BUTTON); popButton.setOutputMarkupId(true); add(popButton); WebMarkupContainer popover = new WebMarkupContainer(ID_POPOVER); popover.setOutputMarkupId(true); add(popover); Form form = new Form(ID_FORM); popover.add(form); AjaxSubmitButton button = new AjaxSubmitButton(ID_BUTTON) { @Override protected void onError(AjaxRequestTarget target, Form<?> form) { super.onError(target, form); target.add(getPageBase().getFeedbackPanel()); } @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { super.onSubmit(target, form); pageSizeChanged(target); } }; form.add(button); TextField input = new TextField(ID_INPUT, createInputModel()); input.add(new RangeValidator(5, 100)); input.setLabel(createStringResource("PageSizePopover.title")); input.add(new SearchFormEnterBehavior(button)); input.setType(Integer.class); form.add(input); } private IModel<Integer> createInputModel() { return new IModel<Integer>() { @Override public Integer getObject() { TablePanel tablePanel = findParent(TablePanel.class); UserProfileStorage.TableId tableId = tablePanel.getTableId(); return getPageBase().getSessionStorage().getUserProfile().getPagingSize(tableId); } @Override public void setObject(Integer o) { TablePanel tablePanel = findParent(TablePanel.class); UserProfileStorage.TableId tableId = tablePanel.getTableId(); getPageBase().getSessionStorage().getUserProfile().setPagingSize(tableId, o); } @Override public void detach() { } }; } protected void pageSizeChanged(AjaxRequestTarget target) { } }