Tableflow – Universal Table Renderer
What is Tableflow?
Tableflow is a fairly unique system to connect tabular data using an executable dataflow paradigm. Each state in this dataflow is represented by a specific retrieval of tabular data from a parameterized data source. Transitions between these states are triggered by the selection of a particular row (tuple) in the source state. The selected tuple becomes the set of transition parameters for which the target state is invoked.
What is UTR?
UTR is an abbreviation for Universal Table Renderer. It’s the (web layer) rendering component of the Tableflow system. In short, it takes a generic representation of the tabular data as input, and based on an XML rendering definition, it renders the raw data to a user’s screen.
Why not use one of the many table component JSF libraries offer?
Currently, there are many JSF libraries that offer advanced table components. However, at the end of 2003/start of 2004, this wasn’t the case. The UTR has been developed in that timeframe. Had the tableflow project started recently, we surely would have based our implementation on such existing table component.
Nevertheless, the UTR offers a number of advanced features which still can’t be found in most existing JSF table components. Actually, the UTR is more closely related to what is often marketed as “datagrid” components.
Example
An example of the UTR (the table component) is Overview table advertisers
Current features
- Built-in filtering, paging, sorting (last two features are offered by most other components nowadays)
- Pluggable, abstract and stateless column renderers (custom components in JSF are more heavyweight, and backing bean bindings less reusable)
- Ranged paging renderer, with pluggable abbreviations. (shows range of values on each page in the set)
- Parameters for datasource can be bound to so-called “useroptions” in the interface
- In addition to just being “values”, useroptions can define both customized server-side and client-side behaviors.
- Raw data retrieved from datasource is managed via a lifecyle and kept resident using a transactional cache
- Tableflow tracks changes to useroptions and only refetches data from source when necessary.
- Pluggable, abstract and stateless row renderers (usable for the standard header, footer, but also able to render separate rows after and before content rows and to take over rendering of an entire content row)
- State synchronization. Click on a page showing a table, causes an automatic server-side state sync to take place, even after a session has already expired.
Wishlist:
- Streaming paging
- Documentation
- Instance binding for common artifacts as DataSources, Column / Row renderers, etc.
- More extensive JSF support – Support for statefull JSF components (stateless are already supported)
- API compatibility with JSF DataTable (drop in replacement)
- Multiple sub-sorters
- Move all processing one layer to the ‘left’ (to the client, i.e. javascript in the browser)
- Move all processing one layer to the ‘right’ (to the datasource, i.e. SQL in the database)
Download
Project page
Download here!
