[ https://issues.apache.org/jira/browse/WICKET-4802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13473114#comment-13473114 ]
Martin Grigorov commented on WICKET-4802: ----------------------------------------- Hi Jesse, I didn't have time to look at your proposal yet. I just want to let you know about another implementation of your idea: https://github.com/wicketstuff/core/tree/master/jdk-1.6-parent/wicket-poi-parent, https://github.com/wicketstuff/core/wiki/POI. > Standard IDataColumn > -------------------- > > Key: WICKET-4802 > URL: https://issues.apache.org/jira/browse/WICKET-4802 > Project: Wicket > Issue Type: New Feature > Components: wicket-extensions > Affects Versions: 6.1.0 > Reporter: Jesse Long > Priority: Minor > > In Igor's book he describes a way of exporting a data table to CSV. It > requires tagging exportable columns with a interface, which allows retrieving > of the data for the column by passing it the row model. > I, and I'm sure many others, have implemented this functionality, and we all > have our own CSVExportToolbar, or something similar. The problem is that each > export implementation is checking for instances of their own hand-crafted > IDataColumn interface. This makes it difficult for people to write libraries > that provide columns that will be exportable across the board. > I propose that we add a standard IDataColumn that can be used to tagging > exportable columns, and which every CSVExportToolbar and ExcelExportToolbar > etc can check for when determining which columns to use to export. > Something like: > /** does not need sort parameter, does not need to extend IColumn */ > public interface IDataColumn<R, T> > { > /** get data for row by passing row model, in imodel format to allow this > method to be used for rendering in an abstract implementation. */ > IModel<T> getDataModel(IModel<R> rowModel); > /** get column header, useful in exporting. same signature as > AbstractColumn method */ > IModel<String> getDisplayModel(); > } > Then an abstract implementation, where the user only needs to implement > getDataModel() > public abstract class AbstractDataColumn<R, S, T> > extends AbstractColumn<R, S> > implements IDataColumn<R, T> > { > // normal AbstractColumn constructors. > protected Component createNewDisplayComponent(String componentId, > IModel<T> dataModel) > { > return new Label(componentId, dataModel); > } > @Override > public void populateItem(Item<ICellPopulator<R>> cellItem, String > componentId, IModel<R> rowModel) > { > cellItem.add(createNewDisplayComponent(componentId, > getDataModel(rowModel))); > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira