WorkflowUtil.java
3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* 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;
}
}