      /**
       * The UiBinder interface used by this example.
       */
      interface Binder extends UiBinder<Widget, CwCellTree> {
      }

      /**
       * The constants used in this Content Widget.
       */
      public static interface CwConstants extends Constants {
        String cwCellTreeDescription();

        String cwCellTreeName();
      }

      /**
       * The CellTree.
       */
      @UiField(provided = true)
      CellTree cellTree;

      /**
       * The label that shows selected names.
       */
      @UiField
      Label selectedLabel;

      /**
       * Initialize this example.
       */
      @Override
      public Widget onInitialize() {
        final MultiSelectionModel<ContactInfo> selectionModel =
          new MultiSelectionModel<ContactInfo>(ContactDatabase.ContactInfo.KEY_PROVIDER);
        selectionModel.addSelectionChangeHandler(
            new SelectionChangeEvent.Handler() {
              public void onSelectionChange(SelectionChangeEvent event) {
                StringBuilder sb = new StringBuilder();
                boolean first = true;
                List<ContactInfo> selected = new ArrayList<ContactInfo>(
                    selectionModel.getSelectedSet());
                Collections.sort(selected);
                for (ContactInfo value : selected) {
                  if (first) {
                    first = false;
                  } else {
                    sb.append(", ");
                  }
                  sb.append(value.getFullName());
                }
                selectedLabel.setText(sb.toString());
              }
            });

        CellTree.Resources res = GWT.create(CellTree.BasicResources.class);
        cellTree = new CellTree(
            new ContactTreeViewModel(selectionModel), null, res);
        cellTree.setAnimationEnabled(true);

        // Create the UiBinder.
        Binder uiBinder = GWT.create(Binder.class);
        Widget widget = uiBinder.createAndBindUi(this);
        return widget;
      }