code: @Override
  	public int[] sort(final int col, final boolean ascending) {
  		if (!isSortable(col)) {
  			throw new IllegalStateException("Attempted to sort on column "
  					+ col + ", which is not sortable");
  		}
  
  		// Obtains the list of top level nodes, sorts them & re-add them in order
  		TableTreeNode root = getRootNode();
  		List<TableTreeNode> topLevelNodes = new ArrayList<>(root.getChildCount());
  
  		for (int i = 0; i < root.getChildCount(); i++) {
  			topLevelNodes.add((TableTreeNode) root.getChildAt(i));
  		}
  
  		Comparator<TableTreeNode> comp = new Comparator<TableTreeNode>() {
  			@Override
  			public int compare(final TableTreeNode obj1, final TableTreeNode obj2) {
  				Comparator backing = comparators.get(col);
  				return backing.compare(obj1.getData(), obj2.getData());
  			}
  		};
  
  		if (ascending) {
  			Collections.sort(topLevelNodes, comp);
  		} else {
  			Collections.sort(topLevelNodes, Collections.reverseOrder(comp));
  		}
  
  		root.removeAll();
  
  		for (TableTreeNode node : topLevelNodes) {
  			root.add(node);
  		}
  
  		return null;
  	}
docs: {@inheritDoc}