List of usage examples for org.apache.wicket.model AbstractReadOnlyModel AbstractReadOnlyModel
AbstractReadOnlyModel
From source file:nl.knaw.dans.common.wicket.components.pagebrowse.PageBrowsePanel.java
License:Apache License
public PageBrowsePanel(final String wicketId, final IModel<PageBrowseData> model, PageBrowseLinkListener listener) { super(wicketId, model); if (listener != null) linkListeners.add(listener);//ww w . j a v a2s. co m ListView<PageBrowseLink> pageBrowse = new ListView<PageBrowseLink>("pages", new AbstractReadOnlyModel<List<PageBrowseLink>>() { private static final long serialVersionUID = -7716849873494368548L; public List<PageBrowseLink> getObject() { return computeLinks(); } }) { private static final long serialVersionUID = 0L; @Override protected void populateItem(ListItem<PageBrowseLink> item) { final int page = item.getIndex(); if (page > 0) { item.add(new Label("separator", DEFAULT_SEPARATOR)); } else { // no separator item.add(new Label("separator", "")); } final PageBrowseLink plink = item.getModelObject(); item.add(plink); } }; add(pageBrowse); }
From source file:nl.knaw.dans.common.wicket.components.search.browse.BrowsePanel.java
License:Apache License
private void initComponents() { // browse criteria add(new SearchCriteriaPanel("browseCriteria", getSearchModel())); // result count add(new Label("resultCount", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; public String getObject() { return BrowsePanel.this.getSearchData().getResult().getTotalHits() + ""; };/*from ww w . j av a2 s .c om*/ })); // show button add(new Link("showButton") { private static final long serialVersionUID = 1L; public void onClick() { onShowButtonClicked(getSearchModel()); } }); // browse facets add(new ListView<FacetConfig>("browseFacets", getConfig().getFacets()) { private static final long serialVersionUID = 1L; protected void populateItem(ListItem<FacetConfig> item) { FacetPanel facetPanel = new FacetPanel("browseFacet", getSearchModel(), item.getModelObject()) { private static final long serialVersionUID = -5913133341105521215L; protected void onFacetClick(nl.knaw.dans.common.lang.search.FacetValue<?> facetValue) { // check for browse dead end if (getSearchData().isDirty()) { doSearch(); if (getVisibleFacetCount() == 0) onBrowseDeadEnd(); } } }; item.add(facetPanel); }; }); }
From source file:nl.knaw.dans.common.wicket.components.search.criteria.SearchCriteriaPanel.java
License:Apache License
public SearchCriteriaPanel(String wicketId, SearchModel model) { super(wicketId, model); firstCriteriumDisabled = getCriteria().size() > 0; add(new ListView<SearchCriterium>("criteriumLinks", new AbstractReadOnlyModel<List<SearchCriterium>>() { private static final long serialVersionUID = 1L; public List<SearchCriterium> getObject() { return getCriteria(); }//www .ja v a 2 s.c om }) { private static final long serialVersionUID = 4136872716659659458L; @Override protected void populateItem(final ListItem<SearchCriterium> item) { final SearchCriterium criterium = item.getModelObject(); /* item.add(new Link<Void>("criteriumLink") { private static final long serialVersionUID = -2838312214613553559L; { add(new CriteriumLabel("criteriumText", criterium.getLabelModel())); } @Override public void onClick() { int idx = getCriteriaIdx(criterium); idx++; List<SearchCriterium> criteria = getCriteria(); while(idx < criteria.size()) getRequestBuilder().removeCriterium(idx); } public boolean isEnabled() { if (firstCriteriumDisabled) return item.getIndex()+1 < getCriteria().size(); else return true; }; } ); */ // Note: clicking the link removed all other criteria, it was decided not to have it // but I left it as a comment above! item.add(new CriteriumLabel("criteriumText", criterium.getLabelModel())); item.add(new Link("removeLink") { private static final long serialVersionUID = -1063707405830738778L; { add(new Image("closeImage", new ResourceReference(SearchCriteriaPanel.class, "close-icon.png"))); } public void onClick() { getRequestBuilder().removeCriterium(criterium); }; public boolean isVisible() { return !(criterium instanceof InitialSearchCriterium); }; }); item.add(new Label("criteriumSeparator", DEFAULT_CRITERIUM_SEPARATOR) .setVisible(item.getIndex() + 1 < getCriteria().size())); } }); }
From source file:nl.knaw.dans.common.wicket.components.search.facets.FacetPanel.java
License:Apache License
private void init() { if (!isVisible()) { hide("facetName"); hide("facetValuesUL"); hide("facetParentValue"); return;/*from w ww . ja v a 2s . c o m*/ } // get the facet values from the search results List<FacetValue<?>> facetValues = getFacetField().getValue(); FacetValueCollapser facetCollapser = getConfig().getFacetValueCollapser(); FacetCriterium parentFacet = null; if (facetCollapser != null) { // collapse values parentFacet = FacetPanel.getPreviousSelection(getConfig(), getRequestBuilder()); facetValues = facetCollapser.collapse(facetValues, parentFacet != null ? parentFacet.getFacetValue() : null); } // prune, sort and limit the facet values pruneEmptyValues(facetValues); sort(facetValues); facetValues = limit(facetValues); // parent facet if (parentFacet != null && getConfig().showParentFacet()) { add(new Label("facetParentValue", getFacetValueModel(parentFacet.getFacetValue(), true))); } else { hide("facetParentValue"); } // name label add(new Label("facetName", getFacetNameModel(getFacetName()))); // facet values UL // set column count with a css class (see FacetPanel.css) WebMarkupContainer facetValueUl = new WebMarkupContainer("facetValuesUL"); add(CSSPackageResource.getHeaderContribution(new ResourceReference(FacetPanel.class, "FacetPanel.css"))); int colCount = getConfig().getColumnCount(); if (colCount > 1) { facetValueUl.add(new AttributeAppender("class", new Model("fvCol" + colCount), " ")); } add(facetValueUl); // facet values LI ListView<FacetValue<?>> facetValueList = new ListView<FacetValue<?>>("facetValuesLI", facetValues) { private static final long serialVersionUID = -711250532805369414L; @Override protected void populateItem(ListItem<FacetValue<?>> item) { final FacetValue<?> facetValue = item.getModelObject(); // facet link Link facetLink = new Link("facetValueLink") { private static final long serialVersionUID = 1356587833L; { // value label add(new Label("facetValue", getFacetValueModel(facetValue, false))); // count label add(new Label("facetCount", String.valueOf(facetValue.getCount()))); } public void onClick() { getRequestBuilder().addCriterium( new FacetCriterium(getFacetName(), facetValue, new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 13434324L; @Override public String getObject() { return CriteriumLabel.createFilterText(getFacetNameDisplay(), getFacetValueDisplay(facetValue)); } })); onFacetClick(facetValue); } }; item.add(facetLink); } }; facetValueUl.add(facetValueList); }
From source file:nl.knaw.dans.common.wicket.components.search.results.SearchResultPanel.java
License:Apache License
private void initComponents() { // criteria//from ww w . j a v a2 s .co m add(new SearchCriteriaPanel("searchCriteria", getSearchModel()) { private static final long serialVersionUID = -6370349646809914607L; public boolean isVisible() { return super.isVisible() && getRequestBuilder().getCriteria().size() > 1; }; }); // sort fields add(new SearchSortPanel("sortPanel", getSearchModel(), getConfig().getSortLinks())); // result message (needs to come after page browse panel) add(new UnescapedLabel("resultMessage", getResultMessageModel())); // search hits add(new ListView("searchHits", new AbstractReadOnlyModel<List>() { private static final long serialVersionUID = -8467661423061481825L; @Override public List getObject() { return getSearchResult().getHits(); } }) { private static final long serialVersionUID = -6597598635055541684L; @Override protected void populateItem(ListItem item) { final SearchHit<?> hit = (SearchHit<?>) item.getModelObject(); Panel hitPanel = getConfig().getHitPanelFactory().createHitPanel("searchHit", hit, getSearchModel()); if (hitPanel == null) { LOGGER.error( "Could not create hit panel for searchHit " + hit.toString() + ". Programmer mistake."); throw new InternalWebError(); } String oddOrEven = item.getIndex() % 2 == 0 ? "even" : "odd"; hitPanel.add(new AttributeAppender("class", new Model(oddOrEven), " ")); item.add(hitPanel); } @Override public boolean isVisible() { return getSearchResult().getHits().size() > 0; } }); // search refinement panel add(new SearchBar("refineSearchPanel") { private static final long serialVersionUID = -5980195347064339476L; @Override public void onSearch(String searchText) { SearchResultPanel.this.getRequestBuilder().addCriterium(new TextSearchCriterium(searchText, new Model<String>(CriteriumLabel.createFilterText( SearchResultPanel.this.getString(SEARCHRESULTPANEL_CRITERIUMTEXT_REFINE_SEARCH), searchText)))); } @Override public boolean isVisible() { return SearchResultPanel.this.getSearchResult().getHits().size() > 1; } }); add(new HelpPopup("refineHelpPopup", "Refine", getRefineHelpContent())); /** * I had to make this enclosure by hand, because putting a wicket:enclosure in a * wicket:enclosure caused a nasty bug when using the setResponsePage to render * a page with this component on it. Everytime it would say that the "browseMore" * component was forgotten in the markup. After almost 2 hours of searching it * turned out to be a freaking bug in Wicket 1.4.7. */ WebMarkupContainer refineFacets = new WebMarkupContainer("refineFacetsEnclosure") { private static final long serialVersionUID = 2474778991631709989L; public boolean isVisible() { for (FacetConfig facetConfig : getConfig().getRefineFacets()) { if (FacetPanel.isVisible(facetConfig, getSearchModel())) return true; } return false; }; }; add(refineFacets); // refinement facets final FacetStrategy facetStrategy = getConfig().getFacetStrategy(); refineFacets.add(new ListView<FacetConfig>("refineFacets", getConfig().getRefineFacets()) { private static final long serialVersionUID = 7406250758535500272L; @Override protected void populateItem(ListItem<FacetConfig> item) { FacetConfig facetConfig = item.getModelObject(); item.add(new FacetPanel("facet", getSearchModel(), facetConfig)); item.setVisible(facetStrategy.isFacetVisible(facetConfig, getSearchData())); } }); // browse more if (getConfig().showBrowseMore()) { refineFacets.add(new Link("browseMore") { private static final long serialVersionUID = -6803231407654989149L; public void onClick() { onBrowseMoreClicked(getSearchModel()); } }); } else { WicketUtil.hide(refineFacets, "browseMore"); } // page browse panel PageBrowseData pbData = new PageBrowseData(getRequestBuilder().getOffset() + 1, getRequestBuilder().getLimit(), getSearchResult().getTotalHits()); pageBrowsePanel = new PageBrowsePanel(PAGEBROWSE_PANEL, new Model<PageBrowseData>(pbData) { private static final long serialVersionUID = 1943406023315332637L; @Override public PageBrowseData getObject() { PageBrowseData pbData = super.getObject(); pbData.init(getRequestBuilder().getOffset() + 1, getRequestBuilder().getLimit(), getSearchResult().getTotalHits()); return pbData; } }, new PageBrowseLinkListener() { private static final long serialVersionUID = 5814085953388070471L; public void onClick(PageBrowseLink plink) { getRequestBuilder().setOffset(plink.getTargetItemStart() - 1); } }); add(pageBrowsePanel); // advanced search if (getConfig().showAdvancedSearch()) { add(new Link("advancedSearch") { private static final long serialVersionUID = -1905413983732583324L; @Override public void onClick() { onAdvancedSearchClicked(getSearchModel()); } }); } else { hide("advancedSearch"); } }
From source file:nl.knaw.dans.common.wicket.components.search.results.SearchResultPanel.java
License:Apache License
public IModel<String> getResultMessageModel() { return new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = -3354392109873495635L; @Override/* www . j a va 2 s .c o m*/ public String getObject() { final SearchRequest request = getSearchRequest(); final SearchResult<?> result = getSearchResult(); String queryString = request.getQuery().getQueryString(); if (!StringUtils.isBlank(queryString)) { if (result.getTotalHits() == 1) { return new StringResourceModel(RI_RESULTMESSAGE_1, SearchResultPanel.this, null, new Object[] { queryString }).getObject(); } else if (result.getTotalHits() > 1 && result.getTotalHits() <= request.getLimit()) { return new StringResourceModel(RI_RESULTMESSAGE_1PAGE, SearchResultPanel.this, null, new Object[] { result.getTotalHits(), queryString }).getObject(); } else if (result.getTotalHits() > 1) { return new StringResourceModel(RI_RESULTMESSAGE, SearchResultPanel.this, null, new Object[] { request.getOffset() + 1, Math.min(request.getOffset() + request.getLimit(), result.getTotalHits()), result.getTotalHits(), queryString }).getObject(); } else { return new StringResourceModel(RI_NO_RESULTS, SearchResultPanel.this, null, new Object[] { queryString }).getObject(); } } else { if (result.getTotalHits() == 1) { return new StringResourceModel(RI_RESULTMESSAGE_1_NIENTE, SearchResultPanel.this, null) .getObject(); } else if (result.getTotalHits() > 1 && pageBrowsePanel.getCurrentPage() == pageBrowsePanel.getLastPage()) { return new StringResourceModel(RI_RESULTMESSAGE_1PAGE_NIENTE, SearchResultPanel.this, null, new Object[] { result.getTotalHits() }).getObject(); } else if (result.getTotalHits() > 1) { return new StringResourceModel(RI_RESULTMESSAGE_NIENTE, SearchResultPanel.this, null, new Object[] { request.getOffset() + 1, Math.min(request.getOffset() + request.getLimit(), result.getTotalHits()), result.getTotalHits() }).getObject(); } else { return new StringResourceModel(RI_NO_RESULTS_NIENTE, SearchResultPanel.this, null) .getObject(); } } } }; }
From source file:nl.knaw.dans.common.wicket.components.upload.EasyUpload.java
License:Apache License
/** * Creates an EasyUpload wicket component based on a panel. The default tmp directory of the machine * will be used for writing the uploads to disk. * @param id the id of the wicket component. *//*ww w.j av a 2 s . c om*/ public EasyUpload(String id, EasyUploadConfig config) { super(id); this.setConfig(config); setOutputMarkupId(true); // add css add(CSSPackageResource.getHeaderContribution(new ResourceReference(EasyUpload.class, "EasyUpload.css"))); // add javascript libraries add(JavascriptPackageResource .getHeaderContribution(new ResourceReference(EasyUpload.class, "js/lib/json2.js"))); add(JavascriptPackageResource .getHeaderContribution(new ResourceReference(EasyUpload.class, "js/lib/jquery-1.3.2.min.js"))); // add javascript add(JavascriptPackageResource .getHeaderContribution(new ResourceReference(EasyUpload.class, "js/EasyUpload.js"))); // add UploadPanel javascript configuration (server to client) IModel variablesModel = new AbstractReadOnlyModel() { private static final long serialVersionUID = 7602363940615595891L; @SuppressWarnings("unchecked") public Map getObject() { Map<String, CharSequence> variables = new HashMap<String, CharSequence>(1); ResourceReference uploadStatusRef = new ResourceReference(EasyUploadStatusCommand.RESOURCE_NAME); ResourceReference uploadCancelRef = new ResourceReference(EasyUploadCancelCommand.RESOURCE_NAME); variables.put("uploadStatusRequestURL", getPage().urlFor(uploadStatusRef)); variables.put("uploadCancelRequestURL", getPage().urlFor(uploadCancelRef)); variables.put("autoRemoveMessages", getConfig().autoRemoveMessages() ? "true" : "false"); return variables; } }; add(TextTemplateHeaderContributor.forJavaScript(EasyUpload.class, "js/EasyUploadConfig.js", variablesModel)); }
From source file:nl.knaw.dans.dccd.web.search.DccdSearchResultExplorePanel.java
License:Apache License
private void initComponents() { // criteria//www . ja v a2s.c om add(new SearchCriteriaPanel("searchCriteria", getSearchModel()) { private static final long serialVersionUID = -6370349646809914607L; public boolean isVisible() { return super.isVisible() && getRequestBuilder().getCriteria().size() > 1; }; }); // result message (needs to come after page browse panel) add(new UnescapedLabel("resultMessage", getResultMessageModel())); initGeoViewer(); initTimeline(); // TEST Form form = new Form("form") { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { // super.onSubmit(); logger.debug("fromYear = " + Integer.toString(getFromYear())); // TEST // try to add or change the period query and search? final SimpleField<YearRange> deathYear = new SimpleField<YearRange>( DccdSB.TRIDAS_MEASUREMENTSERIES_INTERPRETATION_DEATHYEAR_NAME); deathYear.setValue(new YearRange(getFromYear(), 2014)); final SimpleField<YearRange> lastYear = new SimpleField<YearRange>( DccdSB.TRIDAS_MEASUREMENTSERIES_INTERPRETATION_LASTYEAR_NAME); lastYear.setValue(new YearRange(getFromYear(), 2014)); SearchModel searchModel = getSearchModel();// TEST List<SearchCriterium> criteria = new ArrayList<SearchCriterium>(); searchModel.getRequestBuilder().setCriteria(criteria); //empty!!!!! // // we need to 'remove' it first, with the the name // List<SearchCriterium> criteria = searchModel.getRequestBuilder().getCriteria(); // then add it /* getSearchModel().addCriterium(new FilterCriterium(lastYear, new AbstractReadOnlyModel<String>(){ private static final long serialVersionUID = -7747467835417089340L; @Override public String getObject() { return "Period: " + Integer.toString(getFromYear()) + " - " + "2014"; } })); */ /* */ CombinedOptionalField<YearRange> endYearField = new CombinedOptionalField<YearRange>( new ArrayList<String>() { { add(DccdSB.TRIDAS_MEASUREMENTSERIES_INTERPRETATION_DEATHYEAR_NAME); add(DccdSB.TRIDAS_MEASUREMENTSERIES_INTERPRETATION_LASTYEAR_NAME); } }); endYearField.setValue(new YearRange(getFromYear(), 2014)); getSearchModel() .addCriterium(new FilterCriterium(endYearField, new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 3313159546708159282L; @Override public String getObject() { return "Period: " + Integer.toString(getFromYear()) + " - " + "2014"; } })); /* */ doSearch(); } }; add(form); // fromYear TextField fromYearValue = new TextField("fromYear", new PropertyModel(this, "fromYear"), Integer.class); form.add(fromYearValue); //fromYearValue.add(new MinimumValidator(1)); }
From source file:nl.knaw.dans.dccd.web.search.DccdSearchResultExplorePanel.java
License:Apache License
public IModel<String> getResultMessageModel() { return new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = -3354392109873495635L; @Override//from w w w.j a va2 s . com public String getObject() { final SearchRequest request = getSearchRequest(); final SearchResult<?> result = getSearchResult(); String queryString = request.getQuery().getQueryString(); if (!StringUtils.isBlank(queryString)) { if (result.getTotalHits() == 1) { return new StringResourceModel(RI_RESULTMESSAGE_1, DccdSearchResultExplorePanel.this, null, new Object[] { Strings.escapeMarkup(queryString) }).getObject(); } else if (result.getTotalHits() > 1 && result.getTotalHits() <= request.getLimit()) { return new StringResourceModel(RI_RESULTMESSAGE_1PAGE, DccdSearchResultExplorePanel.this, null, new Object[] { result.getTotalHits(), Strings.escapeMarkup(queryString) }) .getObject(); } else if (result.getTotalHits() > 1) { return new StringResourceModel(RI_RESULTMESSAGE, DccdSearchResultExplorePanel.this, null, new Object[] { request.getOffset() + 1, Math.min(request.getOffset() + request.getLimit(), result.getTotalHits()), result.getTotalHits(), Strings.escapeMarkup(queryString) }).getObject(); } else { return new StringResourceModel(RI_NO_RESULTS, DccdSearchResultExplorePanel.this, null, new Object[] { Strings.escapeMarkup(queryString) }).getObject(); } } else { if (result.getTotalHits() == 1) { return new StringResourceModel(RI_RESULTMESSAGE_1_NIENTE, DccdSearchResultExplorePanel.this, null).getObject(); } else if (result.getTotalHits() > 1) { return new StringResourceModel(RI_RESULTMESSAGE_1PAGE_NIENTE, DccdSearchResultExplorePanel.this, null, new Object[] { result.getTotalHits() }) .getObject(); } else { return new StringResourceModel(RI_NO_RESULTS_NIENTE, DccdSearchResultExplorePanel.this, null).getObject(); } } } }; }
From source file:nl.knaw.dans.dccd.web.search.DccdSearchResultPanel.java
License:Apache License
private void initComponents() { initSearchTips();/* www .j av a 2 s .co m*/ initGeoViewer(); initTimeline(); // TODO refactor into parts // Search results download is only visible for logged in users SearchResultsDownloadPanel searchResultsDownloadPanel = new SearchResultsDownloadPanel( "downloadResultsPanel", getSearchModel(), this); searchResultsDownloadPanel.setVisible(isAllowedToDownloadSearchResults()); add(searchResultsDownloadPanel); // criteria add(new SearchCriteriaPanel("searchCriteria", getSearchModel()) { private static final long serialVersionUID = -6370349646809914607L; public boolean isVisible() { return super.isVisible() && getRequestBuilder().getCriteria().size() > 1; }; }); // sort fields add(new SearchSortPanel("sortPanel", getSearchModel(), getConfig().getSortLinks())); // result message (needs to come after page browse panel) add(new UnescapedLabel("resultMessage", getResultMessageModel())); // search hits add(new ListView("searchHits", new AbstractReadOnlyModel<List>() { private static final long serialVersionUID = -8467661423061481825L; @Override public List getObject() { updateMarkerIndexes(); // The hitpanels need to know the marker index return getSearchResult().getHits(); } }) { private static final long serialVersionUID = -6597598635055541684L; @Override protected void populateItem(ListItem item) { final SearchHit<?> hit = (SearchHit<?>) item.getModelObject(); Panel hitPanel = getConfig().getHitPanelFactory().createHitPanel("searchHit", hit, getSearchModel()); if (hitPanel == null) { logger.error( "Could not create hit panel for searchHit " + hit.toString() + ". Programmer mistake."); throw new InternalWebError(); } String oddOrEven = item.getIndex() % 2 == 0 ? "even" : "odd"; hitPanel.add(new AttributeAppender("class", new Model(oddOrEven), " ")); item.add(hitPanel); } @Override public boolean isVisible() { return getSearchResult().getHits().size() > 0; } }); // search refinement panel add(new SearchBar("refineSearchPanel") { private static final long serialVersionUID = -5980195347064339476L; @Override public void onSearch(String searchText) { DccdSearchResultPanel.this.getRequestBuilder().addCriterium(new TextSearchCriterium(searchText, new Model<String>(CriteriumLabel.createFilterText( DccdSearchResultPanel.this.getString(SEARCHRESULTPANEL_CRITERIUMTEXT_REFINE_SEARCH), searchText)))); } @Override public boolean isVisible() { return DccdSearchResultPanel.this.getSearchResult().getHits().size() > 1; } }); /** * I had to make this enclosure by hand, because putting a wicket:enclosure in a * wicket:enclosure caused a nasty bug when using the setResponsePage to render * a page with this component on it. Everytime it would say that the "browseMore" * component was forgotten in the markup. After almost 2 hours of searching it * turned out to be a freaking bug in Wicket 1.4.7. */ WebMarkupContainer refineFacets = new WebMarkupContainer("refineFacetsEnclosure") { private static final long serialVersionUID = 2474778991631709989L; public boolean isVisible() { for (FacetConfig facetConfig : getConfig().getRefineFacets()) { if (FacetPanel.isVisible(facetConfig, getSearchModel())) return true; } return false; }; }; add(refineFacets); // refinement facets refineFacets.add(new ListView<FacetConfig>("refineFacets", getConfig().getRefineFacets()) { private static final long serialVersionUID = 7406250758535500272L; @Override protected void populateItem(ListItem<FacetConfig> item) { item.add(new FacetPanel("facet", getSearchModel(), item.getModelObject())); } }); // browse more if (getConfig().showBrowseMore()) { refineFacets.add(new Link("browseMore") { private static final long serialVersionUID = -6803231407654989149L; public void onClick() { onBrowseMoreClicked(getSearchModel()); } }); } else { WicketUtil.hide(refineFacets, "browseMore"); } // page browse panel PageBrowseData pbData = new PageBrowseData(getRequestBuilder().getOffset() + 1, getRequestBuilder().getLimit(), getSearchResult().getTotalHits()); pageBrowsePanel = new PageBrowsePanel(PAGEBROWSE_PANEL, new Model<PageBrowseData>(pbData) { private static final long serialVersionUID = 1943406023315332637L; @Override public PageBrowseData getObject() { PageBrowseData pbData = super.getObject(); pbData.init(getRequestBuilder().getOffset() + 1, getRequestBuilder().getLimit(), getSearchResult().getTotalHits()); return pbData; } }, new PageBrowseLinkListener() { private static final long serialVersionUID = 5814085953388070471L; public void onClick(PageBrowseLink plink) { getRequestBuilder().setOffset(plink.getTargetItemStart() - 1); } }); add(pageBrowsePanel); // Also put a result navigation panel at the top of the result list and not only at the bottom PageBrowsePanel pageBrowsePanelTop = new PageBrowsePanel("pageBrowsePanelTop", new Model<PageBrowseData>(pbData) { private static final long serialVersionUID = 285669742367238762L; @Override public PageBrowseData getObject() { PageBrowseData pbData = super.getObject(); pbData.init(getRequestBuilder().getOffset() + 1, getRequestBuilder().getLimit(), getSearchResult().getTotalHits()); return pbData; } }, new PageBrowseLinkListener() { private static final long serialVersionUID = -5680633860752419691L; public void onClick(PageBrowseLink plink) { getRequestBuilder().setOffset(plink.getTargetItemStart() - 1); } }); add(pageBrowsePanelTop); // select the number of results per page, only at the top of the results ResultsPerPageSelectionPanel resultsPerPageSelectionPanel = new ResultsPerPageSelectionPanel( "resultsPerPageSelectionPanel", new Model<SearchRequestBuilder>() { private static final long serialVersionUID = 1L; // pull the request builder, because we need to set/get the 'limit' @Override public SearchRequestBuilder getObject() { return getRequestBuilder(); } }) { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { // hide when there are no results return (getSearchResult().getTotalHits() > 0); } }; add(resultsPerPageSelectionPanel); // advanced search if (getConfig().showAdvancedSearch()) { add(new Link("advancedSearch") { private static final long serialVersionUID = -1905413983732583324L; @Override public void onClick() { onAdvancedSearchClicked(getSearchModel()); } }); } else { hide("advancedSearch"); } }