GenericJobOffloadingProcess.java 4.21 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.offloading.api.OffloadingJobProperties
 *  com.adobe.granite.workflow.WorkflowException
 *  com.adobe.granite.workflow.WorkflowSession
 *  com.adobe.granite.workflow.exec.WorkItem
 *  com.adobe.granite.workflow.exec.WorkflowData
 *  com.adobe.granite.workflow.exec.WorkflowExternalProcess
 *  com.adobe.granite.workflow.metadata.MetaDataMap
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.wrappers.ValueMapDecorator
 *  org.apache.sling.event.jobs.Job
 *  org.apache.sling.event.jobs.JobManager
 */
package com.adobe.granite.offloading.workflow.impl;

import com.adobe.granite.offloading.api.OffloadingJobProperties;
import com.adobe.granite.offloading.workflow.api.WorkflowOffloadingHelper;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowData;
import com.adobe.granite.workflow.exec.WorkflowExternalProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
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.resource.ValueMap;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.JobManager;

@Component
@Service
@Property(name="process.label", value={"%process.genericJobProcess.label"})
public class GenericJobOffloadingProcess
implements WorkflowExternalProcess {
    @Reference
    private JobManager jobManager;

    public Serializable execute(WorkItem item, WorkflowSession session, MetaDataMap arguments) throws WorkflowException {
        ValueMap jobProperties = this.getAllJobProperties(item, arguments);
        String jobTopic = WorkflowOffloadingHelper.getJobTopic(arguments);
        if (StringUtils.isEmpty((String)jobTopic)) {
            throw new WorkflowException("job topic must not be empty");
        }
        Job offloadingJob = this.jobManager.addJob(jobTopic, (Map)jobProperties);
        if (offloadingJob == null) {
            throw new WorkflowException("not able to create job");
        }
        return offloadingJob.getId();
    }

    public boolean hasFinished(Serializable externalProcessId, WorkItem item, WorkflowSession session, MetaDataMap arguments) {
        Job offloadingJob = this.jobManager.getJobById((String)((Object)externalProcessId));
        return offloadingJob == null;
    }

    public void handleResult(Serializable externalProcessId, WorkItem workItem, WorkflowSession session, MetaDataMap arguments) throws WorkflowException {
    }

    private ValueMap getAllJobProperties(WorkItem item, MetaDataMap arguments) {
        ValueMapDecorator allJobProperties = new ValueMapDecorator(new HashMap());
        allJobProperties.putAll((Map)WorkflowOffloadingHelper.getJobProperties(arguments));
        String workflowPayload = null;
        if (item.getWorkflowData().getPayloadType().equals("JCR_PATH")) {
            workflowPayload = (String)item.getWorkflowData().getPayload();
        }
        allJobProperties.put((Object)OffloadingJobProperties.INPUT_PAYLOAD.propertyName(), (Object)WorkflowOffloadingHelper.getWorkflowOffloadingInput(arguments, workflowPayload, null));
        allJobProperties.put((Object)OffloadingJobProperties.OUTPUT_PAYLOAD.propertyName(), (Object)WorkflowOffloadingHelper.getWorkflowOffloadingOutput(arguments, workflowPayload, null));
        return allJobProperties;
    }

    protected void bindJobManager(JobManager jobManager) {
        this.jobManager = jobManager;
    }

    protected void unbindJobManager(JobManager jobManager) {
        if (this.jobManager == jobManager) {
            this.jobManager = null;
        }
    }
}