package org.nocket.component.table.columns; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.nocket.component.table.GenericDataTablePanel; // TODO: Auto-generated Javadoc /** * Column with link. * * @param <T> * Model object type representing one line in * {@link GenericDataTablePanel} . */ @SuppressWarnings("serial") public abstract class ActionColumn<T> extends DMDAbstractColumn<T> { /** * Instantiates a new action column. * * @param headerLabel the header label */ public ActionColumn(IModel<String> headerLabel) { super(headerLabel); } /* (non-Javadoc) * @see org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator#populateItem(org.apache.wicket.markup.repeater.Item, java.lang.String, org.apache.wicket.model.IModel) */ public void populateItem(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> rowModel) { cellItem.add(new LinkPanel<T>(componentId, this, rowModel)); } /** * Defines whether link is enabled. You may decide to implement special * behavior for each line, depending on the model object. * * @param model * Model of the line. * * @return Whether link is enabled. Default is true. */ protected boolean isEnabled(IModel<T> model) { return true; } /** * Defines whether link is visible. You may decide to implement special * behavior for each line, depending on the model object. * * @param model * Model of the line. * * @return Whether link is visible. Default is true. */ protected boolean isVisible(IModel<T> model) { return true; } /** * Returns label for the link. * * @param model * Model of the line. * * @return Label for the string. */ protected abstract IModel<String> getCellLabel(IModel<T> model); /** * Called when a link is clicked. * * @param model * Model of the line. */ protected abstract void onClick(IModel<T> model); /** * The Class LinkPanel. * * @param <T> the generic type */ @SuppressWarnings("hiding") private class LinkPanel<T> extends Panel { /** * Instantiates a new link panel. * * @param id the id * @param column the column * @param rowModel the row model */ public LinkPanel(String id, final ActionColumn<T> column, IModel<T> rowModel) { super(id); Link<T> link = new Link<T>("link", rowModel) { @Override public void onClick() { column.onClick(getModel()); } @Override public boolean isEnabled() { return column.isEnabled(getModel()); } @Override public boolean isVisible() { return column.isVisible(getModel()); } }; add(link); link.add(new Label("label", column.getCellLabel(rowModel))); } } }