/** Adds the header to the TreeTable. */
  protected void addHeader() {
    // create the view for side columns
    SideColumnsView sideColumns = new SideColumnsView("sideColumns", null);
    add(sideColumns);
    if (columns != null) {
      for (int i = 0; i < columns.length; i++) {
        IColumn column = columns[i];
        if ((column.getLocation().getAlignment() == Alignment.LEFT)
            || (column.getLocation().getAlignment() == Alignment.RIGHT)) {
          TreeTableItem component = new TreeTableItem(i);
          Component cell = column.newHeader(sideColumns, TreeTableItem.ID);
          component.add(cell);
          sideColumns.addColumn(column, component, null);
        }
      }
    }

    // create the view for middle columns
    MiddleColumnsView middleColumns = new MiddleColumnsView("middleColumns", null, hasLeftColumn());
    add(middleColumns);
    if (columns != null) {
      for (int i = 0; i < columns.length; i++) {
        IColumn column = columns[i];
        if (column.getLocation().getAlignment() == Alignment.MIDDLE) {
          TreeTableItem component = new TreeTableItem(i);
          Component cell = column.newHeader(middleColumns, TreeTableItem.ID);
          component.add(cell);
          middleColumns.addColumn(column, component, null);
        }
      }
    }
  }