package org.apache.wicket.examples.repeater;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.IConverterLocator;
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.extensions.markup.html.repeater.data.table.ColGroup;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.LambdaColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.CSVDataExporter;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.ExportToolbar;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.convert.converter.DateConverter;
@see
@author
public class DataTablePage extends BasePage
{
public DataTablePage()
{
List<IColumn<Contact, String>> columns = new ArrayList<>();
columns.add(new AbstractColumn<Contact, String>(new ResourceModel("actions"))
{
@Override
public void populateItem(Item<ICellPopulator<Contact>> cellItem, String componentId,
IModel<Contact> model)
{
cellItem.add(new ActionPanel(componentId, model));
}
});
columns.add(new PropertyColumn<Contact, String>(new ResourceModel("id"), "id")
{
@Override
public String getCssClass()
{
return "numeric";
}
});
columns.add(new LambdaColumn<>(new ResourceModel("firstName"), "firstName", Contact::getFirstName));
columns.add(new LambdaColumn<Contact, String>(new ResourceModel("lastName"), "lastName", Contact::getLastName)
{
@Override
public String getCssClass()
{
return "last-name";
}
});
columns.add(new PropertyColumn<>(new ResourceModel("homePhone"), "homePhone"));
columns.add(new PropertyColumn<>(new ResourceModel("cellPhone"), "cellPhone"));
columns.add(new PropertyColumn<>(new ResourceModel("bornDate"), "bornDate"));
SortableContactDataProvider dataProvider = new SortableContactDataProvider();
DataTable<Contact, String> dataTable = new DefaultDataTable<>("table", columns,
dataProvider, 8);
dataTable.addBottomToolbar(new ExportToolbar(dataTable).addDataExporter(new CSVDataExporter() {
@see
@Override
protected IConverterLocator getConverterLocator()
{
return DataTablePage.this;
}
@Override
protected <T> IModel<T> wrapModel(IModel<T> model)
{
return DataTablePage.this.wrap(model);
}
}));
add(dataTable);
DataTable<Contact, String> tableWithColGroup = new DataTable<>("tableWithColGroup", columns,
dataProvider, 8);
tableWithColGroup.addTopToolbar(new HeadersToolbar<>(tableWithColGroup, dataProvider));
add(tableWithColGroup);
ColGroup colgroup = tableWithColGroup.getColGroup();
colgroup.addCol(colgroup.new Col(AttributeModifier.append("class", "lightblue")));
colgroup.addCol(colgroup.new Col(AttributeModifier.append("class", "lightgreen")));
colgroup.addCol(colgroup.new Col(AttributeModifier.append("class", "pink")));
colgroup.addCol(colgroup.new Col(AttributeModifier.append("class", "yellow")));
colgroup.addCol(colgroup.new Col(AttributeModifier.append("span", "2"),
AttributeModifier.append("class", "brown")));
}
@Override
protected IConverter<?> createConverter(Class<?> type)
{
if (type == Date.class) {
return new DateConverter() {
@Override
public DateFormat getDateFormat(Locale locale)
{
return (DateFormat) DateFormat.getDateInstance(DateFormat.LONG, locale).clone();
}
};
}
return null;
}
}