I would like to produce nicely formatted tabular text from arbitrary dataset object models. Is there a good library to do this in Java?
Specifically, I want output that is formatted like command line data management tools such as the CLI for mysql. Example:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name | varchar(100) | YES | | NULL | |
| release | year(4) | YES | | NULL | |
| studio | varchar(50) | YES | | NULL | |
| review | varchar(50) | YES | | NULL | |
| gross | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
One main challenge is that I won't automatically know the maximum column widths before I start traversing the data. Also, there are plenty of edge cases, such as dealing with very large value lengths and large numbers of rows and columns.
If I have to build this myself, I imagine I would make use of String.format, and I'd need to pre-analyze the full dataset before starting the output. That's a very low level of coding though, so I'd love to find a good library that has already solved this problem.
For those interested, I have forked TableFormatter (which is dual license GPL and MIT) to make it generics-friendly and remove all the compilation warnings.
Note that I use Java 7 diamond operator so to make it compatible with Java 6 will require adding the types in lists declarations.
trac.inamik.com/trac/jtable_format is under GPL license, not suitable in some cases.
Another option (Apache 2 license):
http://sourceforge.net/projects/texttablefmt/
Check out TableFormatter: it appears to do what you want for formatting tabular data. Source code is also available. You can append rows and cells to a table using a fluent interface approach. An example follows:
So it will build up the cells in the correct format and adjust whitespace accordingly. It also will allow you to do basic alignment of text within the cell (center, top, bottom)