package org.nocket.component.table; import java.io.Serializable; import org.apache.wicket.Component; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; 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.util.convert.IConverter; import org.nocket.component.table.GenericDataTablePanel.Tupel; import org.nocket.component.table.columns.DMDPropertyColumn; public class GenericDataTablePanelPropertyColumn<T> extends DMDPropertyColumn<T> implements Serializable { protected final GenericDataTablePanel genericDataTablePanel; protected final String column; protected transient Component headerComponent; public GenericDataTablePanelPropertyColumn(IModel<String> displayModel, String sortProperty, String propertyExpression, GenericDataTablePanel genericDataTablePanel) { super(displayModel, sortProperty, propertyExpression); this.genericDataTablePanel = genericDataTablePanel; this.column = propertyExpression; } @Override public void populateItem(Item<ICellPopulator<T>> item, String componentId, IModel<T> rowModel) { item.add(new Label(componentId, createLabelModel(rowModel)) { @Override public IConverter getConverter(Class type) { String columnName = column; if (genericDataTablePanel.getColumnConverter().containsKey(columnName)) { GenericDataTablePanel.Tupel t = (Tupel) genericDataTablePanel.getColumnConverter().get(columnName); if (type.isAssignableFrom(type) && t.two != null) { return t.two; } } return super.getConverter(type); } }); } @Override public Component getHeader(String componentId) { // We keep the header component in transient mind for later manipulation // to support HTML-formated labels. The appropriate modifcation can't be performed // here because as long as the label ist not attached to its parent, the resource access // won't work. if (headerComponent == null) { headerComponent = super.getHeader(componentId); headerComponent.add(new AttributeAppender("class", "header" + genericDataTablePanel.getColumnCount()) .setSeparator(" ")); genericDataTablePanel.setColumnCount(genericDataTablePanel.getColumnCount() + 1); } return headerComponent; } }