package fr.openwide.core.wicket.more.markup.repeater.table.builder.state;
import java.util.Date;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.model.IModel;
import com.google.common.base.Function;
import fr.openwide.core.commons.util.binding.AbstractCoreBinding;
import fr.openwide.core.jpa.more.business.sort.ISort;
import fr.openwide.core.wicket.more.markup.html.bootstrap.label.renderer.BootstrapRenderer;
import fr.openwide.core.wicket.more.markup.repeater.table.builder.action.ActionColumnBuilder;
import fr.openwide.core.wicket.more.markup.repeater.table.column.ICoreColumn;
import fr.openwide.core.wicket.more.rendering.Renderer;
import fr.openwide.core.wicket.more.util.IDatePattern;
public interface IColumnState<T, S extends ISort<?>> extends IBuildState<T, S> {
IAddedColumnState<T, S> addColumn(IColumn<T, S> column);
IAddedCoreColumnState<T, S> addColumn(ICoreColumn<T, S> column);
IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel);
IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel, Renderer<? super T> renderer);
<C> IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, C> binding);
<C> IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, C> binding, Renderer<? super C> renderer);
<C> IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel, Function<? super T, C> function);
<C> IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel, Function<? super T, C> function,
Renderer<? super C> renderer);
IAddedLabelColumnState<T, S> addLabelColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, ? extends Date> binding, IDatePattern datePattern);
<C> IAddedBootstrapBadgeColumnState<T, S, C> addBootstrapBadgeColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, C> binding, BootstrapRenderer<? super C> renderer);
<C> IAddedBootstrapBadgeColumnState<T, S, C> addBootstrapBadgeColumn(IModel<String> headerModel,
Function<? super T, C> function, BootstrapRenderer<? super C> renderer);
<C> IAddedCoreColumnState<T, S> addBootstrapLabelColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, C> binding, BootstrapRenderer<? super C> renderer);
<C> IAddedCoreColumnState<T, S> addBootstrapLabelColumn(IModel<String> headerModel,
Function<? super T, C> function, BootstrapRenderer<? super C> renderer);
<C> IAddedBooleanLabelColumnState<T, S> addBooleanLabelColumn(IModel<String> headerModel,
AbstractCoreBinding<? super T, Boolean> binding);
ActionColumnBuilder<T, S> addActionColumn();
ActionColumnBuilder<T, S> addActionColumn(IModel<String> headerLabelModel);
}