/*
* Copyright (c) 2010-2015 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.ajax.markup.html.AjaxLink;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
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.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.validation.validator.RangeValidator;
/**
* @author Viliam Repan (lazyman)
*/
public class TableConfigurationPanel extends BasePanel {
private static final String ID_COG_BUTTON = "cogButton";
private static final String ID_PAGE_SIZE = "pageSize";
private static final String ID_TABLE_COLUMNS = "tableColumns";
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";
// private static final String ID_FEEDBACK = "feedback";
public TableConfigurationPanel(String id) {
super(id);
setRenderBodyOnly(true);
initLayout();
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
StringBuilder sb = new StringBuilder();
sb.append("initPageSizePopover('");
sb.append(get(createComponentPath(ID_COG_BUTTON, ID_PAGE_SIZE)).getMarkupId());
sb.append("','").append(get(ID_POPOVER).getMarkupId());
sb.append("','").append(get(ID_COG_BUTTON).getMarkupId());
sb.append("');");
response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
}
// @Override
protected void initLayout() {
WebMarkupContainer cogButton = new WebMarkupContainer(ID_COG_BUTTON);
cogButton.setOutputMarkupId(true);
add(cogButton);
WebMarkupContainer pageSize = new WebMarkupContainer(ID_PAGE_SIZE);
pageSize.setOutputMarkupId(true);
cogButton.add(pageSize);
AjaxLink tableColumns = new AjaxLink(ID_TABLE_COLUMNS) {
@Override
public void onClick(AjaxRequestTarget target) {
tableColumnsPerformed(target);
}
};
cogButton.add(tableColumns);
tableColumns.setVisible(false); //todo implement [lazyman]
initPopoverLayout();
}
private void initPopoverLayout() {
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) {
target.add(TableConfigurationPanel.this.get(createComponentPath(ID_POPOVER, ID_FORM, "inputFeedback")));
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> 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);
input.setOutputMarkupId(true);
FeedbackPanel feedback = new FeedbackPanel("inputFeedback", new ComponentFeedbackMessageFilter(input));
feedback.setOutputMarkupId(true);
form.add(feedback);
form.add(input);
}
private void tableColumnsPerformed(AjaxRequestTarget target) {
//todo implement table columns support [lazyman]
}
private IModel<Integer> createInputModel() {
return new IModel<Integer>() {
@Override
public Integer getObject() {
Table tablePanel = findParent(Table.class);
UserProfileStorage.TableId tableId = tablePanel.getTableId();
if (tableId == null) {
return tablePanel.getItemsPerPage();
}
return getPageBase().getSessionStorage().getUserProfile().getPagingSize(tableId);
}
@Override
public void setObject(Integer o) {
Table tablePanel = findParent(Table.class);
UserProfileStorage.TableId tableId = tablePanel.getTableId();
if (tableId == null) {
tablePanel.setItemsPerPage(o);
return;
}
getPageBase().getSessionStorage().getUserProfile().setPagingSize(tableId, o);
}
@Override
public void detach() {
}
};
}
protected void pageSizeChanged(AjaxRequestTarget target) {
}
protected void onPageSizeChangedError(AjaxRequestTarget target) {
}
}