public ResultsTopComponent(RtcQuery query) {
    this.query = query;
    manager = new ExplorerManager();
    initComponents();
    outlineView = new RtcOutline();
    outlineView.getOutline().addMouseListener(new MouseListenerImpl(outlineView.getOutline()));
    outlineView.getOutline().setDefaultEditor(Property.class, null);

    outlineView
        .getOutline()
        .setDefaultRenderer(
            Property.class,
            new LabelProviderTableCellRenderer(
                outlineView.getOutline().getDefaultRenderer(Property.class)));
    outlineView.getOutline().setDefaultRenderer(Object.class, new EmptyTableCellRenderer());

    //        outlineView.getOutline().getModel()

    Outline outline = outlineView.getOutline();
    this.removeDefaultColumn(outline);
    outline.setRootVisible(false);
    add(outlineView);

    ic.add(this.query);
    HashMap hm = new HashMap();
    hm.put(query, previousQuery);
    ic.add(hm);
    previousQuery = this.query;

    setDisplayName(
        NbBundle.getMessage(ResultsTopComponent.class, "ResultTopComponent.name")
            + " "
            + this.query.getEditableName());
    setFocusable(true);
  }
    @Override
    public void run() {
      if (!EventQueue.isDispatchThread()) {
        ProgressHandle ph;
        ph =
            ProgressHandleFactory.createHandle(
                NbBundle.getMessage(ResultsTopComponent.class, "PreparingResultsWindow.msg"));
        ph.start();
        n = new ResultsNode(query);
        rtcsc = query.getColumns();
        List cols = Arrays.asList(rtcsc);
        Iterator colsIt = cols.iterator();
        alps = new ArrayList();
        while (colsIt.hasNext()) {
          RtcQueryColumn rsc = (RtcQueryColumn) colsIt.next();
          alps.add(rsc.getColumnIdentifier());
          alps.add(rsc.getColumnDisplayName());
        }
        actualCols = alps.toArray(new String[] {});
        EventQueue.invokeLater(this);
        ph.finish();
      } else {
        outlineView.setPropertyColumns(alps.toArray(new String[] {}));
        Outline outline = outlineView.getOutline();
        removeDefaultColumn(outline);
        ETableColumnModel etcm = (ETableColumnModel) outline.getColumnModel();

        // TODO: szymon : change j to proper sort order
        int j = 1;
        for (int i = 1; i < rtcsc.length; i++) {
          ETableColumn etc = (ETableColumn) etcm.getColumn(i);
          if (alps.get(i * 2 - 2).equals("id")) {
            etc.setMaxWidth(20);
          }
          if (alps.get(i * 2 - 2).equals("internalSeverity")) {
            etc.setMaxWidth(20);
          }
          if (alps.get(i * 2 - 2).equals("internalPriority")) {
            etc.setMaxWidth(20);
          }
          if (alps.get(i * 2 - 2).equals("workItemType")) {
            etc.setMaxWidth(20);
          }
          if (alps.get(i * 2 - 2).equals("internalState")) {
            etc.setMaxWidth(85);
          }
          if (alps.get(i * 2 - 2).equals("summary")) {
            etc.setMaxWidth(550);
            etc.setWidth(475);
            etc.setMinWidth(400);
          }
          if (rtcsc[i].isSortColumn()) {
            etcm.setColumnSorted(etc, rtcsc[i].isAscending(), j);
            j++;
          }
        }

        manager.setRootContext(n);
      }
    }
 @Override
 public void mouseClicked(MouseEvent e) {
   int row = outline.rowAtPoint(e.getPoint());
   int col = outline.columnAtPoint(e.getPoint());
   if (prevCol == col && prevRow == row && System.currentTimeMillis() - time < 500) {
     Node node = Visualizer.findNode(outline.getValueAt(row, 0));
     time = 0;
     node.getPreferredAction().actionPerformed(null);
   } else {
     time = System.currentTimeMillis();
   }
   prevRow = row;
   prevCol = col;
 }
  private void removeDefaultColumn(Outline o) {
    TableColumn nodeColumn = o.getColumnModel().getColumn(0);
    nodeColumn.setHeaderValue("");
    nodeColumn.setWidth(1);
    nodeColumn.setMaxWidth(1);
    nodeColumn.setMinWidth(1);
    //        o.getColumnModel().removeColumn(nodeColumn);

  }