MainServlet.java 6.27 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.GenericServlet
 *  javax.servlet.ServletException
 *  javax.servlet.ServletOutputStream
 *  javax.servlet.ServletRequest
 *  javax.servlet.ServletResponse
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.sling.commons.mime.MimeTypeService
 *  org.osgi.framework.Bundle
 *  org.osgi.framework.BundleContext
 */
package com.day.crx.delite.impl;

import com.day.crx.delite.impl.AbstractServlet;
import com.day.crx.delite.impl.servlets.ACEServlet;
import com.day.crx.delite.impl.servlets.DownloadServlet;
import com.day.crx.delite.impl.servlets.FilesearchServlet;
import com.day.crx.delite.impl.servlets.IndexServlet;
import com.day.crx.delite.impl.servlets.InitServlet;
import com.day.crx.delite.impl.servlets.LogoutServlet;
import com.day.crx.delite.impl.servlets.NodeServlet;
import com.day.crx.delite.impl.servlets.NodeTypeExportServlet;
import com.day.crx.delite.impl.servlets.NodeTypeImportServlet;
import com.day.crx.delite.impl.servlets.NodetypesServlet;
import com.day.crx.delite.impl.servlets.OverlayNodeServlet;
import com.day.crx.delite.impl.servlets.PreferencesServlet;
import com.day.crx.delite.impl.servlets.PrincipalsServlet;
import com.day.crx.delite.impl.servlets.PrivilegesServlet;
import com.day.crx.delite.impl.servlets.QueryServlet;
import com.day.crx.delite.impl.servlets.ReplicationServlet;
import com.day.crx.delite.impl.servlets.SearchServlet;
import com.day.crx.delite.impl.servlets.TreeServlet;
import com.day.crx.delite.impl.servlets.UploadServlet;
import com.day.crx.delite.impl.servlets.WelcomeServlet;
import com.day.crx.delite.impl.servlets.WorkspacesServlet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.sling.commons.mime.MimeTypeService;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;

public class MainServlet
extends GenericServlet {
    private final BundleContext bundleContext;
    private MimeTypeService mimeTypeService;
    private final Map<String, AbstractServlet> servlets = new HashMap<String, AbstractServlet>();

    public MainServlet(BundleContext bc) {
        this.bundleContext = bc;
        this.servlets.put("filesearch", new FilesearchServlet(bc));
        this.servlets.put("index", new IndexServlet(bc));
        this.servlets.put("init", new InitServlet(bc));
        this.servlets.put("logout", new LogoutServlet(bc));
        this.servlets.put("nodetypes", new NodetypesServlet(bc));
        this.servlets.put("query", new QueryServlet(bc));
        this.servlets.put("search", new SearchServlet(bc));
        this.servlets.put("setPreferences", new PreferencesServlet(bc));
        this.servlets.put("tree", new TreeServlet(bc));
        this.servlets.put("upload", new UploadServlet(bc));
        this.servlets.put("welcome", new WelcomeServlet(bc));
        this.servlets.put("workspaces", new WorkspacesServlet(bc));
        this.servlets.put("exportnodetype", new NodeTypeExportServlet(bc));
        this.servlets.put("importnodetype", new NodeTypeImportServlet(bc));
        this.servlets.put("ace", new ACEServlet(bc));
        this.servlets.put("principals", new PrincipalsServlet(bc));
        this.servlets.put("privileges", new PrivilegesServlet(bc));
        this.servlets.put("replication", new ReplicationServlet(bc));
        this.servlets.put("node", new NodeServlet(bc));
        this.servlets.put("download", new DownloadServlet(bc));
        this.servlets.put("overlayNode", new OverlayNodeServlet(bc));
    }

    public void setMimeTypeService(MimeTypeService mts) {
        this.mimeTypeService = mts;
    }

    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        if (!(req instanceof HttpServletRequest) || !(res instanceof HttpServletResponse)) {
            throw new ServletException("Not a http servlet request");
        }
        this.doService((HttpServletRequest)req, (HttpServletResponse)res);
    }

    private void doService(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        String pathInfo = req.getPathInfo();
        if (pathInfo == null || pathInfo.length() == 0) {
            pathInfo = "/";
        }
        if (pathInfo.endsWith("/")) {
            res.sendRedirect(req.getContextPath() + req.getServletPath() + pathInfo + "index.jsp");
            return;
        }
        if (!pathInfo.endsWith(".jsp")) {
            this.doResource(req, res, pathInfo);
        } else {
            int lastDot = pathInfo.lastIndexOf(46);
            String servletName = pathInfo.substring(1, lastDot);
            AbstractServlet servlet = this.servlets.get(servletName);
            if (servlet != null) {
                servlet.service(req, res);
            } else {
                res.sendError(404);
            }
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private void doResource(HttpServletRequest req, HttpServletResponse res, String pathInfo) throws ServletException, IOException {
        URL url = this.bundleContext.getBundle().getResource("/docroot" + pathInfo);
        if (url == null) {
            res.sendError(404);
        } else {
            String type;
            MimeTypeService mts = this.mimeTypeService;
            String string = type = mts != null ? mts.getMimeType(pathInfo) : null;
            if (type != null) {
                res.setContentType(type);
            }
            InputStream is = url.openStream();
            ServletOutputStream os = res.getOutputStream();
            try {
                int l;
                byte[] buf = new byte[2048];
                while ((l = is.read(buf)) > 0) {
                    os.write(buf, 0, l);
                }
            }
            finally {
                try {
                    is.close();
                }
                catch (IOException ignore) {}
            }
        }
    }
}