package org.nocket.gen.page.visitor.bind.builder.components;
import gengui.domain.DomainObjectReference;
import java.util.List;
import org.apache.wicket.model.IModel;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.util.convert.IConverter;
import org.nocket.component.table.ColumnSortOrder;
import org.nocket.component.table.GenericDataTableColumnConfigurator;
import org.nocket.component.table.GenericDataTableConfigurator;
import org.nocket.component.table.GenericDataTablePanel;
import org.nocket.component.table.TableItemPosition;
import org.nocket.component.table.TableSortType;
import org.nocket.gen.domain.element.MultivalueColumnElement;
import org.nocket.gen.domain.visitor.html.styling.StylingFactory;
import org.nocket.gen.domain.visitor.html.styling.common.TableBuilderI;
import org.nocket.gen.page.element.TableElement;
import org.nocket.gen.page.element.synchronizer.SynchronizerHelper;
public class GeneratedGenericDataTableFactory {
protected TableElement e;
protected String[] overrideSortableColumns;
protected TableBuilderI<?, ?> tableBuilder;
public GeneratedGenericDataTableFactory(TableElement e) {
this.e = e;
tableBuilder = StylingFactory.getStylingStrategy().getTableBuilder();
tableBuilder.initTableBuilder(e);
new TableExampleStructureAdopter(e).populate(tableBuilder.getTableConfigurator());
new TableAttributeAdopter(e).populate(tableBuilder.getTableConfigurator());
}
public GenericDataTablePanel<?> createTable() {
GenericDataTablePanel<?> table = tableBuilder.getTablePanel();
addCellContentConverters(table);
return table;
}
protected void addCellContentConverters(GenericDataTablePanel table) {
for (MultivalueColumnElement<DomainObjectReference> col : e.getDomainElement().getColumns()) {
addColumnContentConverter(table, col);
}
}
protected void addColumnContentConverter(GenericDataTablePanel table,
MultivalueColumnElement<DomainObjectReference> col) {
String format = new SynchronizerHelper(e.getContext(), col).getFormat(col.getMethod());
Class<?> returnType = col.getMethod().getReturnType();
IConverter<?> converter = createColumnConverter(col, format, returnType);
if (converter != null) {
table.setConverterForColumn(returnType, col.getColumnName(), converter);
}
}
protected IConverter<?> createColumnConverter(MultivalueColumnElement<DomainObjectReference> col, String format,
Class<?> returnType) {
if (col.isDateType()) {
return createDateConverter(format, returnType);
} else if (col.isNumberType()) {
return createNumberConverter(format, returnType);
} else if (returnType.isEnum()) {
return createEnumConverter(format, returnType);
}
return createOtherConverter(format, returnType);
}
protected IConverter<?> createOtherConverter(String format, Class<?> returnType) {
return null;
}
protected IConverter<?> createEnumConverter(String format, Class<?> returnType) {
return new EnumConverter(e.getContext());
}
protected IConverter<?> createDateConverter(String format, Class<?> returnType) {
return (format != null) ? new SimpleDateConverter(format) : null;
}
protected IConverter<?> createNumberConverter(String format, Class<?> returnType) {
if (format != null) {
IConverter<?> converter = WebApplication.get().getConverterLocator().getConverter(returnType);
GeneratedNumberTextField.customizeConverter(converter, format);
return converter;
}
return null;
}
public static GenericDataTablePanel createTable(String wicketId,
IModel<List<?>> data, GenericDataTableConfigurator<?> config) {
TableBuilderI builder = StylingFactory.getStylingStrategy().getTableBuilder();
builder.initTableBuilder(wicketId, data, config);
return builder.getTablePanel();
}
/************************************************************************************
* C o n v e n i e n c e w r a p p e r m e t h o d s f o r t h e c o n f i g
* u r a t o r //
************************************************************************************/
public GenericDataTableConfigurator config() {
return tableBuilder.getTableConfigurator();
}
public GeneratedGenericDataTableFactory withSortType(TableSortType sortType) {
tableBuilder.getTableConfigurator().withSortType(sortType);
return this;
}
public GeneratedGenericDataTableFactory withColumnConfigurator(GenericDataTableColumnConfigurator columnConfigurator) {
tableBuilder.getTableConfigurator().withColumnConfigurator(columnConfigurator);
return this;
}
public GeneratedGenericDataTableFactory withRowsPerPage(int rowsPerPage) {
tableBuilder.getTableConfigurator().withRowsPerPage(rowsPerPage);
return this;
}
public GeneratedGenericDataTableFactory withInitialSortOrder(ColumnSortOrder initialSortOrder) {
tableBuilder.getTableConfigurator().withInitialSortOrder(initialSortOrder);
return this;
}
public GeneratedGenericDataTableFactory withInitialSortColumn(String initialSortColumn) {
tableBuilder.getTableConfigurator().withInitialSortColumn(initialSortColumn);
return this;
}
public GeneratedGenericDataTableFactory withColumns(String... columns) {
tableBuilder.getTableConfigurator().withColumns(columns);
return this;
}
public GeneratedGenericDataTableFactory withSortColumns(String... sortColumns) {
tableBuilder.getTableConfigurator().withSortColumns(sortColumns);
return this;
}
public GeneratedGenericDataTableFactory withRowItemClass(Class rowItemClass) {
tableBuilder.getTableConfigurator().withRowItemClass(rowItemClass);
return this;
}
public GeneratedGenericDataTableFactory withNavigationBar(TableItemPosition navigationbarPosition) {
tableBuilder.getTableConfigurator().withNavigationBar(navigationbarPosition);
return this;
}
}