private void showTagInput() {
    TagCriteria criteria = new TagCriteria();
    criteria.addSortNamespace(PageOrdering.ASC);
    criteria.addSortSemantic(PageOrdering.ASC);
    criteria.addSortName(PageOrdering.ASC);
    GWTServiceLookup.getTagService()
        .findTagsByCriteria(
            criteria,
            new AsyncCallback<PageList<Tag>>() {
              public void onFailure(Throwable caught) {
                CoreGUI.getErrorHandler().handleError(MSG.view_tags_error_1(), caught);
              }

              public void onSuccess(PageList<Tag> result) {
                String[] values = new String[result.size()];
                int i = 0;
                for (Tag tag : result) {
                  values[i++] = tag.toString();
                }
                tagInputDialog.setTagSuggestions(values);
              }
            });

    tagInputDialog.show();
    tagInputDialog.place(addImg);
    markForRedraw();
  }
  private void setup() {
    // destroy dated tagLayouts
    if (tagLayouts != null) {
      for (LocatableHLayout tagLayout : tagLayouts) {
        removeMember(tagLayout);
        tagLayout.destroy();
      }
    }
    // remove remaining members
    for (Canvas canvas : getMembers()) {
      removeMember(canvas);
    }

    // [re]build

    addMember(tagTitleLabel);

    tagLayouts = createTagLayouts();
    for (LocatableHLayout tagLayout : tagLayouts) {
      addMember(tagLayout);
    }

    if (!readOnly) {
      addMember(addImg);
      tagInputDialog.place(addImg);
    }

    markForRedraw();
  }