/** Configure the tree adding columns. */
  @Override
  protected void configureTree() {
    Trees.disposeColumns(getViewer());

    getViewer().getTree().setLinesVisible(true);
    getViewer().getTree().setHeaderVisible(true);

    List<ColumnConfiguration> columns = getConfiguration().getColumnConfigurations();
    for (ColumnConfiguration config : columns) {
      if (!config.isVisible()) {
        continue;
      }
      ThreadColumn column = ThreadColumn.getColumn(config.getName());

      TreeColumn treeColumn = new TreeColumn(getViewer().getTree(), SWT.NONE);
      treeColumn.setText(column.label);
      treeColumn.setWidth(column.defalutWidth);
      treeColumn.setAlignment(column.initialAlignment);
      treeColumn.setToolTipText(column.toolTip);
      treeColumn.addSelectionListener(
          new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
              if (e.widget instanceof TreeColumn) {
                sortColumn((TreeColumn) e.widget);
              }
            }
          });
    }
    getConfiguration().addColumnListeners(getViewer());
  }
 /*
  * @see IConfigurableColumn#getColumns()
  */
 @Override
 public List<String> getColumns() {
   ArrayList<String> columnLabels = new ArrayList<String>();
   ThreadColumn[] values = ThreadColumn.values();
   for (ThreadColumn value : values) {
     columnLabels.add(value.label);
   }
   return columnLabels;
 }