source: vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/ShowResultPage.java @ 967

Last change on this file since 967 was 967, checked in by patdui, 13 years ago

Fixed prev/next links. http://trac.clarin.eu/ticket/26
Not the best performance but acceptable.

File size: 5.2 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.PageParameters;
6import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
7import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
8import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
9import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
10import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
11import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
12import org.apache.wicket.markup.ComponentTag;
13import org.apache.wicket.markup.MarkupStream;
14import org.apache.wicket.markup.html.basic.Label;
15import org.apache.wicket.markup.html.basic.MultiLineLabel;
16import org.apache.wicket.markup.html.link.BookmarkablePageLink;
17import org.apache.wicket.markup.html.link.ExternalLink;
18import org.apache.wicket.markup.repeater.Item;
19import org.apache.wicket.model.IModel;
20import org.apache.wicket.model.Model;
21import org.apache.wicket.protocol.http.WicketURLEncoder;
22
23import eu.clarin.cmdi.vlo.Configuration;
24import eu.clarin.cmdi.vlo.StringUtils;
25import eu.clarin.cmdi.vlo.dao.DaoLocator;
26import eu.clarin.cmdi.vlo.dao.FacetConstants;
27
28public class ShowResultPage extends BasePage {
29
30    public static final String PARAM_DOC_ID = "docId";
31
32    public ShowResultPage(final PageParameters parameters) {
33        super(parameters);
34        String docId = getPageParameters().getString(PARAM_DOC_ID, null);
35        SearchPageQuery query = new SearchPageQuery(parameters);
36        BookmarkablePageLink backLink = new BookmarkablePageLink("backLink", FacetedSearchPage.class, query.getPageParameters());
37        add(backLink);
38        String handle = docId.substring("test-".length());
39        add(new ExternalLink("openBrowserLink", Configuration.getInstance().getIMDIBrowserUrl(handle)));
40        addPrevNextLabels(docId, query);
41        addAttributesTable(docId, query);
42    }
43
44    private void addAttributesTable(final String docId, SearchPageQuery query) {
45        DocumentAttributesDataProvider attributeProvider = new DocumentAttributesDataProvider(docId);
46        DataTable table = new DataTable("attributesTable", createAttributesColumns(), attributeProvider, 250);
47        table.setTableBodyCss("attributesTbody");
48        table.addTopToolbar(new HeadersToolbar(table, null));
49        add(table);
50    }
51
52    @SuppressWarnings("serial")
53    private IColumn[] createAttributesColumns() {
54        IColumn[] columns = new IColumn[2];
55
56        columns[0] = new PropertyColumn(new Model<String>("Field"), "field") {
57
58            @Override
59            public String getCssClass() {
60                return "attribute";
61            }
62        };
63        columns[1] = new AbstractColumn<DocumentAttribute>(new Model<String>("Value")) {
64
65            @Override
66            public void populateItem(Item<ICellPopulator<DocumentAttribute>> cellItem, String componentId,
67                    IModel<DocumentAttribute> rowModel) {
68                DocumentAttribute attribute = rowModel.getObject();
69                cellItem.add(new MultiLineLabel(componentId, attribute.getValue()) {
70
71                    @Override
72                    protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
73                        CharSequence body = StringUtils.toMultiLineHtml(getDefaultModelObjectAsString());
74                        replaceComponentTagBody(markupStream, openTag, body);
75                    }
76                });
77            }
78        };
79        return columns;
80    }
81
82    private void addPrevNextLabels(String docId, SearchPageQuery query) {
83        int index = -1;
84        SolrDocumentList docIdList = DaoLocator.getSearchResultsDao().getDocIdList(query.getSolrQuery().getCopy());
85        for (int i = 0; i < docIdList.size(); i++) {
86            SolrDocument doc = docIdList.get(i);
87            if (doc.getFieldValue(FacetConstants.FIELD_ID).equals(docId)) {
88                index = i;
89                break;
90            }
91        }
92        if (index > 0) {
93            String prevDocId = docIdList.get(index - 1).getFieldValue(FacetConstants.FIELD_ID).toString();
94            BookmarkablePageLink<ShowResultPage> prev = createBookMarkableLink("prev", query, prevDocId);
95            add(prev);
96        } else {
97            add(new Label("prev", "prev"));
98        }
99        if (index < (docIdList.size() - 1) && index >= 0) {
100            String prevDocId = docIdList.get(index + 1).getFieldValue(FacetConstants.FIELD_ID).toString();
101            BookmarkablePageLink<ShowResultPage> next = createBookMarkableLink("next", query, prevDocId);
102            add(next);
103        } else {
104            add(new Label("next", "next"));
105        }
106    }
107
108    public static BookmarkablePageLink<ShowResultPage> createBookMarkableLink(String linkId, SearchPageQuery query, String docId) {
109        PageParameters pageParameters = query.getPageParameters();
110        pageParameters.put(ShowResultPage.PARAM_DOC_ID, WicketURLEncoder.QUERY_INSTANCE.encode(docId));
111        BookmarkablePageLink<ShowResultPage> docLink = new BookmarkablePageLink<ShowResultPage>(linkId, ShowResultPage.class,
112                pageParameters);
113        return docLink;
114    }
115}
Note: See TracBrowser for help on using the repository browser.