ExtTreeServlet.java 3.01 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.servlets.AbstractPredicateServlet
 *  javax.servlet.Servlet
 *  javax.servlet.ServletException
 *  org.apache.commons.collections.Predicate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 */
package com.day.cq.extwidget.servlets;

import com.day.cq.commons.servlets.AbstractPredicateServlet;
import com.day.cq.extwidget.ExtTreeJsonWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.commons.collections.Predicate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;

@Component(metatype=0)
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}), @Property(name="sling.servlet.selectors", value={"ext"}), @Property(name="sling.servlet.extensions", value={"json"}), @Property(name="sling.servlet.methods", value={"GET"})})
public class ExtTreeServlet
extends AbstractPredicateServlet {
    public static final String INFINITY = "infinity";
    public static final String TIDY = "tidy";
    private static final long serialVersionUID = 4957052351412503213L;

    protected void doGet(SlingHttpServletRequest req, SlingHttpServletResponse resp, Predicate predicate) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("utf-8");
        String[] sels = req.getRequestPathInfo().getSelectors();
        int depth = 0;
        if (sels.length > 1) {
            if (sels[1].equals("infinity")) {
                depth = Integer.MAX_VALUE;
            } else {
                try {
                    depth = Integer.parseInt(sels[1]);
                }
                catch (NumberFormatException e) {
                    throw new ServletException("Invalid depth specifier: " + sels[1]);
                }
            }
        }
        ExtTreeJsonWriter w = new ExtTreeJsonWriter(req.getResourceResolver(), predicate, depth);
        w.setTidy("true".equals(req.getParameter("tidy")));
        w.write((Writer)resp.getWriter(), req.getResource());
    }

    protected int selectorPredicateStart() {
        return 2;
    }
}