UploadServlet.java 5.81 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Binary
 *  javax.jcr.Item
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  javax.jcr.ValueFactory
 *  javax.servlet.ServletException
 *  javax.servlet.ServletInputStream
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.commons.fileupload.FileItem
 *  org.apache.commons.fileupload.FileItemFactory
 *  org.apache.commons.fileupload.disk.DiskFileItemFactory
 *  org.apache.commons.fileupload.servlet.ServletFileUpload
 *  org.apache.sling.commons.json.JSONException
 *  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 java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.jcr.Binary;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;

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

    protected void doService(HttpServletRequest req, HttpServletResponse res, Session session) throws ServletException, IOException {
        String path = null;
        ArrayList<InputStream> inputs = new ArrayList<InputStream>();
        try {
            if (ServletFileUpload.isMultipartContent((HttpServletRequest)req)) {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload((FileItemFactory)factory);
                List items = upload.parseRequest(req);
                for (FileItem item : items) {
                    if (item.isFormField() && "path".equals(item.getFieldName())) {
                        path = item.getString("UTF-8");
                        continue;
                    }
                    if (item.isFormField()) continue;
                    inputs.add(item.getInputStream());
                }
            } else {
                path = req.getParameter("path");
            }
            ValueFactory vf = session.getValueFactory();
            Item item = session.getItem(path);
            if (item.isNode()) {
                String filename = null;
                String cdHeader = req.getHeader("Content-Disposition");
                for (String cdPart : cdHeader.split(";")) {
                    if (!(cdPart = cdPart.trim()).startsWith("filename=")) continue;
                    filename = cdPart.substring(10, cdPart.length() - 1);
                }
                Node parent = (Node)item;
                Node file = parent.addNode(filename, "nt:file");
                Node content = file.addNode("jcr:content", "nt:resource");
                content.setProperty("jcr:lastModified", Calendar.getInstance());
                content.setProperty("jcr:mimeType", "text/plain");
                content.setProperty("jcr:encoding", "utf-8");
                content.setProperty("jcr:data", vf.createBinary((InputStream)req.getInputStream()));
                session.save();
                res.setContentType("application/json");
                res.setCharacterEncoding("UTF-8");
                JSONWriter writer = new JSONWriter((Writer)res.getWriter());
                writer.object();
                writer.key("message").value((Object)"file received");
                writer.endObject();
            } else {
                Property prop = (Property)item;
                if (prop.isMultiple()) {
                    Value[] values = new Value[inputs.size()];
                    int i = 0;
                    for (InputStream in : inputs) {
                        values[i++] = vf.createValue(vf.createBinary(in));
                    }
                    prop.setValue(values);
                } else {
                    prop.setValue(vf.createBinary((InputStream)inputs.get(0)));
                }
                session.save();
                res.setContentType("text/html");
                res.setCharacterEncoding("UTF-8");
                JSONWriter writer = new JSONWriter((Writer)res.getWriter());
                writer.object();
                writer.key("success").value(true);
                writer.endObject();
            }
        }
        catch (Exception e) {
            this.logger.error("Error uploading: " + path, (Throwable)e);
            if (ServletFileUpload.isMultipartContent((HttpServletRequest)req)) {
                res.setContentType("text/html");
                res.setCharacterEncoding("UTF-8");
                JSONWriter writer = new JSONWriter((Writer)res.getWriter());
                try {
                    writer.object();
                    writer.key("success").value(false);
                    writer.key("message").value((Object)e.getMessage());
                    writer.endObject();
                }
                catch (JSONException e1) {
                    this.logger.error("Error sending error: " + path, (Throwable)e1);
                }
            }
            res.sendError(500, e.getMessage());
        }
    }
}