private CellTable<ShopItem> createResultTable() {
    CellTable<ShopItem> resultTable = new CellTable<ShopItem>();
    resultTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED);

    dataProvider = new FilteredListDataProvider<ShopItem>(new ShopFilter());

    dataProvider.addDataDisplay(resultTable);
    updateTable();
    dataProvider.setFilter(filterString);

    Column<ShopItem, String> titleColumn =
        new Column<ShopItem, String>(new ClickableTextCell()) {
          @Override
          public String getValue(ShopItem object) {
            return object.getTitle();
          }
        };
    titleColumn.setFieldUpdater(
        new FieldUpdater<ShopItem, String>() {
          @Override
          public void update(int index, ShopItem object, String value) {
            if (object instanceof Movie) {
              MovieDetailView view = new MovieDetailView(layout, (Movie) object);
              view.initialize();
              view.show();
            } else if (object instanceof Series) {
              SeriesDetailView view = new SeriesDetailView(layout, (Series) object);
              view.initialize();
              view.show();
            }
          }
        });

    TextColumn<ShopItem> typeColumn =
        new TextColumn<ShopItem>() {
          @Override
          public String getValue(ShopItem object) {
            if (object instanceof Movie) {
              return "Movie";
            } else if (object instanceof Series) {
              return "Series";
            }
            return "";
          }
        };

    Column<ShopItem, SafeHtml> loanableColumn =
        new Column<ShopItem, SafeHtml>(new SafeHtmlCell()) {
          @Override
          public SafeHtml getValue(ShopItem object) {
            SafeHtmlBuilder sb = new SafeHtmlBuilder();
            if (object.isLoanable()) {
              sb.appendHtmlConstant("<span style=\"color:green\">");
              sb.appendEscaped("available");
            } else {
              if (object.isLoaned()) {
                sb.appendHtmlConstant("<span style=\"color:blue\">");
                sb.appendEscaped("is loaned");

              } else {
                sb.appendHtmlConstant("<span style=\"color:red\">");
                sb.appendEscaped("not available");
              }
            }
            sb.appendHtmlConstant("</span>");
            return sb.toSafeHtml();
          }
        };

    resultTable.addColumn(titleColumn, "Title");
    resultTable.addColumn(typeColumn, "Type");
    resultTable.addColumn(loanableColumn, "Available");

    return resultTable;
  }
 private void updateTable() {
   dataProvider.setList(resultsTableList);
   if (onlyLoanable) onlyLoanableButton.setText("show all");
   else onlyLoanableButton.setText("show only available");
 }