package fr.openwide.core.wicket.more.markup.repeater.table.column; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Set; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.IStyledColumn; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import com.google.common.base.Joiner; import com.google.common.collect.Sets; import fr.openwide.core.jpa.more.business.sort.ISort; import fr.openwide.core.wicket.more.markup.html.sort.ISortIconStyle; import fr.openwide.core.wicket.more.markup.html.sort.TableSortLink.CycleMode; public abstract class AbstractCoreColumn<T, S extends ISort<?>> implements IStyledColumn<T, S>, ICoreColumn<T, S> { private static final long serialVersionUID = -8616599378805216510L; private final IModel<?> headerLabelModel; private final Set<String> cssClasses = Sets.newHashSet(); private S sortProperty; private IModel<String> sortTooltipTextModel; private ISortIconStyle sortIconStyle; private CycleMode sortCycleMode; public AbstractCoreColumn(IModel<?> headerLabelModel) { super(); this.headerLabelModel = checkNotNull(headerLabelModel); } @Override public abstract void populateItem(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> rowModel); @Override public Component getHeader(String componentId) { return new Label(componentId, headerLabelModel); } @Override public S getSortProperty() { return sortProperty; } @Override public void setSortProperty(S sortProperty) { this.sortProperty = sortProperty; } @Override public boolean isSortable() { return sortProperty != null; } @Override public IModel<String> getSortTooltipTextModel() { return sortTooltipTextModel; } @Override public void setSortTooltipTextModel(IModel<String> sortTooltipTextModel) { this.sortTooltipTextModel = sortTooltipTextModel; } @Override public ISortIconStyle getSortIconStyle() { return sortIconStyle; } @Override public void setSortIconStyle(ISortIconStyle sortIconStyle) { this.sortIconStyle = sortIconStyle; } @Override public CycleMode getSortCycleMode() { return sortCycleMode; } @Override public void setSortCycleMode(CycleMode sortCycleMode) { this.sortCycleMode = sortCycleMode; } @Override public void detach() { headerLabelModel.detach(); if (sortTooltipTextModel != null) { sortTooltipTextModel.detach(); } } @Override public String getCssClass() { return Joiner.on(" ").join(cssClasses); } @Override public ICoreColumn<T, S> addCssClass(String cssClass) { cssClasses.add(cssClass); return this; } }