QueryServlet.java 4.26 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Node
 *  javax.jcr.Session
 *  javax.jcr.Workspace
 *  javax.jcr.nodetype.NodeType
 *  javax.jcr.query.Query
 *  javax.jcr.query.QueryManager
 *  javax.jcr.query.QueryResult
 *  javax.jcr.query.Row
 *  javax.jcr.query.RowIterator
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  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 java.util.Date;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.nodetype.NodeType;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
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.sling.commons.json.io.JSONWriter;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;

public class QueryServlet
extends AbstractServlet {
    public QueryServlet(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 {
            RequestData req = new RequestData(request);
            writer.object();
            long total = 0;
            boolean success = true;
            String errMsg = null;
            writer.key("results");
            writer.array();
            boolean showResults = "true".equals(req.getParameter("showResults"));
            long before = 0;
            long after = 0;
            String type = req.getParameter("type");
            String stmt = req.getParameter("stmt");
            if (stmt != null && !stmt.equals("") && type != null && !type.equals("")) {
                QueryManager qm = session.getWorkspace().getQueryManager();
                try {
                    Query q = qm.createQuery(stmt, type);
                    before = new Date().getTime();
                    QueryResult result = q.execute();
                    String firstSelector = null;
                    if (result.getSelectorNames().length > 1) {
                        firstSelector = result.getSelectorNames()[0];
                    }
                    after = new Date().getTime();
                    RowIterator rows = result.getRows();
                    total = rows.getSize();
                    while (showResults && rows.hasNext()) {
                        Row row = rows.nextRow();
                        writer.object();
                        if (firstSelector != null) {
                            writer.key("path").value((Object)row.getPath(firstSelector));
                            writer.key("type").value((Object)row.getNode(firstSelector).getPrimaryNodeType().getName());
                        } else {
                            writer.key("path").value((Object)row.getPath());
                            writer.key("type").value((Object)row.getNode().getPrimaryNodeType().getName());
                        }
                        writer.endObject();
                    }
                }
                catch (Exception e) {
                    success = false;
                    errMsg = e.getMessage();
                }
            }
            writer.endArray();
            writer.key("total").value(total);
            writer.key("success").value(success);
            writer.key("time").value(after - before);
            if (!success) {
                writer.key("errorMessage").value((Object)errMsg);
            }
            writer.endObject();
        }
        catch (Exception re) {
            this.logger.error("Unable to search", (Throwable)re);
            res.sendError(500);
        }
    }
}