Example usage for org.apache.wicket.model Model setObject

List of usage examples for org.apache.wicket.model Model setObject

Introduction

In this page you can find the example usage for org.apache.wicket.model Model setObject.

Prototype

@Override
public void setObject(final T object) 

Source Link

Document

Set the model object; calls setObject(java.io.Serializable).

Usage

From source file:com.cubeia.games.poker.admin.wicket.pages.history.ShowHand.java

License:Open Source License

@SuppressWarnings("serial")
private void addEvents(final HistoricHand hand) {
    DataView<HandHistoryEvent> events = new DataView<HandHistoryEvent>("events",
            new ListDataProvider<HandHistoryEvent>(hand.getEvents())) {
        @Override//w  w w . j  a v a 2 s  . co m
        protected void populateItem(Item<HandHistoryEvent> item) {
            HandHistoryEvent event = item.getModelObject();

            Model<String> action = new Model<String>();
            Model<String> amount = new Model<String>();
            Model<String> playerId = new Model<String>();
            CardList kickers = new CardList("kickers");
            CardList cards = new CardList("cards");

            item.add(new Label("time", new Date(event.getTime()).toString()));
            item.add(new Label("action", action));
            item.add(new Label("amount", amount));
            item.add(cards);
            item.add(kickers);
            item.add(new Label("playerId", playerId));

            if (event instanceof PlayerAction) {
                PlayerAction playerAction = (PlayerAction) event;
                action.setObject(playerAction.getAction().getName());
                playerId.setObject(String.valueOf(playerAction.getPlayerId()));
                amount.setObject(formatAmount(playerAction.getAmount()));
            } else if (event instanceof PotUpdate) {
                PotUpdate potUpdate = (PotUpdate) event;
                action.setObject("Pot update");
                amount.setObject(stringRepresentation(potUpdate));
            } else if (event instanceof PlayerCardsDealt) {
                PlayerCardsDealt playerCards = (PlayerCardsDealt) event;
                action.setObject("Player cards dealt");
                cards.setList(playerCards.getCards());
                playerId.setObject(String.valueOf(playerCards.getPlayerId()));
            } else if (event instanceof TableCardsDealt) {
                TableCardsDealt playerCards = (TableCardsDealt) event;
                action.setObject("Table cards dealt");
                cards.setList(playerCards.getCards());
            } else if (event instanceof PlayerCardsExposed) {
                PlayerCardsExposed exposed = (PlayerCardsExposed) event;
                action.setObject("Players cards exposed");
                playerId.setObject(String.valueOf(exposed.getPlayerId()));
                cards.setList(exposed.getCards());
            } else if (event instanceof ShowDownSummary) {
                action.setObject("Show down summary");
            } else if (event instanceof PlayerBestHand) {
                PlayerBestHand bestHand = (PlayerBestHand) event;
                playerId.setObject(String.valueOf(bestHand.getPlayerHand().getPlayerId()));
                HandStrengthCommon handInfo = null;
                if (bestHand.getHandInfoCommon() instanceof HandStrengthCommon) {
                    handInfo = (HandStrengthCommon) bestHand.getHandInfoCommon();
                }
                if (handInfo != null) {
                    BigDecimal winAmount = hand.getResults().getResults()
                            .get(bestHand.getPlayerHand().getPlayerId()).getTotalWin();
                    if (winAmount.compareTo(BigDecimal.ZERO) > 0) {
                        amount.setObject("Win (" + formatAmount(winAmount) + ")");
                    }
                    List<GameCard> kickerCards = handInfo.getKickerCards();
                    BestHandType handType = handInfo.getHandType();
                    action.setObject(handType.getName());
                    List<GameCard> list = new ArrayList<GameCard>();
                    switch (handType) {
                    case HIGH_CARD:
                        list.add(handInfo.getGroups().get(0).get(0));
                        kickerCards.remove(0);
                        cards.setList(list);
                        break;
                    case TWO_PAIRS:
                        list.addAll(handInfo.getCardsUsedInHand());
                        cards.setList(list.subList(0, 4));
                        break;
                    case PAIR:
                    case THREE_OF_A_KIND:
                    case FOUR_OF_A_KIND:
                        cards.setList(handInfo.getGroups().get(2));
                        break;
                    case NOT_RANKED:
                    case STRAIGHT:
                    case FLUSH:
                    case FULL_HOUSE:
                    case STRAIGHT_FLUSH:
                    case ROYAL_STRAIGHT_FLUSH:
                    default:
                        cards.setList(handInfo.getCardsUsedInHand());
                        break;
                    }
                    if (kickerCards != null && kickerCards.size() > 0) {
                        kickers.setList(kickerCards);
                    }
                }
            }
        }
    };
    add(events);
}

From source file:com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteItemDefinitionPanel.java

License:Apache License

private void initLayout(final IModel<ItemDefinition<?>> model) {
    final Model<String> itemDefinitionAsStringModel = new Model<>(null);
    AutoCompleteTextField<String> input = new AutoCompleteTextField<String>(ID_INPUT,
            itemDefinitionAsStringModel, String.class, createAutoCompleteSettings()) {

        private static final long serialVersionUID = 1L;

        @Override// w  ww .  j a v a 2 s  . c o  m
        protected Iterator<String> getChoices(String input) {
            List<String> defsAsString = new ArrayList<>();
            for (ItemDefinition<?> def : listChoices(input).values()) {
                defsAsString.add(def.getName().getLocalPart());
            }
            return defsAsString.iterator();

        }

        @Override
        protected void onConfigure() {
            super.onConfigure();
            itemDefinitionAsStringModel.setObject(null);
        }

    };

    input.add(new OnChangeAjaxBehavior() {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            String newValue = itemDefinitionAsStringModel.getObject();
            if (StringUtils.isNotBlank(newValue)) {
                ItemDefinition<?> def = listChoices("").get(newValue);
                if (def != null) {
                    model.setObject(def);
                }
            }
        }
    });

    add(input);
}

From source file:com.evolveum.midpoint.web.component.assignment.SimpleParametricRoleSelector.java

License:Apache License

private void initLayout() {

    IModel<String> labelParamModel = new IModel<String>() {
        @Override//from ww w  . ja  v  a  2 s . c  o  m
        public void detach() {
        }

        @Override
        public String getObject() {
            return getLabelParam();
        }

        @Override
        public void setObject(String object) {
        }
    };
    add(new Label(ID_LABEL_PARAM, labelParamModel) {
        @Override
        protected void onConfigure() {
            setVisible(getLabelParam() != null);
            super.onConfigure();
        }
    });

    IModel<String> labelRoleModel = new IModel<String>() {
        @Override
        public void detach() {
        }

        @Override
        public String getObject() {
            return getLabelRole();
        }

        @Override
        public void setObject(String object) {
        }
    };
    add(new Label(ID_LABEL_ROLE, labelRoleModel) {
        @Override
        protected void onConfigure() {
            setVisible(getLabelRole() != null);
            super.onConfigure();
        }
    });

    paramList = new ListView<String>(ID_LIST_PARAM, paramListModel) {
        @Override
        protected void populateItem(ListItem<String> item) {
            item.add(createParamLink(ID_ITEM_PARAM, item.getModel()));
        }

    };
    paramList.setOutputMarkupId(true);
    add(paramList);

    final Model<String> addInputModel = new Model<String>();
    TextField<String> addInput = new TextField<>(ID_ADD_INPUT, addInputModel);
    addInput.setOutputMarkupId(true);
    addInput.add(new AjaxFormComponentUpdatingBehavior("blur") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            // nothing to do, Ajax behavior is there only to get data to model
        }
    });
    add(addInput);

    AjaxLink<String> addLink = new AjaxLink<String>(ID_ADD_LINK) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            String newParam = addInputModel.getObject();
            LOGGER.debug("ADD cliked, input field value: {}", newParam);
            if (!StringUtils.isBlank(newParam)) {
                addParam(newParam);

            }
            addInputModel.setObject(null);
            target.add(SimpleParametricRoleSelector.this);
        }
    };
    add(addLink);

    AjaxLink<String> deleteLink = new AjaxLink<String>(ID_DELETE_LINK) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            LOGGER.debug("DELETE cliked, selected param: {}", selectedParam);
            deleteParam(selectedParam);
            target.add(SimpleParametricRoleSelector.this);
        }
    };
    add(deleteLink);
}

From source file:cz.zcu.kiv.eegdatabase.wui.ui.history.HistoryPage.java

License:Apache License

public void addComponents(final ChoiceHistory choice) {

    this.choice = choice;

    isGroupAdmin = securityFacade.userIsGroupAdmin();
    Person loggedUser = EEGDataBaseSession.get().getLoggedUser();
    ResearchGroup defaultGroup = loggedUser.getDefaultGroup();
    groupId = defaultGroup == null ? 0 : loggedUser.getDefaultGroup().getResearchGroupId();

    final boolean admin = securityFacade.isAdmin();
    if (!admin && !isGroupAdmin) {
        throw new RestartResponseAtInterceptPageException(HomePage.class);
    }//ww  w .j  a v  a2 s .co  m

    if (admin) {
        groupId = 0;
        isGroupAdmin = false;
    }

    setPageTitle(ResourceUtils.getModel("title.page.history"));
    add(new ButtonPageMenu("leftMenu", HistoryLeftPageMenu.values()));

    final WebMarkupContainer container = new WebMarkupContainer("container");
    container.setOutputMarkupId(true);

    final HistoryTopDownloadsDataProvider topDownloadsDataProvider = new HistoryTopDownloadsDataProvider(
            historyFacade);
    topDownloadsDataProvider.setData(choice, isGroupAdmin, groupId);
    topDownloadsDataProvider.setSort("count", SortOrder.DESCENDING);

    final HistoryLastDownloadedDataProvider lastDownloadedDataProvider = new HistoryLastDownloadedDataProvider(
            historyFacade);
    lastDownloadedDataProvider.setData(choice, isGroupAdmin, groupId);
    lastDownloadedDataProvider.setSort("dateOfDownload", SortOrder.DESCENDING);

    final HistoryAllTimeRangeRecordsDataProvider allTimeRangeDataProvider = new HistoryAllTimeRangeRecordsDataProvider(
            historyFacade);
    allTimeRangeDataProvider.setData(choice, isGroupAdmin, groupId);
    allTimeRangeDataProvider.setSort("dateOfDownload", SortOrder.DESCENDING);

    if (choice == ChoiceHistory.DAILY) {
        container.add(new Label("title", ResourceUtils.getModel("pageTitle.dailyDownloadHistory")));
        container.add(new Label("timePeriodStatistic", ResourceUtils.getModel("title.dailyStatistic")));
        container.add(new Label("allTimePeriodRecords", ResourceUtils.getModel("title.allDailyRecords")));

    } else if (choice == ChoiceHistory.WEEKLY) {
        container.add(new Label("title", ResourceUtils.getModel("pageTitle.weeklyDownloadHistory")));
        container.add(new Label("timePeriodStatistic", ResourceUtils.getModel("title.weeklyStatistic")));
        container.add(new Label("allTimePeriodRecords", ResourceUtils.getModel("title.allWeeklyRecords")));

    } else if (choice == ChoiceHistory.MONTHLY) {
        container.add(new Label("title", ResourceUtils.getModel("pageTitle.monthlyDownloadHistory")));
        container.add(new Label("timePeriodStatistic", ResourceUtils.getModel("title.monthlyStatistic")));
        container.add(new Label("allTimePeriodRecords", ResourceUtils.getModel("title.allMonthlyRecords")));

    } else {
        throw new RestartResponseAtInterceptPageException(HistoryPage.class);
    }

    container.add(
            new Label("downloadFiles", ResourceUtils.getModel("text.downloadFiles")).setRenderBodyOnly(true));

    final Model<String> countModel = new Model<String>("" + allTimeRangeDataProvider.getCountOfHistory());
    container.add(new Label("count", countModel).setRenderBodyOnly(true));

    container.add(new Label("topDownloads", ResourceUtils.getModel("title.topDownloads")));

    DefaultDataTable<DownloadStatistic, String> topDownloadedFilelist = new DefaultDataTable<DownloadStatistic, String>(
            "topDownloadedFilelist", createListColumnsTopDownloads(), topDownloadsDataProvider, ITEMS_PER_PAGE);
    container.add(topDownloadedFilelist);

    getChartImage();
    container.add(chartImage);

    container.add(new Label("lastDownloaded", ResourceUtils.getModel("title.lastDownloaded")));

    DefaultDataTable<History, String> lastDownloadedFilesHistoryList = new DefaultDataTable<History, String>(
            "lastDownloadedFilesHistoryList", createListColumnsLastDownloaded(), lastDownloadedDataProvider,
            ITEMS_PER_PAGE);
    container.add(lastDownloadedFilesHistoryList);

    DefaultDataTable<History, String> historyList = new DefaultDataTable<History, String>("historyList",
            createListColumnsAllTimeRangeRecords(), allTimeRangeDataProvider, ITEMS_PER_PAGE);
    container.add(historyList);

    Form<Void> groupForm = new Form<Void>("form");
    ChoiceRenderer<ResearchGroup> renderer = new ChoiceRenderer<ResearchGroup>("title", "researchGroupId");
    List<ResearchGroup> choices = researchGroupFacade.getResearchGroupsWhereUserIsGroupAdmin(loggedUser);
    final DropDownChoice<ResearchGroup> researchGroupChoice = new DropDownChoice<ResearchGroup>("researchGroup",
            new Model<ResearchGroup>(), choices, renderer);

    if (defaultGroup != null)
        researchGroupChoice.setModelObject(defaultGroup);

    if (admin) {
        ResearchGroup showAll = new ResearchGroup();
        showAll.setResearchGroupId(0);
        showAll.setTitle(ResourceUtils.getString("select.option.allGroups"));
        choices.add(0, showAll);
        researchGroupChoice.setModelObject(showAll);
    }

    researchGroupChoice.setRequired(true);
    researchGroupChoice.setLabel(ResourceUtils.getModel("label.group"));
    researchGroupChoice.add(new AjaxFormComponentUpdatingBehavior("onChange") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            isGroupAdmin = securityFacade.userIsGroupAdmin();
            ResearchGroup group = researchGroupChoice.getModelObject();
            groupId = group == null ? -1 : group.getResearchGroupId();

            if (groupId == 0 && admin) {
                isGroupAdmin = false;
            }

            topDownloadsDataProvider.setData(choice, isGroupAdmin, groupId);
            lastDownloadedDataProvider.setData(choice, isGroupAdmin, groupId);
            allTimeRangeDataProvider.setData(choice, isGroupAdmin, groupId);

            countModel.setObject("" + allTimeRangeDataProvider.getCountOfHistory());

            getChartImage();

            target.add(container);
        }
    });

    groupForm.add(researchGroupChoice);
    container.add(groupForm);

    add(container);

}

From source file:de.flapdoodle.wicket.model.TestModelTransformations.java

License:Apache License

private void checkModelModifications(Model<Integer> source, IModel<String> model) {
    Assert.assertEquals("1", model.getObject());
    source.setObject(2);
    Assert.assertEquals("1", model.getObject());
    model.detach();// www .java2 s.c  om
    Assert.assertEquals("2", model.getObject());
}

From source file:de.flapdoodle.wicket.model.TestModelTransformations.java

License:Apache License

private void checkModelModifications(Model<Integer> a, Model<Integer> b, IModel<Integer> model) {
    Assert.assertEquals(Integer.valueOf(3), model.getObject());
    a.setObject(2);
    Assert.assertEquals(Integer.valueOf(3), model.getObject());
    model.detach();/*from   w w w.j a  v a2s . c om*/
    Assert.assertEquals(Integer.valueOf(4), model.getObject());
    b.setObject(3);
    Assert.assertEquals(Integer.valueOf(4), model.getObject());
    model.detach();
    Assert.assertEquals(Integer.valueOf(5), model.getObject());
}

From source file:de.flapdoodle.wicket.model.TestModelTransformations.java

License:Apache License

private void checkModelModifications(Model<Integer> a, Model<Integer> b, Model<String> postfix,
        IModel<String> model) {
    Assert.assertEquals("3 Kinder", model.getObject());
    a.setObject(2);
    Assert.assertEquals("3 Kinder", model.getObject());
    model.detach();/* w ww.  jav  a2s .  c  o m*/
    Assert.assertEquals("4 Kinder", model.getObject());
    b.setObject(3);
    Assert.assertEquals("4 Kinder", model.getObject());
    model.detach();
    Assert.assertEquals("5 Kinder", model.getObject());
    postfix.setObject("pfel");
    Assert.assertEquals("5 Kinder", model.getObject());
    model.detach();
    Assert.assertEquals("5 pfel", model.getObject());
}

From source file:hsa.awp.admingui.usermanagement.MandatorPanel.java

License:Open Source License

private void addMandatorCreation() {

    final Form form = new Form("form");

    final Model<String> nameModel = new Model<String>();
    final TextField<String> textField = new TextField<String>("name", nameModel);
    textField.setOutputMarkupId(true);//from   w  ww  . j a v a 2s .com
    AjaxButton button = new AjaxButton("button", new Model<String>("anlegen")) {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            Mandator mandator = controller.getMandatorByName(nameModel.getObject());

            if (mandator == null) {
                controller.createMandator(nameModel.getObject());
                textField.clearInput();
                nameModel.setObject("");
            } else {
                feedbackPanel.error("Mandant mit dem Namen '" + nameModel.getObject() + "' existiert bereits.");
            }
            target.addComponent(textField);
            target.addComponent(container);
            target.addComponent(feedbackPanel);
        }
    };

    form.add(textField);
    form.add(button);

    add(form);
}

From source file:nl.knaw.dans.common.wicket.components.explorer.ExplorerPanel.java

License:Apache License

@SuppressWarnings("serial")
public ExplorerPanel(String name, IModel model, final ITreeProvider<ITreeItem> treeProvider) {
    super(name, model);

    this.treeProvider = treeProvider;
    treeState = new ProviderSubset<ITreeItem>(treeProvider);

    content = new SelectableFolderContent(treeProvider) {
        @Override/*w w w . j a v  a2 s .  com*/
        protected void selectEvent(final AjaxRequestTarget target) {
            IModel<ITreeItem> selected = content.getSelected();
            if (selected != null) {
                tree.expand(selected.getObject());
                List<ITreeItem> list = selected.getObject().getChildrenWithFiles();
                tableProvider.setList(list);
                selectedFolderChanged(selected);
                breadcrumbPanel.update(target, selected.getObject());
                target.addComponent(table);
            }
        }
    };

    tree = createTree(treeProvider, newStateModel());
    tree.add(new AbstractBehavior() {
        @Override
        public void renderHead(IHeaderResponse response) {
            response.renderCSSReference(theme);
            response.renderCSSReference(style);
        }
    });

    initialExpand(treeProvider.getRoots().next());
    add(tree);

    final Model<IndicatingAjaxLink<Void>> expandModel = new Model<IndicatingAjaxLink<Void>>();
    final Model<IndicatingAjaxLink<Void>> collapseModel = new Model<IndicatingAjaxLink<Void>>();

    // expand all button
    final IndicatingAjaxLink<Void> expand = new IndicatingAjaxLink<Void>("expandAll") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            ((IDetachable) treeState).detach();
            treeState = new InverseSet<ITreeItem>(new ProviderSubset<ITreeItem>(treeProvider));
            this.setVisible(false);
            collapseModel.getObject().setVisible(true);
            target.addComponent(this.getParent());
        }
    };
    expandModel.setObject(expand);
    add(expand);

    // collapse all button
    final IndicatingAjaxLink<Void> collapse = new IndicatingAjaxLink<Void>("collapseAll") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            ((IDetachable) treeState).detach();
            treeState = new ProviderSubset<ITreeItem>(treeProvider);
            this.setVisible(false);
            expandModel.getObject().setVisible(true);
            target.addComponent(this.getParent());
        }
    };
    collapse.setVisible(false);
    collapseModel.setObject(collapse);
    add(collapse);

    // up button
    add(new IndicatingAjaxLink<Void>("up") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            ITreeItem parentItem = content.getSelected().getObject().getParent();
            if (parentItem != null) {
                IModel<ITreeItem> parentModel = treeProvider.model(parentItem);
                tree.expand(parentItem);
                List<ITreeItem> list = parentItem.getChildrenWithFiles();
                tableProvider.setList(list);
                target.addComponent(table);
                content.setSelectedAndUpdate(parentModel, tree, target);
                selectedFolderChanged(parentModel);
            }
        }
    });

    final Model<IndicatingAjaxLink<Void>> selectAllModel = new Model<IndicatingAjaxLink<Void>>();
    final Model<IndicatingAjaxLink<Void>> selectNoneModel = new Model<IndicatingAjaxLink<Void>>();

    // select all button
    IndicatingAjaxLink<Void> selectAll = new IndicatingAjaxLink<Void>("selectAll") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            selectAllClicked(target);
            this.setVisible(false);
            target.addComponent(this);
            selectNoneModel.getObject().setVisible(true);
            target.addComponent(selectNoneModel.getObject());
        }
    };
    selectAllModel.setObject(selectAll);
    add(selectAll);

    // select none button
    IndicatingAjaxLink<Void> selectNone = new IndicatingAjaxLink<Void>("selectNone") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            selectNoneClicked(target);
            this.setVisible(false);
            target.addComponent(this);
            selectAllModel.getObject().setVisible(true);
            target.addComponent(selectAllModel.getObject());
        }
    };
    selectNone.setVisible(false);
    selectNoneModel.setObject(selectNone);
    add(selectNone);

    breadcrumbPanel = new BreadcrumbPanel("breadcrumbPanel", content.getSelected().getObject());
    add(breadcrumbPanel);

    IColumn[] columns = new IColumn[1];
    columns[0] = new PropertyColumn(new Model("name"), "name", "name");

    // GK: note: couldn't find a function to disable paging therefor the Integer.MAX_VALUE as a workaround
    table = new DefaultDataTable("datatable", columns, tableProvider, Integer.MAX_VALUE);
    table.setOutputMarkupId(true);
    add(table);

}

From source file:ontopoly.pages.ModalFindPage.java

License:Apache License

private WebMarkupContainer createBrowseTab() {

    final WebMarkupContainer browseTab = new WebMarkupContainer("browseTab");
    browseTab.setOutputMarkupId(true);//ww  w.  j a v a  2  s  . c  o m

    this.playerTypesChoicesModel = new LoadableDetachableModel<List<TopicType>>() {
        @Override
        protected List<TopicType> load() {
            // TODO: should merge with PlayerTypesModel.java (extend to filter my large instance types)
            FieldInstance fieldInstance = fieldInstanceModel.getFieldInstance();
            RoleField associationField = (RoleField) fieldInstance.getFieldAssignment().getFieldDefinition();
            // FIXME: this doesn't work for n+ary fields
            RoleField otherField = (RoleField) associationField.getFieldsForOtherRoles().iterator().next();
            TopicMap tm = associationField.getTopicMap();
            // include all topic types except those with large instance sets
            Collection<TopicType> allowedValueTypes = otherField.getDeclaredPlayerTypes();
            Collection<TopicType> largeInstanceSets = tm.getTopicTypesWithLargeInstanceSets();
            List<TopicType> topicTypes = new ArrayList<TopicType>(allowedValueTypes.size());
            Iterator<TopicType> iter = allowedValueTypes.iterator();
            while (iter.hasNext()) {
                TopicType topicType = iter.next();
                if (!largeInstanceSets.contains(topicType))
                    topicTypes.add(topicType);
            }
            return topicTypes;
        }
    };
    List<TopicType> playerTypes = playerTypesChoicesModel.getObject();
    TopicType selectedType = playerTypes.size() == 1 ? playerTypes.get(0) : null;
    this.selectedTypeModel = new TopicModel<TopicType>(selectedType, TopicModel.TYPE_TOPIC_TYPE);

    final WebMarkupContainer resultsContainer = new WebMarkupContainer("resultsContainer");
    resultsContainer.setOutputMarkupId(true);
    browseTab.add(resultsContainer);

    final FormComponent checkGroup;
    final Model<String> radioGroupModel = new Model<String>();
    final Collection<String> checkGroupModel = new HashSet<String>();

    final boolean maxOneCardinality = isMaxOneCardinality();
    if (maxOneCardinality) {
        checkGroup = new RadioGroup<String>("checkGroup", radioGroupModel);
    } else {
        checkGroup = new CheckGroup<String>("checkGroup", checkGroupModel);
    }
    final AjaxParentFormChoiceComponentUpdatingBehavior apfc = new AjaxParentFormChoiceComponentUpdatingBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            // notify server when selection is made
        }
    };
    checkGroup.add(apfc);
    resultsContainer.add(checkGroup);

    // create a tree
    final TreePanel treePanel = new TreePanel("results", getTreeModel(null)) {
        @Override
        protected Component populateNode(String id, TreeNode treeNode) {
            DefaultMutableTreeNode mTreeNode = (DefaultMutableTreeNode) treeNode;
            final TopicNode node = (TopicNode) mTreeNode.getUserObject();
            Topic selectedType = selectedTypeModel.getTopic();
            final boolean selectable = node.getTopic().isInstanceOf(selectedType);

            // create link with label        
            return new CheckLabelPanel(id) {
                @Override
                protected Component newCheck(String id) {
                    if (maxOneCardinality) {
                        return new AjaxParentRadioChild<String>(id, new Model<String>(node.getTopicId()),
                                apfc) {
                            @Override
                            public boolean isVisible() {
                                return selectable;
                            }

                            @Override
                            protected void onComponentTag(final ComponentTag tag) {
                                tag.put("type", "radio");
                                super.onComponentTag(tag);
                            }
                        };
                    } else {
                        return new AjaxParentCheckChild(id, new Model<String>(node.getTopicId()), apfc) {
                            @Override
                            public boolean isVisible() {
                                return selectable;
                            }

                            @Override
                            protected void onComponentTag(final ComponentTag tag) {
                                tag.put("type", "checkbox");
                                super.onComponentTag(tag);
                            }
                        };
                    }
                }

                @Override
                protected Label newLabel(String id) {
                    Label label = new Label(id, new Model<String>(node.getName()));
                    label.setRenderBodyOnly(false);
                    return label;
                }
            };
        }
    };
    treePanel.setOutputMarkupId(true);
    checkGroup.add(treePanel);

    // NOTE: need to readd model here because page, which we depend on
    // in the construction of the tree model, is not available in
    // TreePanel constructor
    if (this.selectedTypeModel != null)
        treePanel.setDefaultModel(getTreeModel(selectedType));

    final TopicDropDownChoice<TopicType> playerTypesDropDown = new TopicDropDownChoice<TopicType>("playerTypes",
            this.selectedTypeModel, playerTypesChoicesModel);

    playerTypesDropDown.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        protected void onUpdate(AjaxRequestTarget target) {
            // replace tree model
            TopicType topicType = (TopicType) playerTypesDropDown.getDefaultModelObject();
            treePanel.setDefaultModel(getTreeModel(topicType));
            target.addComponent(resultsContainer);
        }
    });
    browseTab.add(playerTypesDropDown);

    Button closeOkButton = new Button("closeOK");
    closeOkButton.add(new AjaxFormComponentUpdatingBehavior("onclick") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Object modelObject = checkGroup.getModelObject();
            Collection selected;
            if (modelObject instanceof String)
                selected = Collections.singleton(modelObject);
            else
                selected = (Collection) modelObject;

            if (selected == null)
                selected = Collections.EMPTY_LIST;

            // add associations for selected topics
            onSelectionConfirmed(target, selected);
            onCloseOk(target);

            // reset selected topic type, choice group and tree model
            selectedTypeModel.setObject(null);
            treePanel.setDefaultModel(getTreeModel(null));
            radioGroupModel.setObject(null);
            checkGroupModel.clear();
        }
    });
    browseTab.add(closeOkButton);

    Button closeCancelButton = new Button("closeCancel");
    closeCancelButton.add(new AjaxFormComponentUpdatingBehavior("onclick") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            onCloseCancel(target);

            // reset selected topic type, choice group and tree model
            selectedTypeModel.setObject(null);
            treePanel.setDefaultModel(getTreeModel(null));
            radioGroupModel.setObject(null);
            checkGroupModel.clear();
        }
    });
    browseTab.add(closeCancelButton);

    return browseTab;
}