package org.orienteer.core.component.table.component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.util.lang.Args; import org.orienteer.core.component.table.OrienteerDataTable; import ru.ydn.wicket.wicketorientdb.filter.AbstractFilteredDataProvider; import ru.ydn.wicket.wicketorientdb.filter.IODataFilter; import java.util.List; /** * @author Vitaliy Gonchar * @param <K> - type value in table */ public class GenericTablePanel<K> extends Panel { private final OrienteerDataTable<K, String> dataTable; public GenericTablePanel(String id, List<? extends IColumn<K, String>> columns, AbstractFilteredDataProvider<K> provider, int rowsPerRange) { this(id, columns, provider, rowsPerRange, true); } public GenericTablePanel(String id, List<? extends IColumn<K, String>> columns, ISortableDataProvider<K, String> provider, int rowsPerRange) { this(id, columns, provider, rowsPerRange, provider instanceof AbstractFilteredDataProvider); } @SuppressWarnings("unchecked") private GenericTablePanel(String id, List<? extends IColumn<K, String>> columns, ISortableDataProvider<K, String> provider, int rowsPerRange, boolean filtered) { super(id); Args.notNull(columns, "columns"); Args.notNull(provider, "provider"); setOutputMarkupPlaceholderTag(true); dataTable = new OrienteerDataTable<>("table", columns, provider, rowsPerRange); if (filtered) { FilterForm<IODataFilter<K, String>> filterForm = new FilterForm<IODataFilter<K, String>>("form", (IFilterStateLocator<IODataFilter<K, String>>) provider) { @Override protected void onSubmit() { AjaxRequestTarget target = RequestCycle.get().find(AjaxRequestTarget.class); target.add(dataTable); } }; filterForm.setOutputMarkupPlaceholderTag(true); dataTable.addFilterForm(filterForm); filterForm.add(dataTable); AjaxFallbackButton button = new AjaxFallbackButton("submit", filterForm) {}; filterForm.setDefaultButton(button); filterForm.enableFocusTracking(button); filterForm.add(button); filterForm.add(dataTable); add(filterForm); } else { Form form = new Form("form"); form.add(dataTable); form.add(new AjaxFallbackButton("submit", form) {}.setVisible(false)); add(form); } add(new EmptyPanel("error").setVisible(false)); } public GenericTablePanel(String id, IModel<String> errorMessage) { super(id); dataTable = null; Form form = new Form("form"); form.add(new EmptyPanel("table").setVisible(false)); form.setVisible(false); form.add(new AjaxFallbackButton("submit", form) {}.setVisible(false)); add(new Label("error", errorMessage)); add(form); } public OrienteerDataTable<K, String> getDataTable() { return dataTable; } }