package hu.sch.web.wicket.components.tables;
import hu.sch.web.wicket.components.customlinks.LinkPanel;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
/**
* Egy olyan {@link AbstractColumn} gyermekosztály, ami {@link LinkPanel}eket jelenít meg.
*
* @author messo
* @since 2.3.1
*/
public abstract class LinkColumn<T> extends AbstractColumn<T, String> {
public LinkColumn(IModel<String> displayModel) {
// link alapján ne akarjunk rendezni
super(displayModel, null);
}
public LinkColumn(String header) {
this(new Model<String>(header));
}
@Override
public void populateItem(Item<ICellPopulator<T>> item, String componentId, IModel<T> rowModel) {
T obj = rowModel.getObject();
if (isVisible(obj)) {
LinkPanel panel = getLinkPanel(componentId, obj);
panel.setColumn(this);
item.add(panel);
} else {
item.add(new Label(componentId, ""));
}
}
/**
* Akkor hívhatjuk meg, amikor linkre kapcsolunk így átadhatjuk az eseményvezérlést
* a táblázatnak, amennyiben ottani adatoktól is függ a cselekmény.
*/
public void onClick(T obj) {
}
/**
* Itt mondhatjuk meg, hogy látható legyen-e a link, amihez segítségül
* hívhatjuk az objektumunkat.
*
* @param obj ami segíthet a válaszolásban
* @return látható-e (alapértelemzetten igen)
*/
protected boolean isVisible(T obj) {
return true;
}
/**
* Ezzel kérjük le a konkrét LinkPanel implementációt.
* @param componentId
* @param obj
* @return a megjelenítendő LinkPanel
*/
protected abstract LinkPanel getLinkPanel(String componentId, T obj);
}