com.frank.search.common.PagerComponent.java Source code

Java tutorial

Introduction

Here is the source code for com.frank.search.common.PagerComponent.java

Source

/** PageComponent.java
 * Program      : solr_pager
 * Version      : 0.2.0
 * Purpose      : Pager component for SOLR
 *           Provides simple and fast paging for SOLR results
 * License      : GNU GPL v3 (see file COPYING)
 * Author      : Samuel Behan <samkob_(at)_gmail_._com> (c) 2000-2009
 * Web      : http://devel.dob.sk/solr_pager
 * Requirements   : JAVA 1.5, SOLR 1.4, ANT
 */
package com.frank.search.common;

/* solr imports */

import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.handler.component.ShardRequest;

import java.io.IOException;
import java.net.URL;

/* lf4j import */
/* java imports */

/**
 * PagerComponent Provides simple and fast paging for SOLR results
 *
 * @version 0.2.0 SamB $
 * @since solr 1.4
 */
public class PagerComponent extends SearchComponent {
    public static final String COMPONENT_NAME = "pager";
    public static final String PARAM_PAGER = "pager";
    public static final String PARAM_PAGER_PRE = "pager.pre";
    // private static final Logger log =
    // LoggerFactory.getLogger(PagerComponent.class);

    @Override
    @SuppressWarnings("unchecked")
    public void process(ResponseBuilder rb) throws IOException {
        /* get request params */
        SolrParams par = rb.req.getParams();
        int rows = par.getInt(CommonParams.ROWS, 0);
        int start = par.getInt(CommonParams.START, 0);
        int pages = par.getInt(PARAM_PAGER, 0);
        int pages_pre = par.getInt(PARAM_PAGER_PRE, 2);

        /* neet to work ? */
        if (pages == 0 || rows == 0)
            return;

        /* pager list */
        NamedList lst = new SimpleOrderedMap<Object>();
        NamedList lst2 = new SimpleOrderedMap<Object>();

        /* paging pages */
        int doc_count = rb.getResults().docSet.size();
        int page_count = doc_count / rows;
        int page_actual = start / rows;
        int page_pre = pages_pre;
        int page_post = pages - page_pre - 1;

        /* page range */
        if (page_actual - page_pre < 0) {
            page_post += -(page_actual - page_pre);
            page_pre -= -(page_actual - page_pre);
        } else if (page_actual + page_post > page_count) {
            page_post = pages - page_pre;
            page_pre = page_actual + pages - page_count;
        }

        /* sanity */
        if (page_pre < 0)
            page_pre = 0;
        if (page_post < 0)
            page_post = 0;

        /* next pages list */
        int i = (page_actual - page_pre);
        for (i = (i <= 0 ? 0 : i); i <= page_count && i <= (page_actual + page_post); i++)
            lst2.add(Integer.toString(i + 1), i * rows);
        lst.add("pages", lst2);

        /* navi */
        if (page_actual > 0)
            lst.add("prev", (page_actual - 1) * rows);
        if (page_actual - page_pre > 0)
            lst.add("first", 0);
        if (page_actual < page_count)
            lst.add("next", (page_actual + 1) * rows);
        if (page_actual + page_post < page_count)
            lst.add("last", page_count * rows);
        lst.add("actual", page_actual + 1);
        lst.add("count", page_count);

        /* finish */
        rb.rsp.add("pager", lst);
    }

    @Override
    public void prepare(ResponseBuilder rb) throws IOException {
    }

    public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {
    }

    @Override
    public void handleResponses(ResponseBuilder rb, ShardRequest sreq) {
    }

    @Override
    public void finishStage(ResponseBuilder rb) {
    }

    ////////////////////////////////////////////
    /// SolrInfoMBean
    ////////////////////////////////////////////

    @Override
    public String getDescription() {
        return "Pager";
    }

    @Override
    public String getVersion() {
        return "$Revision: 1 $";
    }

    public String getSourceId() {
        return "$Id: $";
    }

    @Override
    public String getSource() {
        return "$URL: http://devel.dob.sk/solr_pager $";
    }

    @Override
    public URL[] getDocs() {
        return null;
    }
}