WorkflowUtil.java 3.95 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.workflow.WorkflowException
 *  com.day.cq.workflow.WorkflowSession
 *  com.day.cq.workflow.exec.HistoryItem
 *  com.day.cq.workflow.exec.WorkItem
 *  com.day.cq.workflow.exec.Workflow
 *  com.day.cq.workflow.exec.WorkflowData
 *  com.day.cq.workflow.metadata.MetaDataMap
 *  com.day.cq.workflow.model.WorkflowModel
 *  com.day.cq.workflow.model.WorkflowNode
 *  org.apache.sling.event.jobs.Job
 *  org.apache.sling.event.jobs.JobManager
 *  org.apache.sling.event.jobs.JobManager$QueryType
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.workflow.util;

import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.HistoryItem;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.Workflow;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.metadata.MetaDataMap;
import com.day.cq.workflow.model.WorkflowModel;
import com.day.cq.workflow.model.WorkflowNode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.JobManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class WorkflowUtil {
    private static final Logger log = LoggerFactory.getLogger(WorkflowUtil.class);

    public static Collection<Job> getWorkflowJobs(JobManager jobManager, WorkflowSession wfSession) {
        WorkflowModel[] models;
        ArrayList<Job> wfJobs = new ArrayList<Job>();
        try {
            models = wfSession.getModels();
        }
        catch (WorkflowException we) {
            log.error("Cannot retrieve workflow model list", (Throwable)we);
            return Collections.EMPTY_LIST;
        }
        for (WorkflowModel model : models) {
            String topicName = "com/adobe/granite/workflow/job" + model.getId().replace("jcr:content", "jcr_content");
            wfJobs.addAll(jobManager.findJobs(JobManager.QueryType.ALL, topicName, -1, new Map[0]));
        }
        Collection toJobs = jobManager.findJobs(JobManager.QueryType.ALL, "com/adobe/granite/workflow/timeout/job", -1, new Map[0]);
        wfJobs.addAll(toJobs);
        Collection extJobs = jobManager.findJobs(JobManager.QueryType.ALL, "com/adobe/granite/workflow/external/job", -1, new Map[0]);
        wfJobs.addAll(extJobs);
        log.debug("WORKFLOW JOBS: " + wfJobs.size());
        return wfJobs;
    }

    public static boolean isStaleWorkflow(Workflow workflow, Collection<Job> wfJobs) {
        String currentJobs = (String)workflow.getWorkflowData().getMetaDataMap().get("currentJobs", String.class);
        if (currentJobs != null) {
            if (currentJobs.startsWith("_,_")) {
                currentJobs = currentJobs.substring("_,_".length());
            }
            if (!currentJobs.equals("")) {
                String[] jobs;
                for (String job : jobs = currentJobs.split("_,_")) {
                    for (Job nextJob : wfJobs) {
                        String jobId = (String)nextJob.getProperty("com.adobe.granite.workflow.jobid");
                        if (jobId == null || !jobId.equals(job)) continue;
                        return false;
                    }
                }
            } else {
                return false;
            }
            return true;
        }
        return false;
    }

    public static String getAuthorizableFromLastStep(WorkflowSession session, Workflow workflow, String nodeId) throws WorkflowException {
        List historyList = session.getHistory(workflow);
        for (int i = historyList.size(); i > 0; --i) {
            HistoryItem item = (HistoryItem)historyList.get(i - 1);
            if (item.getWorkItem() == null || !item.getWorkItem().getNode().getId().equals(nodeId)) continue;
            return item.getUserId();
        }
        return null;
    }
}