Example usage for org.apache.wicket.markup.html.basic Label isVisible

List of usage examples for org.apache.wicket.markup.html.basic Label isVisible

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.basic Label isVisible.

Prototype

public boolean isVisible() 

Source Link

Document

Gets whether this component and any children are visible.

Usage

From source file:com.axway.ats.testexplorer.pages.testcase.statistics.DataPanel.java

License:Apache License

/**
 * Display the collected//ww  w  .j av  a2  s  .c  om
 * @param statsForm
 */
public void displayStatisticDescriptions(Form<Object> statsForm) {

    boolean isDataPanelVisible = machineDescriptions.size() > 0;

    List<List<StatisticsTableCell>> rows = new ArrayList<List<StatisticsTableCell>>();
    List<StatisticsTableCell> columns = new ArrayList<StatisticsTableCell>();

    // add machine columns
    columns.add(new StatisticsTableCell("<img class=\"arrowUD\" src=\"images/up.png\">", false));
    columns.add(new StatisticsTableCell(this.name, false));
    for (MachineDescription machine : machineDescriptions) {
        String machineName = machine.getMachineAlias();
        if (SQLServerDbReadAccess.MACHINE_NAME_FOR_ATS_AGENTS.equals(machineName)) {
            machineName = "";
        }
        StatisticsTableCell cell = new StatisticsTableCell(
                "<b style=\"padding: 0 5px;\">" + machineName + "</b>", false, "centeredLabel");
        cell.cssClass = "fixTableColumn";
        columns.add(cell);
    }
    rows.add(columns);

    // add empty row
    columns = new ArrayList<StatisticsTableCell>();
    for (int i = 0; i < 2 + machineDescriptions.size(); i++) {
        columns.add(NBSP_EMPTY_CELL);
    }
    rows.add(columns);

    final Set<Integer> hiddenRowIndexes = new HashSet<Integer>();
    for (StatisticContainer statContainer : statContainers.values()) {

        List<DbStatisticDescription> statDescriptions = sortQueueItems(statContainer.getStatDescriptions());

        String lastStatParent = "";
        for (DbStatisticDescription statDescription : statDescriptions) {

            String statisticLabel = "<span class=\"statName\">" + statDescription.name
                    + "</span><span class=\"statUnit\">(" + statDescription.unit + ")</span>";

            // add parent table line if needed
            String statParent = statDescription.parentName;
            if (!StringUtils.isNullOrEmpty(statParent)
                    && !statParent.equals(StatisticsPanel.SYSTEM_STATISTIC_CONTAINER)
                    && !lastStatParent.equals(statParent)) {
                columns = new ArrayList<StatisticsTableCell>();
                columns.add(NBSP_EMPTY_CELL);
                if (statParent.startsWith(PROCESS_STAT_PREFIX)) {
                    // only Process parent element can hide its children (it is not a good idea to hide the User actions behind queue names)
                    columns.add(new StatisticsTableCell(
                            "<a href=\"#\" onclick=\"showHiddenStatChildren(this);return false;\">" + statParent
                                    + "</a>",
                            false, "parentStatTd"));
                } else {

                    columns.add(new StatisticsTableCell(statParent, false, "parentStatTd"));
                }
                for (int i = 0; i < machineDescriptions.size(); i++) {
                    columns.add(NBSP_EMPTY_CELL);
                }
                rows.add(columns);
            }

            lastStatParent = statParent;

            columns = new ArrayList<StatisticsTableCell>();
            columns.add(new StatisticsTableCell(true));
            StatisticsTableCell statName = new StatisticsTableCell(statisticLabel, true);
            statName.title = statDescription.params;
            columns.add(statName);

            for (MachineDescription machine : machineDescriptions) {
                Model<Boolean> selectionModel = machine.getStatDescriptionSelectionModel(statDescription);
                // selectionModel.getObject() should sometimes return
                // NULL - when comparing with other testcases
                if (selectionModel != null && selectionModel.getObject() != null) {
                    columns.add(new StatisticsTableCell(selectionModel));
                } else {
                    columns.add(EMPTY_CELL);
                }
            }

            // hide only the Process child elements
            if (!StringUtils.isNullOrEmpty(lastStatParent) && lastStatParent.startsWith(PROCESS_STAT_PREFIX)) {

                // add current row number as a child row which must be hidden
                hiddenRowIndexes.add(rows.size());
            }
            rows.add(columns);
        }
    }

    statisticsUIContainer = new ListView<List<StatisticsTableCell>>(uiPrefix + "StatsRows", rows) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(ListItem<List<StatisticsTableCell>> item) {

            // table TR
            if (item.getIndex() == 0) {
                item.add(AttributeModifier.replace("class", "statisticsHeaderRow"));
                item.add(AttributeModifier.replace("onclick",
                        "showOrHideTableRows('" + uiPrefix + "StatsTable',1,true);"));
            } else if (item.getIndex() > 3) { // skip the machines,label and
                                              // measurement rows
                item.add(AttributeModifier.replace("class", "statisticRow"));
            }
            if (hiddenRowIndexes.contains(item.getIndex())) {
                item.add(new AttributeAppender("class", new Model<String>("hiddenStatRow"), " "));
            }

            item.add(new ListView<StatisticsTableCell>(uiPrefix + "StatsColumns", item.getModelObject()) {

                private static final long serialVersionUID = 1L;

                @Override
                protected void populateItem(ListItem<StatisticsTableCell> item) {

                    // table TD
                    if (item.getIndex() > 0) { // skip the first (CheckBox)
                                               // column
                        item.add(AttributeModifier.replace("class", "statisticColumn"));
                    }
                    StatisticsTableCell cell = item.getModelObject();
                    CheckBox checkBox = new CheckBox("checkbox", cell.checkboxModel);
                    if (cell.isCheckbox) {
                        if (item.getIndex() == 0) { // this is the first/main CheckBox

                            // binding onclick function which will (un)select all the CheckBoxes on that row
                            // and will change the line color if it is selected or not
                            checkBox.add(AttributeModifier.replace("onclick",
                                    "selectAllCheckboxes(this,'" + uiPrefix + "StatsTable');"));
                            checkBox.add(AttributeModifier.replace("class", "allMachinesCheckbox"));
                        } else {

                            // binding onclick function which will (un)select the main/first CheckBox on that row
                            // when all the CheckBoxes are selected or some are unselected.
                            // Also the row/cell color will be changed.
                            checkBox.add(AttributeModifier.replace("onclick",
                                    "unselectMainTrCheckbox(this,'" + uiPrefix + "StatsTable');"));
                            checkBox.add(AttributeModifier.replace("class", "machineCheckbox"));
                            item.add(AttributeModifier.replace("class", "statisticColumnWithCheckboxOnly"));
                        }
                    } else {
                        checkBox.setVisible(false);
                    }
                    item.add(checkBox);

                    Label label = new Label("label", cell.labelText);
                    label.setEscapeModelStrings(false).setVisible(!cell.isCheckbox && !cell.isInputText);
                    if (cell.isCheckboxLabel) {
                        // binding JavaScript function which will click on the first/main CheckBox of this statistic
                        label.add(AttributeModifier.replace("onclick", "clickSelectAllCheckbox(this);"));
                        label.add(AttributeModifier.replace("class", "checkboxLabel noselection"));
                        if (cell.title != null && !cell.title.isEmpty()) {
                            String title = cell.title;
                            int readingStartIndex = cell.title.indexOf(PARAMS_READING_UNIQUENESS_MAKRER);
                            if (readingStartIndex > 0) {

                                title = cell.title.substring(0, readingStartIndex)
                                        + cell.title.substring(cell.title.indexOf("_", readingStartIndex + 1));
                            }
                            label.add(AttributeModifier.replace("title", title.replace("_", ", ").trim()));
                        }
                    } else if (label.isVisible() && cell.cssClass != null) {
                        label.add(AttributeModifier.replace("class", cell.cssClass));
                    }
                    item.add(label);

                    Label machineAliasLabel = new Label("inputText", cell.getMachineLabelModel());
                    machineAliasLabel.setVisible(cell.isInputText);
                    if (cell.getMachineLabelModel() != null
                            && cell.getMachineLabelModel().getObject() != null) {
                        machineAliasLabel.setOutputMarkupId(true);
                        machineAliasLabel.add(
                                AttributeModifier.replace("title", cell.getMachineLabelModel().getObject()));
                        globalPanel.rememberMachineAliasLabel(machineAliasLabel);
                    }
                    item.add(machineAliasLabel);
                }
            });
        }
    };

    statisticsUIContainer.setVisible(isDataPanelVisible);
    statsForm.add(statisticsUIContainer);
}

From source file:de.tudarmstadt.ukp.csniper.webapp.support.wicket.ExpandableList.java

License:Apache License

private void initialize() {
    expandableList = new RepeatingView("expandableList");
    AbstractItem item;//  www  . java 2s.  c o  m
    for (Entry<String, String> entry : items.entrySet()) {
        item = new AbstractItem(expandableList.newChildId());

        final Label body = new Label("body", entry.getValue());
        body.setOutputMarkupPlaceholderTag(true).setVisible(false).setEscapeModelStrings(false);
        item.add(body);

        item.add(new AjaxLink<String>("caption", new Model<String>(entry.getKey())) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
                replaceComponentTagBody(markupStream, openTag, getModelObject());
            }

            @Override
            public void onClick(AjaxRequestTarget aTarget) {
                body.setVisible(!body.isVisible());
                aTarget.add(body);
            }
        }.add(new AttributeModifier("class", new Model<String>("clickableElement"))));
        expandableList.add(item);
    }
    add(expandableList);
}

From source file:dk.netdesign.common.osgi.config.wicket.panel.ConfigurationItemPanel.java

License:Apache License

public ConfigurationItemPanel(final Attribute attribute, final IModel<Serializable> currentValue,
        IModel<String> errorMessage, String id) {
    super(id);// w  ww  .ja v  a 2  s . c o m
    this.attribute = attribute;

    String panelTextFieldID = attribute.getID() + "Input";
    String panelSmallLabelID = attribute.getID() + "Details";

    String attributeDefault = attribute.getDefaultValue() != null && attribute.getDefaultValue().length > 0
            && attribute.getDefaultValue()[0] != null ? attribute.getDefaultValue()[0] : null;

    String methodReturnSimpleName = attribute.getMethodReturnType().getSimpleName();

    final boolean usingDefault;

    configValue = currentValue;

    if (currentValue.getObject() == null
            || (currentValue.getObject() instanceof String && ((String) currentValue.getObject()).isEmpty())) {
        currentValue.setObject(attributeDefault);
        usingDefault = true;
    } else {
        usingDefault = false;
    }

    String propertyNameAndCardinality = attribute.getName() + "(" + attribute.getCardinalityDef().name() + ")";
    WebMarkupContainer formLabel = new WebMarkupContainer("nameLabel");

    Label labelText = new Label("labelText", Model.of(propertyNameAndCardinality));
    formLabel.add(labelText);

    final Label labelMessage = new ErrorLabel("labelMsg", errorMessage);

    formLabel.add(labelMessage);

    formLabel.add(AttributeModifier.replace("for", panelTextFieldID));
    formLabel.add(AttributeModifier.replace("title", attribute.getInputType().getSimpleName()));
    add(formLabel);

    final Class attributeInputType = attribute.getInputType();
    final Class attributeMethodType = attribute.getMethodReturnType();

    //WebMarkupContainer inputArea = new WebMarkupContainer("inputArea");
    InputFragment fragment;

    if (attributeInputType.equals(Number.class)) {
        fragment = new NumberFieldFragment("inputArea", "numberBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, (IModel<Number>) configValue);
    } else if (attributeInputType.equals(String.class) && attributeMethodType.equals(URL.class)) {
        fragment = new URLFieldFragment("inputArea", "urlBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, (IModel<String>) configValue);
    } else if (attributeInputType.equals(Boolean.class)) {
        fragment = new BooleanFieldFragment("inputArea", "checkBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, (IModel<Boolean>) configValue);
    } else if (attributeInputType.equals(String.class)) {
        fragment = new TextFieldFragment("inputArea", "textBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, (IModel<String>) configValue);
    } else if (attributeInputType.equals(Character[].class)) {
        fragment = new PasswordFragment("inputArea", "passwordBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, (IModel<Character[]>) configValue);
    } else {
        fragment = new UnknownTypeFragment("inputArea", "textBox", this, attribute, panelTextFieldID,
                panelSmallLabelID, configValue);
    }

    //inputArea.add(fragment);
    add(fragment);

    //        formInput.add(AttributeModifier.replace("type", new LoadableDetachableModel<String>() {
    //            @Override
    //            protected String load() {
    //                if (attributeInputType == Character[].class) {
    //                    return "password";
    //                } else if (Number.class.isAssignableFrom(attributeInputType)) {
    //                    return "number";
    //                } else if(URL.class.isAssignableFrom(attributeMethodType)){
    //                    return "url";
    //                }
    //                else{
    //                    return "text";
    //                }
    //            }
    //        }));

    fragment.getFormInput().add(AttributeModifier.append("style", new AbstractReadOnlyModel<String>() {
        @Override
        public String getObject() {
            if (labelMessage.isVisible()) {
                return "background-color:#d9534f;";
            } else if (attribute.getCardinalityDef().equals(Property.Cardinality.Required)
                    && currentValue.getObject() == null) {
                return "background-color:#d9534f;";
            } else if (usingDefault) {
                return "background-color:#f0ad4e;";
            } else {
                return null;
            }
        }

    }));

    Label smallLabel = new Label("smallLabel", attribute.getDescription());

    smallLabel.add(AttributeModifier.replace("id", panelSmallLabelID));

    add(smallLabel);

}

From source file:org.apache.openmeetings.web.room.menu.RoomMenuPanel.java

License:Apache License

@Override
protected void onInitialize() {
    exitMenuItem = new RoomMenuItem(getString("308"), getString("309"), "room menu exit") {
        private static final long serialVersionUID = 1L;

        @Override/*from   w  w w .j  av  a  2  s. c  o  m*/
        public void onClick(AjaxRequestTarget target) {
            exit(target);
        }
    };
    filesMenu = new RoomMenuItem(getString("245"), null, false);
    actionsSubMenu.init();
    pollsSubMenu.init();
    add((menuPanel = new MenuPanel("menu", getMenu())).setVisible(isVisible()));

    add(askBtn.add(AttributeModifier.replace(ATTR_TITLE, getString("84"))));
    Label demo = new Label("demo", Model.of(""));
    Room r = room.getRoom();
    add(demo.setVisible(
            r.isDemoRoom() && r.getDemoTime() != null && room.getRoom().getDemoTime().intValue() > 0));
    if (demo.isVisible()) {
        demo.add(new OmRedirectTimerBehavior(room.getRoom().getDemoTime().intValue(), "637") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onTimer(int remain) {
                getComponent().add(AttributeModifier.replace(ATTR_TITLE, getText("639", remain)));
            }

            @Override
            protected void onFinish(AjaxRequestTarget target) {
                exit(target);
            }
        });
    }
    super.onInitialize();
}

From source file:org.sakaiproject.delegatedaccess.tool.pages.UserPageSiteSearch.java

License:Educational Community License

@SuppressWarnings("unchecked")
public void buildPage(final String search, final Map<String, Object> advancedFields, final boolean statistics,
        final boolean currentStatisticsFlag) {
    this.search = search;
    this.statistics = statistics;
    this.currentStatisticsFlag = currentStatisticsFlag;
    if (statistics) {
        disableLink(shoppingStatsLink);/*from w  w w. j  a  v  a 2s.  c om*/
    }
    List<ListOptionSerialized> blankRestrictedTools = projectLogic.getEntireToolsList();
    toolsMap = new HashMap<String, String>();
    for (ListOptionSerialized option : blankRestrictedTools) {
        toolsMap.put(option.getId(), option.getName());
    }

    //Setup Statistics Links:
    Link<Void> currentLink = new Link<Void>("currentLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            setResponsePage(new UserPageSiteSearch("", null, true, true));
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    currentLink.add(new Label("currentLinkLabel", new ResourceModel("link.current")).setRenderBodyOnly(true));
    currentLink.add(new AttributeModifier("title", true, new ResourceModel("link.current.tooltip")));
    add(currentLink);

    if (currentStatisticsFlag) {
        disableLink(currentLink);
    }

    Link<Void> allLink = new Link<Void>("allLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            setResponsePage(new UserPageSiteSearch("", null, true, false));
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    allLink.add(new Label("allLinkLabel", new ResourceModel("link.all")).setRenderBodyOnly(true));
    allLink.add(new AttributeModifier("title", true, new ResourceModel("link.all.tooltip")));
    add(allLink);
    if (!currentStatisticsFlag) {
        disableLink(allLink);
    }

    termOptions = new ArrayList<SelectOption>();
    for (String[] entry : sakaiProxy.getTerms()) {
        termOptions.add(new SelectOption(entry[1], entry[0]));
    }
    Map<String, String> hierarchySearchFields = new HashMap<String, String>();
    if (advancedFields != null) {
        for (Entry<String, Object> entry : advancedFields.entrySet()) {
            if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR.equals(entry.getKey())) {
                instructorField = entry.getValue().toString();
                selectedInstructorOption = advancedFields
                        .get(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE).toString();
            }
            if (DelegatedAccessConstants.ADVANCED_SEARCH_TERM.equals(entry.getKey())) {
                for (SelectOption option : termOptions) {
                    if (entry.getValue().equals(option.getValue())) {
                        termField = option;
                        break;
                    }
                }
            }
            if (DelegatedAccessConstants.ADVANCED_SEARCH_HIERARCHY_FIELDS.equals(entry.getKey())) {
                hierarchySearchFields = (Map<String, String>) entry.getValue();
            }
        }
    }
    //Create Search Form:
    final PropertyModel<String> searchModel = new PropertyModel<String>(this, "search");
    final PropertyModel<String> instructorFieldModel = new PropertyModel<String>(this, "instructorField");
    final PropertyModel<SelectOption> termFieldModel = new PropertyModel<SelectOption>(this, "termField");
    final IModel<String> searchStringModel = new IModel<String>() {

        public void detach() {
        }

        public void setObject(String arg0) {
        }

        public String getObject() {
            String searchString = "";
            if (searchModel.getObject() != null && !"".equals(searchModel.getObject().toString().trim())) {
                searchString += new StringResourceModel("siteIdTitleField", null).getString() + " "
                        + searchModel.getObject();
            }
            if (instructorFieldModel.getObject() != null && !"".equals(instructorFieldModel.getObject())) {
                if (!"".equals(searchString))
                    searchString += ", ";
                String userType = new StringResourceModel("instructor", null).getString();
                if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                        .equals(selectedInstructorOption)) {
                    userType = new StringResourceModel("member", null).getString();
                }
                searchString += userType + " " + instructorFieldModel.getObject();
            }
            if (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject())) {
                if (!"".equals(searchString))
                    searchString += ", ";
                searchString += new StringResourceModel("termField", null).getString() + " "
                        + termFieldModel.getObject().getLabel();
            }
            //hierarchy params:
            if (hierarchySearchMap != null) {
                for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                    if (entry.getValue() != null && !"".equals(entry.getValue().getValue().trim())) {
                        if (!"".equals(searchString))
                            searchString += ", ";
                        searchString += hierarchyLabels.get(entry.getKey()) + ": "
                                + entry.getValue().getValue().trim();
                    }
                }
            }
            return searchString;
        }
    };
    final IModel<String> permaLinkModel = new IModel<String>() {

        @Override
        public void detach() {
        }

        @Override
        public String getObject() {
            String path = "/shopping";

            Map<String, String> params = new HashMap<String, String>();
            //Search
            if (searchModel.getObject() != null) {
                params.put("search", searchModel.getObject());
            }
            //term:
            if (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject())) {
                params.put("term", termFieldModel.getObject().getValue());
            }
            //instructor
            if (instructorFieldModel.getObject() != null && !"".equals(instructorFieldModel.getObject())) {
                params.put("instructor", instructorFieldModel.getObject());
                if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                        .equals(selectedInstructorOption)) {
                    params.put("instructorType",
                            DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER);
                } else {
                    params.put("instructorType",
                            DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_INSTRUCTOR);
                }
            }
            //hierarchy params:
            if (hierarchySearchMap != null) {
                int i = 0;
                for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                    if (entry.getValue() != null && !"".equals(entry.getValue().getValue().trim())) {
                        params.put("hierarchyKey" + i, entry.getKey());
                        params.put("hierarchyValue" + i, entry.getValue().getValue());
                        i++;
                    }
                }
            }

            String context = sakaiProxy.siteReference(sakaiProxy.getCurrentPlacement().getContext());

            String url = "";
            try {
                String tool = "sakai.delegatedaccess";
                if (isShoppingPeriodTool()) {
                    tool += ".shopping";
                }
                url = developerHelperService.getToolViewURL(tool, path, params, context);
            } catch (Exception e) {

            }
            return url;
        }

        @Override
        public void setObject(String arg0) {
        }

    };
    final Form<?> form = new Form("form") {
        @Override
        protected void onSubmit() {
            super.onSubmit();
            if (provider != null) {
                provider.detachManually();
            }
        }
    };
    form.add(new TextField<String>("search", searchModel));
    AbstractReadOnlyModel<String> instructorFieldLabelModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (isShoppingPeriodTool()) {
                return new StringResourceModel("instructor", null).getObject() + ":";
            } else {
                return new StringResourceModel("user", null).getObject() + ":";
            }
        }
    };
    form.add(new Label("instructorFieldLabel", instructorFieldLabelModel));
    form.add(new TextField<String>("instructorField", instructorFieldModel));
    //Instructor Options:
    RadioGroup group = new RadioGroup("instructorOptionsGroup",
            new PropertyModel<String>(this, "selectedInstructorOption")) {
        @Override
        public boolean isVisible() {
            //only show if its not shopping period
            return !isShoppingPeriodTool();
        }
    };
    group.add(new Radio("instructorOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_INSTRUCTOR)));
    group.add(new Radio("memberOption",
            Model.of(DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER)));
    form.add(group);

    final ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "value");
    DropDownChoice termFieldDropDown = new DropDownChoice("termField", termFieldModel, termOptions,
            choiceRenderer) {
        @Override
        public boolean isVisible() {
            return !sakaiProxy.isSearchHideTerm();
        }
    };
    //keeps the null option (choose one) after a user selects an option
    termFieldDropDown.setNullValid(true);
    form.add(termFieldDropDown);
    add(form);

    //hierarchy dropdown:
    String[] hierarchyTmp = sakaiProxy
            .getServerConfigurationStrings(DelegatedAccessConstants.HIERARCHY_SITE_PROPERTIES);
    if (hierarchyTmp == null || hierarchyTmp.length == 0) {
        hierarchyTmp = DelegatedAccessConstants.DEFAULT_HIERARCHY;
    }
    final String[] hierarchy = hierarchyTmp;
    WebMarkupContainer hierarchyDiv = new WebMarkupContainer("hierarchyFields");
    final Comparator<SelectOption> optionComparator = new SelectOptionComparator();
    if (hierarchySelectOptions == null || hierarchySelectOptions.size() == 0) {
        nodeSelectOrder = new ArrayList<String>();
        hierarchySearchMap = new HashMap<String, SelectOption>();
        for (String s : hierarchy) {
            hierarchySearchMap.put(s, null);
            nodeSelectOrder.add(s);
            hierarchyLabels.put(s, sakaiProxy.getHierarchySearchLabel(s));
        }
        Map<String, String> searchParams = new HashMap<String, String>();
        for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
            String value = entry.getValue() == null ? "" : entry.getValue().getValue();
            //in case user passed in a parameter, set it:
            if (hierarchySearchFields.containsKey(entry.getKey())) {
                value = hierarchySearchFields.get(entry.getKey());
            }
            searchParams.put(entry.getKey(), value);
        }
        Map<String, Set<String>> hierarchyOptions = projectLogic.getHierarchySearchOptions(searchParams);
        hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
        for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
            List<SelectOption> options = new ArrayList<SelectOption>();
            for (String s : entry.getValue()) {
                SelectOption o = new SelectOption(s, s);
                options.add(o);
                if (searchParams.containsKey(entry.getKey()) && s.equals(searchParams.get(entry.getKey()))) {
                    hierarchySearchMap.put(entry.getKey(), o);
                }
            }
            Collections.sort(options, optionComparator);
            hierarchySelectOptions.put(entry.getKey(), options);
        }
    }
    DataView dropdowns = new DataView("hierarchyDropdowns", new IDataProvider<String>() {

        @Override
        public void detach() {

        }

        @Override
        public Iterator<? extends String> iterator(int first, int count) {
            return nodeSelectOrder.subList(first, first + count).iterator();
        }

        @Override
        public IModel<String> model(final String arg0) {
            return new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

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

        @Override
        public int size() {
            return nodeSelectOrder.size();
        }

    }) {

        @Override
        protected void populateItem(Item item) {
            final String hierarchyLevel = item.getModelObject().toString();
            item.add(new Label("hierarchyLabel",
                    hierarchyLabels.containsKey(hierarchyLevel) ? hierarchyLabels.get(hierarchyLevel)
                            : hierarchyLevel));
            final DropDownChoice choice = new DropDownChoice("hierarchyLevel",
                    new NodeSelectModel(hierarchyLevel), hierarchySelectOptions.get(hierarchyLevel),
                    choiceRenderer);
            //keeps the null option (choose one) after a user selects an option
            choice.setNullValid(true);
            choice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                protected void onUpdate(AjaxRequestTarget target) {
                    Map<String, String> searchParams = new HashMap<String, String>();
                    for (Entry<String, SelectOption> entry : hierarchySearchMap.entrySet()) {
                        searchParams.put(entry.getKey(),
                                entry.getValue() == null ? "" : entry.getValue().getValue());
                    }
                    Map<String, Set<String>> hierarchyOptions = projectLogic
                            .getHierarchySearchOptions(searchParams);
                    hierarchySelectOptions = new HashMap<String, List<SelectOption>>();
                    for (Entry<String, Set<String>> entry : hierarchyOptions.entrySet()) {
                        List<SelectOption> options = new ArrayList<SelectOption>();
                        for (String s : entry.getValue()) {
                            options.add(new SelectOption(s, s));
                        }
                        Collections.sort(options, optionComparator);
                        hierarchySelectOptions.put(entry.getKey(), options);
                    }

                    //refresh everything:
                    target.addComponent(form);
                }
            });
            item.add(choice);
        }

    };
    hierarchyDiv.add(dropdowns);
    form.add(hierarchyDiv);

    //show user's search (if not null)
    add(new Label("searchResultsTitle", new StringResourceModel("searchResultsTitle", null)) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    add(new Label("searchString", searchStringModel) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    add(new TextField("permaLink", permaLinkModel) {
        @Override
        public boolean isVisible() {
            return (searchModel.getObject() != null && !"".equals(searchModel.getObject()))
                    || (instructorFieldModel.getObject() != null
                            && !"".equals(instructorFieldModel.getObject()))
                    || (termFieldModel.getObject() != null && !"".equals(termFieldModel.getObject()))
                    || hierarchyOptionSelected();
        }
    });
    //search result table:
    //Headers
    final Link<Void> siteTitleSort = new Link<Void>("siteTitleSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SITE_TITLE);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label siteTitleLabel = new Label("siteTitleLabel", new StringResourceModel("siteTitleHeader", null));
    siteTitleSort.add(siteTitleLabel);
    add(siteTitleSort);

    final Link<Void> siteIdSort = new Link<Void>("siteIdSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_SITE_ID);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label siteIdSortLabel = new Label("siteIdSortLabel", new StringResourceModel("siteIdHeader", null));
    siteIdSort.add(siteIdSortLabel);
    add(siteIdSort);

    final Link<Void> termSort = new Link<Void>("termSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_TERM);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label termSortLabel = new Label("termSortLabel", new StringResourceModel("termHeader", null));
    termSort.add(termSortLabel);
    add(termSort);

    AbstractReadOnlyModel<String> instructorSortLabelModel = new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (DelegatedAccessConstants.ADVANCED_SEARCH_INSTRUCTOR_TYPE_MEMBER
                    .equals(selectedInstructorOption)) {
                return new StringResourceModel("member", null).getObject();
            } else {
                return new StringResourceModel("instructor", null).getObject();
            }
        }
    };
    final Link<Void> instructorSort = new Link<Void>("instructorSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_INSTRUCTOR);
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    final Label instructorSortLabel = new Label("instructorSortLabel", instructorSortLabelModel);
    instructorSort.add(instructorSortLabel);
    add(instructorSort);

    final Link<Void> providersSort = new Link<Void>("providersSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_PROVIDERS);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled();
        }
    };
    final Label providersSortLabel = new Label("providersSortLabel",
            new StringResourceModel("providers", null));
    providersSort.add(providersSortLabel);
    add(providersSort);

    final Link<Void> publishedSort = new Link<Void>("publishedSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_PUBLISHED);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label publishedSortLabel = new Label("publishedSortLabel",
            new StringResourceModel("published", null));
    publishedSort.add(publishedSortLabel);
    add(publishedSort);

    final Link<Void> accessSort = new Link<Void>("accessSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS);
        }
    };
    final Label accessSortLabel = new Label("accessSortLabel", new StringResourceModel("access", null));
    accessSort.add(accessSortLabel);
    add(accessSort);

    final Link<Void> startDateSort = new Link<Void>("startDateSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_START_DATE);
        }

        @Override
        public boolean isVisible() {
            //this helps with the wicket:enlosure
            return statistics;
        }
    };
    final Label startDateSortLabel = new Label("startDateSortLabel",
            new StringResourceModel("startDate", null));
    startDateSort.add(startDateSortLabel);
    add(startDateSort);

    final Link<Void> endDateSort = new Link<Void>("endDateSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_END_DATE);
        }

        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    final Label endDateSortLabel = new Label("endDateSortLabel", new StringResourceModel("endDate", null));
    endDateSort.add(endDateSortLabel);
    add(endDateSort);

    final Label showAuthToolsHeader = new Label("showAuthToolsHeader",
            new StringResourceModel("showAuthToolsHeader", null)) {
        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    add(showAuthToolsHeader);

    final Label showPublicToolsHeader = new Label("showPublicToolsHeader",
            new StringResourceModel("showPublicToolsHeader", null)) {
        @Override
        public boolean isVisible() {
            return statistics;
        }
    };
    add(showPublicToolsHeader);

    final Link<Void> accessModifiedBySort = new Link<Void>("accessModifiedBySortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS_MODIFIED_BY);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label accessModifiedBySortLabel = new Label("accessModifiedBySortLabel",
            new StringResourceModel("accessModifiedBy", null));
    accessModifiedBySort.add(accessModifiedBySortLabel);
    add(accessModifiedBySort);

    final Link<Void> accessModifiedOnSort = new Link<Void>("accessModifiedOnSortLink") {
        private static final long serialVersionUID = 1L;

        public void onClick() {
            changeOrder(DelegatedAccessConstants.SEARCH_COMPARE_ACCESS_MODIFIED);
        }

        @Override
        public boolean isVisible() {
            //this helps hide all the extra columns with the wicket:enclosure in the html
            return !isShoppingPeriodTool();
        }
    };
    final Label accessModifiedOnSortLabel = new Label("accessModifiedOnSortLabel",
            new StringResourceModel("accessModifiedOn", null));
    accessModifiedOnSort.add(accessModifiedOnSortLabel);
    add(accessModifiedOnSort);

    //Data:
    provider = new SiteSearchResultDataProvider();
    final DataView<SiteSearchResult> dataView = new DataView<SiteSearchResult>("searchResult", provider) {
        @Override
        public void populateItem(final Item item) {
            final SiteSearchResult siteSearchResult = (SiteSearchResult) item.getModelObject();
            AjaxLink<Void> siteTitleLink = new AjaxLink("siteTitleLink") {
                private static final long serialVersionUID = 1L;

                public void onClick(AjaxRequestTarget target) {
                    if (siteSearchResult.getSiteUrl() != null) {
                        //redirect the user to the site
                        target.appendJavascript("popupWindow('" + siteSearchResult.getSiteUrl() + "', '"
                                + new StringResourceModel("popupBlockWarning", null).getObject() + "')");
                    }
                }
            };
            siteTitleLink.add(new Label("siteTitle", siteSearchResult.getSiteTitle()));
            item.add(siteTitleLink);
            final String siteRef = siteSearchResult.getSiteReference();
            final String siteId = siteSearchResult.getSiteId();
            item.add(new Label("siteId", siteId));
            item.add(new Label("term", siteSearchResult.getSiteTerm()));
            item.add(new Label("instructor", new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    return siteSearchResult.getInstructorsString();
                }

            }));
            item.add(new Link<Void>("instructorLookupLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    boolean foundInstructors = false;
                    for (User user : sakaiProxy.getInstructorsForSite(siteId)) {
                        siteSearchResult.addInstructor(user);
                        foundInstructors = true;
                    }
                    if (!foundInstructors) {
                        siteSearchResult.setHasInstructor(false);
                    }
                }

                @Override
                public boolean isVisible() {
                    return (instructorField == null || "".equals(instructorField))
                            && siteSearchResult.isHasInstructor()
                            && siteSearchResult.getInstructors().size() == 0;
                }
            });
            item.add(new Label("providers", new AbstractReadOnlyModel<String>() {
                @Override
                public String getObject() {
                    return siteSearchResult.getProviders();
                }
            }) {
                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled();
                }
            });
            item.add(new Link<Void>("providersLookupLink") {
                private static final long serialVersionUID = 1L;

                public void onClick() {
                    String providers = sakaiProxy.getProviderId(siteRef);
                    if (providers == null || "".equals(providers)) {
                        //set it to a empty space so that the link will hide itself
                        providers = " ";
                    }
                    siteSearchResult.setProviders(providers);
                }

                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool() && sakaiProxy.isProviderIdLookupEnabled()
                            && "".equals(siteSearchResult.getProviders());
                }
            });

            StringResourceModel publishedModel = siteSearchResult.isSitePublished()
                    ? new StringResourceModel("yes", null)
                    : new StringResourceModel("no", null);
            item.add(new Label("published", publishedModel) {
                @Override
                public boolean isVisible() {
                    return !isShoppingPeriodTool();
                }
            });
            String access = isShoppingPeriodTool() ? siteSearchResult.getAccessRoleString()
                    : siteSearchResult.getAccessString();
            item.add(new Label("access", access));
            item.add(new Label("startDate", siteSearchResult.getShoppingPeriodStartDateStr()) {
                @Override
                public boolean isVisible() {
                    //this helps hide all the extra columns with the wicket:enclosure in the html
                    return statistics;
                }
            });
            item.add(new Label("endDate", siteSearchResult.getShoppingPeriodEndDateStr()));
            item.add(new Label("showAuthTools", siteSearchResult.getAuthToolsString(toolsMap)));
            item.add(new Label("showPublicTools", siteSearchResult.getPublicToolsString(toolsMap)));
            item.add(new Label("accessModifiedBy", siteSearchResult.getModifiedBySortName()) {
                @Override
                public boolean isVisible() {
                    //this helps hide all the extra columns with the wicket:enclosure in the html
                    return !isShoppingPeriodTool();
                }
            });
            item.add(new Label("accessModified", siteSearchResult.getModifiedStr()));
        }

        @Override
        public boolean isVisible() {
            return provider.size() > 0;
        }
    };
    dataView.setItemReuseStrategy(new DefaultItemReuseStrategy());
    dataView.setItemsPerPage(DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE);
    add(dataView);

    IModel<File> exportSearchModel = new AbstractReadOnlyModel<File>() {

        @Override
        public File getObject() {
            List<SiteSearchResult> data = provider.getData();
            try {
                String seperator = ",";
                String lineBreak = "\n";
                File file = File.createTempFile(
                        new StringResourceModel("searchExportFileName", null).getObject(), ".csv");
                FileWriter writer = new FileWriter(file.getAbsolutePath());
                //write headers:
                StringBuffer sb = new StringBuffer();
                if (siteTitleSort.isVisible()) {
                    sb.append("\"");
                    sb.append(siteTitleLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (instructorSort.isVisible()) {
                    sb.append("\"");
                    sb.append(instructorSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (termSort.isVisible()) {
                    sb.append("\"");
                    sb.append(termSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (siteIdSort.isVisible()) {
                    sb.append("\"");
                    sb.append(siteIdSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (providersSort.isVisible()) {
                    sb.append("\"");
                    sb.append(providersSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (publishedSort.isVisible()) {
                    sb.append("\"");
                    sb.append(publishedSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessSort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (startDateSort.isVisible()) {
                    sb.append("\"");
                    sb.append(startDateSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (endDateSort.isVisible()) {
                    sb.append("\"");
                    sb.append(endDateSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (showAuthToolsHeader.isVisible()) {
                    sb.append("\"");
                    sb.append(showAuthToolsHeader.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (showPublicToolsHeader.isVisible()) {
                    sb.append("\"");
                    sb.append(showPublicToolsHeader.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessModifiedBySort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessModifiedBySortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                if (accessModifiedOnSort.isVisible()) {
                    sb.append("\"");
                    sb.append(accessModifiedOnSortLabel.getDefaultModelObjectAsString());
                    sb.append("\"");
                    sb.append(seperator);
                }
                sb.append(lineBreak);

                String yes = new StringResourceModel("yes", null).getObject();
                String no = new StringResourceModel("no", null).getObject();

                for (SiteSearchResult siteSearchResult : data) {
                    if (siteTitleSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteTitle());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (instructorSort.isVisible()) {
                        if (siteSearchResult.isHasInstructor()
                                && siteSearchResult.getInstructors().size() == 0) {
                            //we need to look up instructor:
                            boolean foundInstructors = false;
                            for (User user : sakaiProxy.getInstructorsForSite(siteSearchResult.getSiteId())) {
                                siteSearchResult.addInstructor(user);
                                foundInstructors = true;
                            }
                            if (!foundInstructors) {
                                siteSearchResult.setHasInstructor(false);
                            }
                        }
                        sb.append("\"");
                        sb.append(siteSearchResult.getInstructorsString());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (termSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteTerm());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (siteIdSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getSiteId());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (providersSort.isVisible()) {
                        if ("".equals(siteSearchResult.getProviders())) {
                            //look up providers if it isn't already set
                            siteSearchResult.setProviders(
                                    sakaiProxy.getProviderId(siteSearchResult.getSiteReference()));
                        }
                        sb.append("\"");
                        sb.append(siteSearchResult.getProviders());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (publishedSort.isVisible()) {
                        sb.append("\"");
                        sb.append((siteSearchResult.isSitePublished() ? yes : no));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessSort.isVisible()) {
                        sb.append("\"");
                        sb.append((isShoppingPeriodTool() ? siteSearchResult.getAccessRoleString()
                                : siteSearchResult.getAccessString()));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (startDateSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getShoppingPeriodStartDateStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (endDateSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getShoppingPeriodEndDateStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (showAuthToolsHeader.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getAuthToolsString(toolsMap));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (showPublicToolsHeader.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getPublicToolsString(toolsMap));
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessModifiedBySort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getModifiedBySortName());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    if (accessModifiedOnSort.isVisible()) {
                        sb.append("\"");
                        sb.append(siteSearchResult.getModifiedStr());
                        sb.append("\"");
                        sb.append(seperator);
                    }
                    sb.append(lineBreak);
                }

                writer.append(sb.toString());
                writer.flush();
                writer.close();

                return file;
            } catch (IOException e) {
                log.error(e.getMessage(), e);
                return null;
            }
        }
    };

    add(new DownloadLink("exportData", exportSearchModel) {
        @Override
        public void onClick() {
            Object fileObj = getModelObject();
            if (fileObj != null && fileObj instanceof File) {
                File file = (File) fileObj;
                IResourceStream resourceStream = new FileResourceStream(
                        new org.apache.wicket.util.file.File(file));
                getRequestCycle().setRequestTarget(
                        new ResourceStreamRequestTarget(resourceStream, file.getName()).setFileName(
                                new StringResourceModel("searchExportFileName", null).getObject() + ".csv"));
            }
        }
    });

    //Navigation
    //add a pager to our table, only visible if we have more than SEARCH_RESULTS_PAGE_SIZE items
    add(new PagingNavigator("navigatorTop", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

        @Override
        public void onBeforeRender() {
            super.onBeforeRender();

            //clear the feedback panel messages
            clearFeedback(feedbackPanel);
        }
    });
    add(new PagingNavigator("navigatorBottom", dataView) {

        @Override
        public boolean isVisible() {
            if (provider.size() > DelegatedAccessConstants.SEARCH_RESULTS_PAGE_SIZE) {
                return true;
            }
            return false;
        }

        @Override
        public void onBeforeRender() {
            super.onBeforeRender();

            //clear the feedback panel messages
            clearFeedback(feedbackPanel);
        }
    });

}