@Override
  public void start(final AcceptsOneWidget panel, final EventBus eventBus) {
    if (StringUtils.isEmpty(documentID)) {
      goTo(new DocumentSelectionPlace());
    }

    // register this class as the presenter
    listView.setPresenter(this);

    checkAuthentication(eventBus);

    // set the change handler for the table selection widget
    eventBus.addHandler(
        TableChangeEvent.TYPE,
        new TableChangeEventHandler() {
          @Override
          public void onTableChange(final TableChangeEvent event) {
            goTo(new ListPlace(documentID, event.getNewTableName(), ""));
          }
        });

    // populate the cell table with data
    final AsyncCallback<LayoutGroup> callback =
        new AsyncCallback<LayoutGroup>() {
          @Override
          public void onFailure(final Throwable caught) {
            // TODO: create a way to notify users of asynchronous callback failures
            GWT.log(
                "AsyncCallback Failed: OnlineGlomService.getListViewLayout(): "
                    + caught.getMessage());
          }

          @Override
          public void onSuccess(final LayoutGroup result) {
            // TODO check if result.getTableName() is the same as the tableName field. Update it if
            // it's not the
            // same.
            listView.setCellTable(documentID, tableName, result, quickFind);
          }
        };

    final String localeID = Utils.getCurrentLocaleID();
    OnlineGlomServiceAsync.Util.getInstance()
        .getListViewLayout(documentID, tableName, localeID, callback);

    // TODO: Avoid the code duplication with DetailsActivity.
    // set the change handler for the quickfind text widget
    eventBus.addHandler(
        QuickFindChangeEvent.TYPE,
        new QuickFindChangeEventHandler() {
          @Override
          public void onQuickFindChange(final QuickFindChangeEvent event) {
            // We switch to the List view, to show search results.
            // TODO: Show the details view if there is only one result.
            goTo(new ListPlace(documentID, tableName, event.getNewQuickFindText()));
          }
        });

    // Set the change handler for the table selection widget
    eventBus.addHandler(
        LocaleChangeEvent.TYPE,
        new LocaleChangeEventHandler() {
          @Override
          public void onLocaleChange(final LocaleChangeEvent event) {
            // note the empty primary key item
            goTo(new ListPlace(documentID, tableName, quickFind));
          }
        });

    // indicate that the view is ready to be displayed
    panel.setWidget(listView.asWidget());
  }
 @Override
 protected void clearView() {
   super.clearView();
   listView.clear();
 }