/* Copyright (C) 2010 Steffen Dienst This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package de.elatexam.editor.pages.subtaskdefs; import java.util.ArrayList; import java.util.List; import net.databinder.models.hib.CriteriaFilterAndSort; import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.HeaderlessColumn; 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.PropertyColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import de.elatexam.editor.components.panels.TaskActionsPanel; import de.elatexam.editor.pages.taskdef.TaskSelectionPanel; import de.elatexam.editor.util.Stuff; import de.elatexam.model.SubTaskDef; /** * @author Steffen Dienst * */ public class SubtaskdefTable<T extends SubTaskDef> extends Panel { public SubtaskdefTable(String id, Class<T> clazz) { this(id, clazz, null); } /** * Render subtaskdef selection table, without links to edit and delete but with selection checkboxes. * * @param id * @param clazz * @param doSubtaskdefSelection */ public SubtaskdefTable(String id, Class<T> clazz, final TaskSelectionPanel taskSelectionPanel) { super(id); CriteriaFilterAndSort builder = new CriteriaFilterAndSort(new SubTaskDef() {}, "xmlid", true, false); final FilterForm<T> form = new FilterForm<T>("form", builder); form.setOutputMarkupId(true); add(form); final List<IColumn<T>> columns = new ArrayList<IColumn<T>>(); columns.add(new PropertyColumn<T>(new Model<String>("ID"), "xmlid", "xmlid") { @Override protected IModel<?> createLabelModel(IModel<T> rowModel) { return new PropertyModel<String>(rowModel, "xmlid"); } }); columns.add(new LabeledTextFilteredPropertyColumn<T>(Model.of("Aufgabenstellung"), Model.of("enthält:"), "problem", "problem"){ @Override protected IModel<?> createLabelModel(IModel<T> rowModel) { return new EllipsisModel((IModel<String>)super.createLabelModel(rowModel), 90); } }); if (taskSelectionPanel == null) { columns.add(new PropertyColumn<T>(new Model<String>("Typ"), "class.simpleName") { @Override protected IModel<String> createLabelModel(final IModel<T> rowModel) { if (rowModel.getObject() == null) return Model.of("???"); else return new ResourceModel(rowModel.getObject().getClass().getSimpleName() + ".short"); } }); // edit links columns.add(new HeaderlessColumn<T>() { public void populateItem(final Item<ICellPopulator<T>> cellItem, final String componentId, final IModel<T> rowModel) { cellItem.add(new TaskActionsPanel<T>(componentId, rowModel)); } }); } else { columns.add(new HeaderlessColumn<T>() { @Override public void populateItem(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> rowModel) { cellItem.add(new AddSubtaskdefPanel<T>(componentId, rowModel, taskSelectionPanel)); } }); } // XXX ugly hack, need to create own data access layer final PrivateSubtasksDataProvider provider = new PrivateSubtasksDataProvider((Class<SubTaskDef>) clazz, builder, builder); provider.setWrapWithPropertyModel(false); final AjaxFallbackDefaultDataTable<T> table = new AjaxFallbackDefaultDataTable<T>("datatable", columns, (ISortableDataProvider<T>) provider, 10); table.addTopToolbar(new FilterToolbar(table, form, builder)); form.add(table); } }