WatchfolderAdminServlet.java 15.6 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.PathNotFoundException
 *  javax.jcr.RepositoryException
 *  javax.servlet.Servlet
 *  javax.servlet.ServletOutputStream
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.apache.sling.settings.SlingSettingsService
 *  org.json.JSONArray
 *  org.json.JSONException
 *  org.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.aemfd.watchfolder.admin;

import com.adobe.aemfd.watchfolder.admin.WatchFolderConfigurationService;
import com.adobe.aemfd.watchfolder.config.WatchFolderConfiguration;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.Set;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.servlet.Servlet;
import javax.servlet.ServletOutputStream;
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.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.settings.SlingSettingsService;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=1, immediate=1, label="WatchfolderAdminServlet", description="Watchfolder Administration Helper Servlet")
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.extensions", value={"html"}), @Property(name="sling.servlet.paths", value={"/libs/fd/core/config/handler"}), @Property(name="sling.servlet.methods", value={"GET", "POST"}), @Property(name="sling.auth.requirements", value={"-/libs/fd/core/config"})})
public class WatchfolderAdminServlet
extends SlingAllMethodsServlet {
    public static final String WATCH_FOLDER_NODE_NAME = "watchFolderNodeName";
    private static final Logger logger = LoggerFactory.getLogger(WatchfolderAdminServlet.class);
    @Reference
    SlingRepository slingRepository;
    @Reference
    ResourceResolverFactory resourceResolver;
    SlingSettingsService slingSettingsService;
    @Reference
    ResourceResolverFactory resourceResolverFactory;

    public void doGet(SlingHttpServletRequest req, SlingHttpServletResponse resp) {
        this.requestHandler(req, resp);
    }

    public void doPost(SlingHttpServletRequest req, SlingHttpServletResponse resp) {
        this.requestHandler(req, resp);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private void requestHandler(SlingHttpServletRequest req, SlingHttpServletResponse resp) {
        try {
            if (req.getParameter("currService") != null) {
                if (req.getParameter("currService").equals("_createNewWatchfolder")) {
                    this.createNewWatchfolder(req, resp);
                    resp.setContentType("text/html; charset=Shift_JIS");
                } else if (req.getParameter("currService").equals("_editExistingWatchfolder")) {
                    this.editExistingWatchfolder(req, resp);
                }
            } else if (req.getParameter("_getEmptyWatchfolder") != null) {
                req.removeAttribute("_getEmptyWatchfolder");
                this.getEmptyWatchfolder(req, resp);
            } else if (req.getParameter("_editWatchfolder") != null) {
                req.removeAttribute("_editWatchfolder");
                this.getexistingWatchfolder(req, resp);
            } else if (req.getParameter("_deleteWatchfolder") != null) {
                req.removeAttribute("_deleteWatchfolder");
                this.deleteWatchfolder(req, resp);
            }
        }
        catch (Exception e) {
            if (e.toString().contains("ItemExistsException")) {
                resp.setStatus(500, "Watchfolder already exists");
            } else {
                resp.setStatus(500, "Please see logs for details");
            }
            PrintStream ps = null;
            try {
                try {
                    ps = new PrintStream((OutputStream)resp.getOutputStream(), true);
                    ps.println(e.getMessage());
                }
                catch (IOException ioe) {
                    logger.trace(ioe.getMessage(), (Throwable)ioe);
                    Object var7_6 = null;
                    if (ps != null) {
                        ps.close();
                    }
                }
                Object var7_5 = null;
                if (ps != null) {
                    ps.close();
                }
            }
            catch (Throwable var6_9) {
                Object var7_7 = null;
                if (ps != null) {
                    ps.close();
                }
                throw var6_9;
            }
            logger.error(e.getMessage(), (Throwable)e);
        }
    }

    private void createNewWatchfolder(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws RepositoryException, ParseException {
        logger.info("Create new watchfolder named " + req.getParameter("watchFolderNodeName"));
        WatchFolderConfigurationService configService = new WatchFolderConfigurationService();
        WatchFolderConfiguration config = new WatchFolderConfiguration();
        Set parameters = req.getParameterMap().keySet();
        boolean i = false;
        for (String key : parameters) {
            if (key.equals("currService")) continue;
            if (key.equals("customProperty")) {
                JSONArray jsonArray = null;
                try {
                    jsonArray = new JSONArray(req.getParameter(key));
                    if (jsonArray.length() <= 0) continue;
                    for (int it = 0; it < jsonArray.length(); ++it) {
                        StringBuilder name = new StringBuilder((String)jsonArray.getJSONArray(it).get(0));
                        name.insert(0, "param.");
                        String dataType = (String)jsonArray.getJSONArray(it).get(1);
                        Object value = null;
                        if (dataType.equals("String")) {
                            value = (String)jsonArray.getJSONArray(it).get(2);
                        }
                        if (dataType.equals("Boolean")) {
                            value = Boolean.parseBoolean((String)jsonArray.getJSONArray(it).get(2));
                        }
                        if (dataType.equals("Date")) {
                            SimpleDateFormat date = new SimpleDateFormat("yyyy-mm-dd");
                            Calendar cal = Calendar.getInstance();
                            cal.setTime(date.parse((String)jsonArray.getJSONArray(it).get(2)));
                            value = cal;
                        }
                        if (dataType.equals("Long")) {
                            value = Long.parseLong((String)jsonArray.getJSONArray(it).get(2));
                        }
                        if (dataType.equals("Double")) {
                            value = Double.parseDouble((String)jsonArray.getJSONArray(it).get(2));
                        }
                        config.setParam(name.toString(), value);
                    }
                    continue;
                }
                catch (JSONException e) {
                    e.printStackTrace();
                    continue;
                }
            }
            if (req.getParameter(key) == null || req.getParameter(key).equals("")) continue;
            config.setParam(key, req.getParameter(key));
        }
        try {
            configService.createWatchFolderNode(config, req.getResourceResolver());
        }
        catch (PathNotFoundException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (RepositoryException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (ParseException e) {
            logger.error(e.getMessage());
            throw e;
        }
    }

    private void editExistingWatchfolder(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws RepositoryException, ParseException {
        logger.info("Editing existing watchfolder named " + req.getParameter("watchFolderNodeName"));
        WatchFolderConfigurationService configService = new WatchFolderConfigurationService();
        WatchFolderConfiguration config = new WatchFolderConfiguration();
        Set parameters = req.getParameterMap().keySet();
        boolean i = false;
        for (String key : parameters) {
            if (key.equals("currService")) continue;
            if (key.equals("customProperty")) {
                JSONArray jsonArray = null;
                try {
                    jsonArray = new JSONArray(req.getParameter(key));
                    if (jsonArray.length() <= 0) continue;
                    for (int it = 0; it < jsonArray.length(); ++it) {
                        StringBuilder name = new StringBuilder((String)jsonArray.getJSONArray(it).get(0));
                        name.insert(0, "param.");
                        String dataType = (String)jsonArray.getJSONArray(it).get(1);
                        Object value = null;
                        if (dataType.equals("String")) {
                            value = (String)jsonArray.getJSONArray(it).get(2);
                        }
                        if (dataType.equals("Boolean")) {
                            value = Boolean.parseBoolean((String)jsonArray.getJSONArray(it).get(2));
                        }
                        if (dataType.equals("Date")) {
                            SimpleDateFormat date = new SimpleDateFormat("yyyy-mm-dd");
                            Calendar cal = Calendar.getInstance();
                            cal.setTime(date.parse((String)jsonArray.getJSONArray(it).get(2)));
                            value = cal;
                        }
                        if (dataType.equals("Long")) {
                            value = Long.parseLong((String)jsonArray.getJSONArray(it).get(2));
                        }
                        if (dataType.equals("Double")) {
                            value = Double.parseDouble((String)jsonArray.getJSONArray(it).get(2));
                        }
                        config.setParam(name.toString(), value);
                    }
                    continue;
                }
                catch (JSONException e) {
                    e.printStackTrace();
                    continue;
                }
            }
            if (req.getParameter(key) == null || req.getParameter(key).equals("")) continue;
            config.setParam(key, req.getParameter(key));
        }
        logger.info("requesting edit watchfolder service");
        try {
            configService.editExistingWatchfolder(config, req.getResourceResolver());
        }
        catch (PathNotFoundException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (RepositoryException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (ParseException e) {
            logger.error(e.getMessage());
            throw e;
        }
    }

    private void getEmptyWatchfolder(SlingHttpServletRequest req, SlingHttpServletResponse resp) {
        logger.info("getting default watchfolder information to prepopulate form");
        WatchFolderConfigurationService emptyConfig = new WatchFolderConfigurationService();
        Map<String, Object> map = emptyConfig.getEmptyWatchfolder();
        String json = new JSONObject(map).toString();
        resp.setContentType("application/json");
        try {
            resp.getWriter().write(json);
        }
        catch (Exception e) {
            logger.error(e.getMessage(), (Throwable)e);
        }
    }

    private void getexistingWatchfolder(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws RepositoryException, ParseException {
        logger.info("getting existing watchfolder named " + req.getParameter("name") + " to edit");
        WatchFolderConfigurationService configService = new WatchFolderConfigurationService();
        Map<String, Object> map = null;
        try {
            map = configService.getExistingWatchfolder(req.getParameter("name"), req.getResourceResolver());
        }
        catch (PathNotFoundException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (RepositoryException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (ParseException e) {
            logger.error(e.getMessage());
            throw e;
        }
        resp.setContentType("application/json");
        String json = new JSONObject(map).toString();
        resp.setContentType("application/json");
        try {
            resp.getWriter().write(json);
        }
        catch (Exception e) {
            logger.error(e.getMessage(), (Throwable)e);
        }
    }

    private void deleteWatchfolder(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws RepositoryException, ParseException {
        logger.info("deleteing watchfolder named " + req.getParameter("name"));
        WatchFolderConfigurationService configService = new WatchFolderConfigurationService();
        try {
            configService.deleteWatchfolder(req.getParameter("name"), req.getResourceResolver());
        }
        catch (PathNotFoundException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (RepositoryException e) {
            logger.error(e.getMessage());
            throw e;
        }
        catch (ParseException e) {
            logger.error(e.getMessage());
            throw e;
        }
    }

    protected void bindSlingRepository(SlingRepository slingRepository) {
        this.slingRepository = slingRepository;
    }

    protected void unbindSlingRepository(SlingRepository slingRepository) {
        if (this.slingRepository == slingRepository) {
            this.slingRepository = null;
        }
    }

    protected void bindResourceResolver(ResourceResolverFactory resourceResolverFactory) {
        this.resourceResolver = resourceResolverFactory;
    }

    protected void unbindResourceResolver(ResourceResolverFactory resourceResolverFactory) {
        if (this.resourceResolver == resourceResolverFactory) {
            this.resourceResolver = null;
        }
    }

    protected void bindResourceResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        this.resourceResolverFactory = resourceResolverFactory;
    }

    protected void unbindResourceResolverFactory(ResourceResolverFactory resourceResolverFactory) {
        if (this.resourceResolverFactory == resourceResolverFactory) {
            this.resourceResolverFactory = null;
        }
    }
}