The only thing I would change in that code is the getTopic method:
Both your implementation and mine use an Iterator over
topicHierarchySet (yours when creating the ArrayList), but my implementation a) doesn't iterate over the entire set but only the necessary part, and b) doesn't create the List object. Both implementations work just fine, mine is slightly better in both memory and time.
And I would probably store the return value of ResultColumn.values() in a ResultColumn[] instead of calling the method twice, but that too is only to improve performance slightly.
Oh, and a
for not using the return value of
order() as the column number. I don't know if you did this on purpose, but
order() should only be used in data structures like EnumSet and EnumMap, definitely not for custom code. The reason is simple - if you add an enum constant in the middle, the return value of
order() changes, and that can lead to unexpected results.