@Dependent
public class TopicFilteredResultsView extends BaseFilteredResultsView<RESTTopicCollectionItemV1>
    implements TopicFilteredResultsPresenter.Display {

  private final PushButton bulkImport =
      UIUtilities.createPushButton(PressGangCCMSUI.INSTANCE.BulkTopicImport());
  private final PushButton bulkOverwrite =
      UIUtilities.createPushButton(PressGangCCMSUI.INSTANCE.BulkTopicOverwrite());
  private final PushButton atomFeed =
      UIUtilities.createPushButton(PressGangCCMSUI.INSTANCE.ATOMFeed(), false, true);

  @NotNull
  private final TextColumn<RESTTopicCollectionItemV1> idColumn =
      new TextColumn<RESTTopicCollectionItemV1>() {
        @Override
        @NotNull
        public String getValue(@Nullable final RESTTopicCollectionItemV1 object) {
          if (object == null) {
            return null + "";
          }
          return object.getItem().getId().toString();
        }
      };

  @NotNull
  private final TextColumn<RESTTopicCollectionItemV1> titleColumn =
      new TextColumn<RESTTopicCollectionItemV1>() {
        @Override
        @NotNull
        public String getValue(@Nullable final RESTTopicCollectionItemV1 object) {
          if (object == null) {
            return null + "";
          }
          return object.getItem().getTitle();
        }
      };

  public TopicFilteredResultsView() {
    super(
        PressGangCCMSUI.INSTANCE.PressGangCCMS(),
        PressGangCCMSUI.INSTANCE.SearchResults(),
        PressGangCCMSUI.INSTANCE.CreateTopic());

    getResults().addColumn(idColumn, PressGangCCMSUI.INSTANCE.TopicID());
    getResults().addColumn(titleColumn, PressGangCCMSUI.INSTANCE.TopicTitle());

    /* Unlike every other results view, the topic results don't have a search button */
    this.getEntitySearch().removeFromParent();

    addActionButton(bulkImport);
    addActionButton(bulkOverwrite);
    addActionButton(atomFeed);
  }

  @NotNull
  @Override
  public PushButton getBulkImport() {
    return bulkImport;
  }

  @NotNull
  @Override
  public PushButton getBulkOverwrite() {
    return bulkOverwrite;
  }

  @NotNull
  @Override
  public PushButton getAtomFeed() {
    return atomFeed;
  }
}