ScriptInputProcessor.java 3.09 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Session
 *  org.apache.felix.scr.annotations.Activate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.scripting.SlingBindings
 *  org.apache.sling.api.scripting.SlingScript
 */
package com.adobe.aemfd.watchfolder.script;

import com.adobe.aemfd.watchfolder.config.WatchFolderConfiguration;
import com.adobe.aemfd.watchfolder.service.api.ProcessorContext;
import com.adobe.aemfd.watchfolder.util.AbstractSyncInputProcessor;
import com.adobe.aemfd.watchfolder.util.JcrUtil;
import com.adobe.aemfd.watchfolder.util.SessionUtil;
import java.io.File;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScript;

@Component(immediate=1)
@Service(value={ScriptInputProcessor.class})
public class ScriptInputProcessor
extends AbstractSyncInputProcessor {
    @Reference
    private SessionUtil sessionUtil;

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Activate
    public void activate() throws Exception {
        Session s = this.sessionUtil.getServiceSession(null);
        try {
            JcrUtil.makeSubDirIfRequired(s, "scripts", "sling:Folder");
        }
        finally {
            s.logout();
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected void doProcess(String jobId, WatchFolderConfiguration config, File source, ProcessorContext ctxt) throws Exception {
        ResourceResolver rr = this.sessionUtil.getServiceResolver("scripts");
        try {
            SlingBindings sb = new SlingBindings();
            sb.put((Object)"processorContext", (Object)ctxt);
            SlingScript script = null;
            Resource r = rr.getResource(config.getInputProcessorId());
            if (r != null) {
                script = (SlingScript)r.adaptTo(SlingScript.class);
            }
            if (script == null) {
                throw new Exception("Failed to resolve script at path " + config.getInputProcessorId() + ". Verify that the resource exists, is an executable script and is accessible to the" + " service-user used for watch-folder script execution.");
            }
            script.eval(sb);
        }
        finally {
            rr.close();
        }
    }

    protected void bindSessionUtil(SessionUtil sessionUtil) {
        this.sessionUtil = sessionUtil;
    }

    protected void unbindSessionUtil(SessionUtil sessionUtil) {
        if (this.sessionUtil == sessionUtil) {
            this.sessionUtil = null;
        }
    }
}