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

Last change on this file since 1007 was 1007, checked in by patdui, 13 years ago
  • added resourceType facet and added a list of resources on the show result page.
  • added i18n properties
  • fixed some olac facets supporting multiple patterns to match a facet
File size: 6.4 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import java.util.Collection;
4
5import org.apache.solr.common.SolrDocument;
6import org.apache.solr.common.SolrDocumentList;
7import org.apache.wicket.PageParameters;
8import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
9import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
10import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
11import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
12import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
13import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
14import org.apache.wicket.markup.ComponentTag;
15import org.apache.wicket.markup.MarkupStream;
16import org.apache.wicket.markup.html.WebMarkupContainer;
17import org.apache.wicket.markup.html.basic.Label;
18import org.apache.wicket.markup.html.basic.MultiLineLabel;
19import org.apache.wicket.markup.html.link.BookmarkablePageLink;
20import org.apache.wicket.markup.html.link.ExternalLink;
21import org.apache.wicket.markup.repeater.Item;
22import org.apache.wicket.markup.repeater.RepeatingView;
23import org.apache.wicket.model.IModel;
24import org.apache.wicket.model.ResourceModel;
25import org.apache.wicket.protocol.http.WicketURLEncoder;
26
27import eu.clarin.cmdi.vlo.Configuration;
28import eu.clarin.cmdi.vlo.FacetConstants;
29import eu.clarin.cmdi.vlo.Resources;
30import eu.clarin.cmdi.vlo.StringUtils;
31import eu.clarin.cmdi.vlo.dao.DaoLocator;
32
33public class ShowResultPage extends BasePage {
34
35    public static final String PARAM_DOC_ID = "docId";
36
37    public ShowResultPage(final PageParameters parameters) {
38        super(parameters);
39        String docId = getPageParameters().getString(PARAM_DOC_ID, null);
40        SearchPageQuery query = new SearchPageQuery(parameters);
41        BookmarkablePageLink backLink = new BookmarkablePageLink("backLink", FacetedSearchPage.class, query.getPageParameters());
42        add(backLink);
43        String handle = docId.substring("test-".length());
44        add(new ExternalLink("openBrowserLink", Configuration.getInstance().getIMDIBrowserUrl(handle)));
45        addPrevNextLabels(docId, query);
46        SolrDocument solrDocument = DaoLocator.getSearchResultsDao().getSolrDocument(docId);
47        addAttributesTable(solrDocument);
48        addResourceLinks(solrDocument);
49    }
50
51    private void addAttributesTable(final SolrDocument solrDocument) {
52        DocumentAttributesDataProvider attributeProvider = new DocumentAttributesDataProvider(solrDocument);
53        DataTable table = new DataTable("attributesTable", createAttributesColumns(), attributeProvider, 250);
54        table.setTableBodyCss("attributesTbody");
55        table.addTopToolbar(new HeadersToolbar(table, null));
56        add(table);
57    }
58
59    @SuppressWarnings("serial")
60    private IColumn[] createAttributesColumns() {
61        IColumn[] columns = new IColumn[2];
62
63        columns[0] = new PropertyColumn(new ResourceModel(Resources.FIELD), "field") {
64
65            @Override
66            public String getCssClass() {
67                return "attribute";
68            }
69        };
70        columns[1] = new AbstractColumn<DocumentAttribute>(new ResourceModel(Resources.VALUE)) {
71
72            @Override
73            public void populateItem(Item<ICellPopulator<DocumentAttribute>> cellItem, String componentId,
74                    IModel<DocumentAttribute> rowModel) {
75                DocumentAttribute attribute = rowModel.getObject();
76                cellItem.add(new MultiLineLabel(componentId, attribute.getValue()) {
77
78                    @Override
79                    protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
80                        CharSequence body = StringUtils.toMultiLineHtml(getDefaultModelObjectAsString());
81                        replaceComponentTagBody(markupStream, openTag, body);
82                    }
83                });
84            }
85        };
86        return columns;
87    }
88
89    private void addPrevNextLabels(String docId, SearchPageQuery query) {
90        int index = -1;
91        SolrDocumentList docIdList = DaoLocator.getSearchResultsDao().getDocIdList(query.getSolrQuery().getCopy());
92        for (int i = 0; i < docIdList.size(); i++) {
93            SolrDocument doc = docIdList.get(i);
94            if (doc.getFieldValue(FacetConstants.FIELD_ID).equals(docId)) {
95                index = i;
96                break;
97            }
98        }
99        if (index > 0) {
100            String prevDocId = docIdList.get(index - 1).getFieldValue(FacetConstants.FIELD_ID).toString();
101            BookmarkablePageLink<ShowResultPage> prev = createBookMarkableLink("prev", query, prevDocId);
102            add(prev);
103        } else {
104            add(new WebMarkupContainer("prev"));
105        }
106        if (index < (docIdList.size() - 1) && index >= 0) {
107            String prevDocId = docIdList.get(index + 1).getFieldValue(FacetConstants.FIELD_ID).toString();
108            BookmarkablePageLink<ShowResultPage> next = createBookMarkableLink("next", query, prevDocId);
109            add(next);
110        } else {
111            add(new WebMarkupContainer("next"));
112        }
113    }
114
115    private void addResourceLinks(SolrDocument solrDocument) {
116        RepeatingView repeatingView = new RepeatingView("resourceList");
117        add(repeatingView);
118        if (solrDocument.containsKey(FacetConstants.FIELD_RESOURCE)) {
119            Collection<Object> resources = solrDocument.getFieldValues(FacetConstants.FIELD_RESOURCE);
120            for (Object resource : resources) {
121                String[] split = resource.toString().split(",", 2);
122                String mimeType = split[0];
123                String resourceLink = split[1];
124                repeatingView.add(new ResourceLinkPanel(repeatingView.newChildId(), mimeType, resourceLink));
125            }
126        } else {
127            repeatingView.add(new Label(repeatingView.newChildId(), new ResourceModel(Resources.NO_RESOURCE_FOUND)));
128        }
129    }
130
131    public static BookmarkablePageLink<ShowResultPage> createBookMarkableLink(String linkId, SearchPageQuery query, String docId) {
132        PageParameters pageParameters = query.getPageParameters();
133        pageParameters.put(ShowResultPage.PARAM_DOC_ID, WicketURLEncoder.QUERY_INSTANCE.encode(docId));
134        BookmarkablePageLink<ShowResultPage> docLink = new BookmarkablePageLink<ShowResultPage>(linkId, ShowResultPage.class,
135                pageParameters);
136        return docLink;
137    }
138}
Note: See TracBrowser for help on using the repository browser.