@Override
  public void update() {
    readDocuments();

    m_data.clearSelection();
    m_viewer.setInput(m_documentData.getDocuments());
    m_checkStateHandler.selectAll();

    ColumnsResizeControlListener.refreshColumnsWidth(m_viewer.getTable());
  }
  private void createDocumentsTable(final Composite parent) {
    final Table table = new Table(parent, SWT.CHECK | SWT.FULL_SELECTION | SWT.BORDER);
    table.setHeaderVisible(true);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    m_viewer = new CheckboxTableViewer(table);
    m_viewer.setContentProvider(new ArrayContentProvider());
    m_checkStateHandler = new DocumentsCheckstateHandler(m_viewer, m_data);
    m_viewer.setCheckStateProvider(m_checkStateHandler);

    /* Name. */
    final TableViewerColumn nameColumn = new TableViewerColumn(m_viewer, SWT.LEFT);
    nameColumn.setLabelProvider(new DocumentsNameProvider());
    nameColumn
        .getColumn()
        .setText(Messages.getString("ImportAttachmentsPreviewPage.4")); // $NON-NLS-1$
    nameColumn.getColumn().setResizable(false);
    ColumnViewerSorter.registerSorter(nameColumn, new DocumentsNameComparator());
    ColumnsResizeControlListener.setMinimumPackWidth(nameColumn.getColumn());

    /* Mime type. */
    final TableViewerColumn typeColumn = new TableViewerColumn(m_viewer, SWT.LEFT);
    typeColumn.setLabelProvider(new DocumentsTypeProvider());
    typeColumn
        .getColumn()
        .setText(Messages.getString("ImportAttachmentsPreviewPage.5")); // $NON-NLS-1$
    typeColumn.getColumn().setResizable(false);
    ColumnViewerSorter.registerSorter(typeColumn, new DocumentsTypeComparator());
    ColumnsResizeControlListener.setMinimumPackWidth(typeColumn.getColumn());

    /* Status. */
    final TableViewerColumn statusColumn = new TableViewerColumn(m_viewer, SWT.LEFT);
    statusColumn.setLabelProvider(new DocumentsStatusProvider(m_documentData));
    statusColumn
        .getColumn()
        .setText(Messages.getString("ImportAttachmentsPreviewPage.2")); // $NON-NLS-1$
    statusColumn.getColumn().setResizable(false);
    ColumnViewerSorter.registerSorter(statusColumn, new DocumentsStatusComparator(m_documentData));
    ColumnsResizeControlListener.setMinimumPackWidth(statusColumn.getColumn());

    table.addControlListener(new ColumnsResizeControlListener());

    ColumnSortListener.setSortState(nameColumn, Boolean.TRUE);

    /* Double-click shows status */
    m_viewer.addOpenListener(
        new IOpenListener() {
          @Override
          public void open(final OpenEvent event) {
            handleShowDocumentStatus((IStructuredSelection) event.getSelection());
          }
        });

    m_viewer.addCheckStateListener(m_checkStateHandler);

    final IObservableValue target = new WritableValue();
    final IObservableValue model =
        BeansObservables.observeValue(m_data, DocumentsAttachmentsData.PROPERTY_SELECTION_COUNT);

    final DataBinder countBinder = new DataBinder(target, model);
    countBinder.addModelAfterGetValidator(
        new NumberNotExactValidator(
            Integer.valueOf(0),
            IStatus.ERROR,
            Messages.getString("ImportAttachmentsPreviewPage.6"))); // $NON-NLS-1$
    m_binding.bindValue(countBinder);
  }