CSVServlet.java 4.88 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.servlets.HtmlStatusResponseHelper
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletResponse
 *  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.RequestParameter
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.dam.pim.impl.csv;

import com.day.cq.commons.servlets.HtmlStatusResponseHelper;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import com.day.cq.dam.pim.PIMHelper;
import com.day.cq.dam.pim.impl.util.PIMUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
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.RequestParameter;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0)
@Service
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}), @Property(name="sling.servlet.methods", value={"POST"}), @Property(name="sling.servlet.selectors", value={"csvedit"})})
public class CSVServlet
extends SlingAllMethodsServlet {
    private static final Logger log = LoggerFactory.getLogger(CSVServlet.class);

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        block10 : {
            try {
                Integer row = Integer.parseInt(request.getRequestParameter("row").getString());
                String data = request.getRequestParameter("data").getString("UTF-8");
                Resource resource = request.getResource();
                Asset asset = (Asset)resource.adaptTo(Asset.class);
                if (!asset.getMimeType().equals("text/csv")) break block10;
                if (row < 0) {
                    asset.addRendition("original", PIMUtils.strToStream(data), "text/csv");
                } else {
                    String line;
                    String encoding = "UTF-8";
                    try {
                        encoding = (String)((ValueMap)((Resource)asset.getOriginal().adaptTo(Resource.class)).getChild("jcr:content").adaptTo(ValueMap.class)).get("jcr:encoding", String.class);
                    }
                    catch (Exception e) {
                        log.warn("Unable to read encoding for " + asset.getPath());
                    }
                    InputStream dataStream = asset.getOriginal().getStream();
                    PIMHelper.skipBOM(dataStream, encoding);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(dataStream, encoding));
                    StringBuilder csv = new StringBuilder(reader.readLine());
                    csv.append("\n");
                    int cnt = 0;
                    boolean found = false;
                    while ((line = reader.readLine()) != null) {
                        if (cnt == row) {
                            found = true;
                            csv.append(data);
                        } else {
                            csv.append(line);
                        }
                        csv.append("\n");
                        ++cnt;
                    }
                    reader.close();
                    if (!found) {
                        csv.append(data);
                    }
                    asset.addRendition("original", PIMUtils.strToStream(csv.toString()), "text/csv");
                }
                HtmlStatusResponseHelper.createStatusResponse((boolean)true, (String)(asset.getName() + " saved successfully.")).send((HttpServletResponse)response, true);
            }
            catch (Exception e) {
                log.warn("Error while saving CSV : " + e.getMessage());
                HtmlStatusResponseHelper.createStatusResponse((boolean)false, (String)"Error while saving CSV").send((HttpServletResponse)response, true);
            }
        }
    }
}