Changeset 967


Ignore:
Timestamp:
12/08/10 13:47:56 (13 years ago)
Author:
patdui
Message:

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

Location:
vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo
Files:
1 added
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/dao/SearchResultsDao.java

    r770 r967  
    2929    }
    3030
     31    public SolrDocumentList getDocIdList(SolrQuery query) {
     32        query.setFields(FacetConstants.FIELD_ID);
     33        query.setFacet(false);
     34        query.setStart(0);
     35        query.setRows(Integer.MAX_VALUE);
     36        QueryResponse queryResponse = fireQuery(query);
     37        return queryResponse.getResults();
     38    }
     39
    3140}
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/AnchorPanel.java

    r940 r967  
    1313class AnchorPanel extends Panel {
    1414
     15    private static final long serialVersionUID = 1L;
     16
    1517    public AnchorPanel(String id, String value) {
    1618        super(id);
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/DocumentLinkPanel.java

    r801 r967  
    22
    33import org.apache.solr.common.SolrDocument;
    4 import org.apache.wicket.PageParameters;
    54import org.apache.wicket.markup.html.basic.Label;
    65import org.apache.wicket.markup.html.link.BookmarkablePageLink;
    76import org.apache.wicket.markup.html.panel.Panel;
    87import org.apache.wicket.model.IModel;
    9 import org.apache.wicket.protocol.http.WicketURLEncoder;
     8
     9import eu.clarin.cmdi.vlo.dao.FacetConstants;
    1010
    1111public class DocumentLinkPanel extends Panel {
     
    1616        super(id, model);
    1717        SolrDocument doc = model.getObject();
    18         PageParameters pageParameters = query.getPageParameters();
    19         pageParameters.put(ShowResultPage.PARAM_DOC_ID, WicketURLEncoder.QUERY_INSTANCE.encode(doc.getFieldValue("id").toString()));
    20         BookmarkablePageLink<ShowResultPage> docLink = new BookmarkablePageLink<ShowResultPage>("docLink", ShowResultPage.class,
    21                 pageParameters);
     18        BookmarkablePageLink<ShowResultPage> docLink = ShowResultPage.createBookMarkableLink("docLink", query, doc.getFieldValue(
     19                FacetConstants.FIELD_ID).toString());
    2220        add(docLink);
    23         Object nameValue = doc.getFirstValue("name");
     21        Object nameValue = doc.getFirstValue(FacetConstants.FIELD_NAME);
    2422        String name = "<no name>";
    2523        if (nameValue != null) {
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/FacetedSearchPage.java

    r801 r967  
    9797        searchResultList = new AjaxFallbackDefaultDataTable("searchResults", columns, new SolrDocumentDataProvider(query.getSolrQuery()
    9898                .getCopy()), 10);
     99       
    99100        add(searchResultList);
    100101    }
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/SearchPageQuery.java

    r894 r967  
    1313
    1414import eu.clarin.cmdi.vlo.Configuration;
     15import eu.clarin.cmdi.vlo.dao.FacetConstants;
    1516
    1617public class SearchPageQuery implements Serializable {
     
    4748    }
    4849
    49     //    public static String escapeQueryChars(String s) { //TODO PD copied from solr, removed whitespace escaping this fixes some of the issues I am having. Moet ik solr escapen en dan url escapen?
    50     //        StringBuilder sb = new StringBuilder();
    51     //        for (int i = 0; i < s.length(); i++) {
    52     //          char c = s.charAt(i);
    53     //          // These characters are part of the query syntax and must be escaped
    54     //          if (c == '\\' || c == '+' || c == '-' || c == '!'  || c == '(' || c == ')' || c == ':'
    55     //            || c == '^' || c == '[' || c == ']' || c == '\"' || c == '{' || c == '}' || c == '~'
    56     //            || c == '*' || c == '?' || c == '|' || c == '&'  || c == ';'
    57     //            ) {
    58     //            sb.append('\\');
    59     //          }
    60     //          sb.append(c);
    61     //        }
    62     //        return sb.toString();
    63     //      }
    64 
    6550    private String escapeSolrQuery(String value) {
    6651        String result = null;
     
    8570        result.setRows(10);
    8671        result.setStart(0);
    87         result.setFields("name", "id");
     72        result.setFields(FacetConstants.FIELD_NAME, FacetConstants.FIELD_ID);
    8873        result.setFacet(true);
    8974        result.setFacetMinCount(1);
     
    9277    }
    9378
    94     public SolrQuery getSolrQuery() { //TODO fix tests and check incoming parameter decoding in solr_server I think I sent it properly
     79    public SolrQuery getSolrQuery() {
    9580        return query;
    9681    }
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/ShowResultPage.html

    r965 r967  
    1010            </div>
    1111            <br><br>
    12             <div wicket:id="nav" class="nav"></div>
    13             <div wicket:id="test" class="resulttable">[test]</div>
     12            <div class="prevNextLabels">
     13                <a wicket:id="prev">prev</a>
     14                <a wicket:id="next">next</a>
     15            </div>
    1416            <div class="resultAttributes"><table wicket:id="attributesTable"/></div>
    1517        </div>
  • vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/ShowResultPage.java

    r965 r967  
    11package eu.clarin.cmdi.vlo.pages;
    22
     3import org.apache.solr.common.SolrDocument;
     4import org.apache.solr.common.SolrDocumentList;
    35import org.apache.wicket.PageParameters;
    46import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
    57import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
    68import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
     9import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
    710import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
    811import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
    912import org.apache.wicket.markup.ComponentTag;
    1013import org.apache.wicket.markup.MarkupStream;
     14import org.apache.wicket.markup.html.basic.Label;
    1115import org.apache.wicket.markup.html.basic.MultiLineLabel;
    1216import org.apache.wicket.markup.html.link.BookmarkablePageLink;
     
    1519import org.apache.wicket.model.IModel;
    1620import org.apache.wicket.model.Model;
     21import org.apache.wicket.protocol.http.WicketURLEncoder;
    1722
    1823import eu.clarin.cmdi.vlo.Configuration;
    1924import eu.clarin.cmdi.vlo.StringUtils;
    20 import java.util.ArrayList;
    21 import java.util.Iterator;
    22 
    23 import java.util.List;
    24 import org.apache.solr.common.SolrDocument;
    25 import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
    26 import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
     25import eu.clarin.cmdi.vlo.dao.DaoLocator;
     26import eu.clarin.cmdi.vlo.dao.FacetConstants;
    2727
    2828public class ShowResultPage extends BasePage {
    2929
    3030    public static final String PARAM_DOC_ID = "docId";
    31     SearchPageQuery query;
    32     DataTable table;
    33     DocumentAttributesDataProvider attributeProvider;
    34     AjaxFallbackDefaultDataTable t;
    3531
    3632    public ShowResultPage(final PageParameters parameters) {
    3733        super(parameters);
    3834        String docId = getPageParameters().getString(PARAM_DOC_ID, null);
    39         query = new SearchPageQuery(parameters);
     35        SearchPageQuery query = new SearchPageQuery(parameters);
    4036        BookmarkablePageLink backLink = new BookmarkablePageLink("backLink", FacetedSearchPage.class, query.getPageParameters());
    4137        add(backLink);
    4238        String handle = docId.substring("test-".length());
    4339        add(new ExternalLink("openBrowserLink", Configuration.getInstance().getIMDIBrowserUrl(handle)));
    44         addSearchResults(docId);
     40        addPrevNextLabels(docId, query);
    4541        addAttributesTable(docId, query);
    4642    }
    4743
    4844    private void addAttributesTable(final String docId, SearchPageQuery query) {
    49         attributeProvider = new DocumentAttributesDataProvider(docId);
    50         t = new AjaxFallbackDefaultDataTable("attributesTable", createAttributesColumns(), attributeProvider, 25);
    51         t.setTableBodyCss("attributesTbody");
    52         add(t);
     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);
    5350    }
    5451
     
    8380    }
    8481
    85     @SuppressWarnings("serial")
    86     private void addSearchResults(String docId) {
    87         List<IColumn<SolrDocument>> columns = new ArrayList<IColumn<SolrDocument>>();
    88         columns.add(new AbstractColumn<SolrDocument>(new Model<String>("Results")) {
    89 
    90             @Override
    91             public void populateItem(Item<ICellPopulator<SolrDocument>> cellItem, String componentId, IModel<SolrDocument> rowModel) {
    92 
    93                 cellItem.add(new DocumentLinkPanel(componentId, rowModel, query));
     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;
    9490            }
    95         });
    96         AjaxFallbackDefaultDataTable t = new AjaxFallbackDefaultDataTable("test", columns, new SolrDocumentDataProvider(query.getSolrQuery().getCopy()), 1);
    97         add(t);
    98         add(new PreviousNextPagingNavigator("nav", t, this, query));
     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        }
    99106    }
    100107
    101     public void setCurrentPage(int pagenumber) {
    102         SolrDocumentDataProvider dataProvider = new SolrDocumentDataProvider(query.getSolrQuery().getCopy());
    103         Iterator it = dataProvider.iterator(pagenumber, 1);
    104         if (it.hasNext()) {
    105             SolrDocument doc = (SolrDocument) it.next();
    106             attributeProvider = new DocumentAttributesDataProvider(doc.getFieldValue("id").toString());
    107             this.remove("attributesTable");
    108             table = new DataTable("attributesTable", createAttributesColumns(), attributeProvider, 25);
    109             table.setTableBodyCss("attributesTbody");
    110             table.addTopToolbar(new HeadersToolbar(table, null));
    111             add(table);
    112         }
     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;
    113114    }
    114115}
Note: See TracChangeset for help on using the changeset viewer.