AbstractWCMProjectProcess.java
7.81 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.cq.projects.api.Project
* com.adobe.granite.taskmanagement.TaskManager
* com.adobe.granite.workflow.WorkflowException
* com.adobe.granite.workflow.WorkflowSession
* com.adobe.granite.workflow.exec.WorkItem
* com.adobe.granite.workflow.exec.Workflow
* com.adobe.granite.workflow.exec.WorkflowData
* com.adobe.granite.workflow.exec.WorkflowProcess
* com.adobe.granite.workflow.metadata.MetaDataMap
* com.day.cq.dam.api.Asset
* com.day.cq.dam.api.Rendition
* org.apache.commons.lang3.StringUtils
* org.apache.sling.api.resource.NonExistingResource
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.resource.ValueMap
* org.joda.time.DateTime
* org.joda.time.format.DateTimeFormatter
* org.joda.time.format.ISODateTimeFormat
*/
package com.adobe.cq.projects.wcm.impl.workflow;
import com.adobe.cq.projects.api.Project;
import com.adobe.granite.taskmanagement.TaskManager;
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.Workflow;
import com.adobe.granite.workflow.exec.WorkflowData;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
public abstract class AbstractWCMProjectProcess
implements WorkflowProcess {
protected static DateTimeFormatter TIME_FORMAT = ISODateTimeFormat.dateTime();
protected static final String META_PROJECT_PATH = "project.path";
protected static final String META_PROJECT_WORKLINK = "project.workLinkPath";
protected static final String META_TITLE = "workflowTitle";
protected static final String META_DUE_DATE = "taskDueDate";
protected static final String META_LIVE_DATE = "liveDate";
protected static final String NAME_DESIGN_PACKAGE_PATH = "designPackagePath";
protected static final String NAME_DAM_DESIGN_PACKAGE_PATH = "damDesignPackagePath";
protected String getPayloadPath(WorkflowData wfData) {
String payloadPath = null;
if (wfData.getPayloadType().equals("JCR_PATH")) {
payloadPath = (String)wfData.getPayload();
}
return payloadPath;
}
protected Project getProject(WorkflowData wfData, ResourceResolver resolver) throws WorkflowException {
Resource projectResource;
String projectPath = (String)wfData.getMetaDataMap().get("project.path", String.class);
if (StringUtils.isNotBlank((CharSequence)projectPath) && (projectResource = resolver.getResource(projectPath)) != null && !(projectResource instanceof NonExistingResource)) {
return (Project)projectResource.adaptTo(Project.class);
}
throw new WorkflowException(String.format("Metadata must include project path property in property named: %s", "project.path"));
}
protected TaskManager getTaskManager(Resource projectResource) throws WorkflowException {
Resource projectContent = projectResource.getChild("jcr:content");
ValueMap valueMap = (ValueMap)projectContent.adaptTo(ValueMap.class);
String tasksFolderName = (String)valueMap.get("tasks.folder", String.class);
Resource tasksNode = null;
if (tasksFolderName != null) {
tasksNode = projectContent.getChild(tasksFolderName);
}
if (tasksNode == null) {
throw new WorkflowException("Child resource for creating tasks: '" + tasksFolderName + "' does not exist at location: '" + projectContent.getPath() + "'");
}
TaskManager taskManager = (TaskManager)tasksNode.adaptTo(TaskManager.class);
return taskManager;
}
protected Resource getProjectWorkLink(WorkflowData wfData, ResourceResolver resolver) {
String linkPath = (String)wfData.getMetaDataMap().get("project.workLinkPath", String.class);
if (linkPath != null) {
return resolver.getResource(linkPath);
}
return null;
}
protected void updateWorkflowPayload(WorkItem item, WorkflowSession wfSession, String contentPath) throws WorkflowException {
WorkflowData data = this.cloneWorkflowDataWithNewPayload(wfSession, contentPath, item.getWorkflowData());
wfSession.updateWorkflowData(item.getWorkflow(), data);
try {
Workflow instance = item.getWorkflow();
Method method = instance.getClass().getMethod("setWorkflowData", WorkflowData.class);
if (method != null) {
method.invoke((Object)instance, new Object[]{data});
}
}
catch (Exception e) {
throw new WorkflowException("failed to update in-memory payload", (Throwable)e);
}
}
private WorkflowData cloneWorkflowDataWithNewPayload(WorkflowSession wfSession, String contentPath, WorkflowData wfToClone) {
WorkflowData result = wfSession.newWorkflowData("JCR_PATH", (Object)contentPath);
MetaDataMap sourceMap = wfToClone.getMetaDataMap();
MetaDataMap targetMap = result.getMetaDataMap();
for (String key : sourceMap.keySet()) {
targetMap.put((Object)key, sourceMap.get((Object)key));
}
return result;
}
protected final String getStringParam(MetaDataMap data, String name, boolean isMandatory, String defaultValue) throws WorkflowException {
String valueAsString = (String)data.get(name, String.class);
if (StringUtils.isNotEmpty((CharSequence)valueAsString)) {
return valueAsString;
}
if (isMandatory) {
throw new WorkflowException("Error during operation. Mandatory parameter is missing: " + name);
}
return defaultValue;
}
protected final Calendar getCalendarParam(MetaDataMap data, String name, boolean isMandatory, Calendar defaultValue) throws WorkflowException {
String valueAsString = (String)data.get(name, String.class);
if (StringUtils.isNotEmpty((CharSequence)valueAsString)) {
try {
DateTime dt = TIME_FORMAT.parseDateTime(valueAsString);
Calendar cal = defaultValue;
if (dt != null) {
cal = Calendar.getInstance();
cal.setTime(dt.toDate());
}
return cal;
}
catch (IllegalArgumentException e) {
throw new WorkflowException("Error during operation. Unable to parse " + name + ": " + valueAsString);
}
}
if (isMandatory) {
throw new WorkflowException("Error during operation. Mandatory parameter is missing: " + name);
}
return defaultValue;
}
protected final String getDesignPackagePath(MetaDataMap data, ResourceResolver resolver) throws WorkflowException {
String damDesignPackagePath;
String designPackagePath = this.getStringParam(data, "designPackagePath", false, null);
if (designPackagePath == null && (damDesignPackagePath = this.getStringParam(data, "damDesignPackagePath", false, null)) != null) {
Asset asset = (Asset)resolver.getResource(damDesignPackagePath).adaptTo(Asset.class);
designPackagePath = asset.getOriginal().getPath();
}
return designPackagePath;
}
}