source: vlo/branches/to-wicket-1.6/vlo_web_app/src/main/java/eu/clarin/cmdi/vlo/pages/PrevNextHeaderPanel.java @ 4208

Last change on this file since 4208 was 4208, checked in by keeloo, 10 years ago

Finished the upgrade. The web application still needs to be tested.

File size: 3.1 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import org.apache.solr.common.SolrDocument;
4import org.apache.solr.common.SolrDocumentList;
5import org.apache.wicket.markup.html.WebMarkupContainer;
6import org.apache.wicket.markup.html.basic.Label;
7import org.apache.wicket.markup.html.link.BookmarkablePageLink;
8import org.apache.wicket.markup.html.panel.Panel;
9
10import eu.clarin.cmdi.vlo.FacetConstants;
11import eu.clarin.cmdi.vlo.dao.DaoLocator;
12
13public class PrevNextHeaderPanel extends Panel {
14
15    private static final long serialVersionUID = 1L;
16
17    /**
18     * Creates Prev/Next Header can take a while to generate
19     * @param id
20     * @param docId
21     * @param query
22     */
23    public PrevNextHeaderPanel(String id, String docId, SearchPageQuery query) {
24        super(id);
25        addPrevNextLabels(docId, query);
26    }
27
28    /**
29     * Constructor that creates dummy prev/next label, which can be used to load before the real labels are calculated.
30     * @param id
31     */
32    public PrevNextHeaderPanel(String id) {
33        super(id);
34        addDummyPrev();
35        addDummyResultCount();
36        addDummyNext();
37    }
38
39    private void addDummyPrev() {
40        add(new WebMarkupContainer("prev").setVisible(false));
41    }
42
43    private void addDummyNext() {
44        add(new WebMarkupContainer("next").setVisible(false));
45    }
46   
47    private void addDummyResultCount() {
48        add(new WebMarkupContainer("resultcount"));
49    }
50
51    private void addPrevNextLabels(String docId, SearchPageQuery query) {
52        int index = -1;
53        //Very inefficient query, possibly gets all the docId's (when no facets are selected) just to create the next/prev labels.
54        //Cannot see another way of doing this because the result page can be bookmarked and therefor the list needs to be refetched.
55        //If some facets are selected the list of id's is already a lot smaller and performance is not an issue. I lazy loaded the panel just to everything a bit more snappy.
56        SolrDocumentList docIdList = DaoLocator.getSearchResultsDao().getDocIdList(query.getSolrQuery().getCopy()); 
57
58        for (int i = 0; i < docIdList.size(); i++) {
59            SolrDocument doc = docIdList.get(i);
60            if (doc.getFieldValue(FacetConstants.FIELD_ID).equals(docId)) {
61                index = i;
62                break;
63            }
64        }
65        if (index > 0) {
66            String prevDocId = docIdList.get(index - 1).getFieldValue(FacetConstants.FIELD_ID).toString();
67            BookmarkablePageLink<ShowResultPage> prev = ShowResultPage.createBookMarkableLink("prev", query, prevDocId);
68            add(prev);
69        } else {
70            addDummyPrev();
71        }
72       
73        add(new Label("resultcount", "Record "+(index+1)+" out of "+docIdList.size()));
74       
75        if (index < (docIdList.size() - 1) && index >= 0) {
76            String prevDocId = docIdList.get(index + 1).getFieldValue(FacetConstants.FIELD_ID).toString();
77            BookmarkablePageLink<ShowResultPage> next = ShowResultPage.createBookMarkableLink("next", query, prevDocId);
78            add(next);
79        } else {
80            addDummyNext();
81        }
82    }
83
84}
Note: See TracBrowser for help on using the repository browser.