SearchServlet.java 3.19 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  javax.jcr.query.Row
 *  javax.jcr.query.RowIterator
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.jackrabbit.commons.query.GQL
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.osgi.framework.BundleContext
 *  org.slf4j.Logger
 */
package com.day.crx.delite.impl.servlets;

import com.day.crx.delite.impl.AbstractServlet;
import com.day.crx.delite.impl.support.RequestData;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.jackrabbit.commons.query.GQL;
import org.apache.sling.commons.json.io.JSONWriter;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;

public class SearchServlet
extends AbstractServlet {
    public SearchServlet(BundleContext bc) {
        super(bc);
    }

    protected void doService(HttpServletRequest request, HttpServletResponse res, Session session) throws ServletException, IOException {
        res.setContentType("application/json");
        res.setCharacterEncoding("UTF-8");
        PrintWriter pw = res.getWriter();
        JSONWriter writer = new JSONWriter((Writer)pw);
        try {
            String term;
            RequestData req = new RequestData(request);
            writer.object();
            long total = 0;
            writer.key("results");
            writer.array();
            long start = 0;
            String startParam = req.getParameter("start");
            if (startParam != null && !startParam.equals("")) {
                start = Long.valueOf(startParam) - 1;
            }
            long limit = -1;
            String limitParam = req.getParameter("limit");
            if (limitParam != null && !limitParam.equals("")) {
                limit = Long.valueOf(limitParam);
            }
            if ((term = req.getParameter("query")) != null && !term.equals("")) {
                RowIterator rows = GQL.execute((String)term, (Session)session);
                total = rows.getSize();
                rows.skip(start);
                while (rows.hasNext()) {
                    if (limit > 0) {
                        --limit;
                    } else if (limit == 0) break;
                    Row row = rows.nextRow();
                    writer.object();
                    writer.key("path").value((Object)row.getPath());
                    Value v = row.getValue("rep:excerpt()");
                    if (v != null) {
                        writer.key("excerpt").value((Object)v.getString());
                    }
                    writer.endObject();
                }
            }
            writer.endArray();
            writer.key("total").value(total);
            writer.endObject();
        }
        catch (Exception re) {
            this.logger.error("Unable to search", (Throwable)re);
            res.sendError(500);
        }
    }
}