RecommendationTaskStatusServlet.java
4.66 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.granite.taskmanagement.ComparisonOperator
* com.adobe.granite.taskmanagement.Condition
* com.adobe.granite.taskmanagement.Filter
* com.adobe.granite.taskmanagement.Task
* com.adobe.granite.taskmanagement.TaskManager
* com.adobe.granite.taskmanagement.TaskProperty
* com.adobe.granite.workflow.exec.Status
* com.day.cq.commons.TidyJSONWriter
* javax.servlet.ServletException
* org.apache.felix.scr.annotations.sling.SlingServlet
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.apache.sling.api.servlets.SlingSafeMethodsServlet
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.cq.contentinsight.impl.servlets;
import com.adobe.granite.taskmanagement.ComparisonOperator;
import com.adobe.granite.taskmanagement.Condition;
import com.adobe.granite.taskmanagement.Filter;
import com.adobe.granite.taskmanagement.Task;
import com.adobe.granite.taskmanagement.TaskManager;
import com.adobe.granite.taskmanagement.TaskProperty;
import com.adobe.granite.workflow.exec.Status;
import com.day.cq.commons.TidyJSONWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SlingServlet(generateComponent=1, resourceTypes={"cq:Page"}, extensions={"json"}, selectors={"seotaskstatus"}, methods={"GET"}, label="SEO Recommendations Task status servlet", description="Determines the SEO Recommendations tasks for a page and their current status")
public class RecommendationTaskStatusServlet
extends SlingSafeMethodsServlet {
private static final long serialVersionUID = -5161887928130115575L;
private final Logger log;
public RecommendationTaskStatusServlet() {
this.log = LoggerFactory.getLogger(this.getClass());
}
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Resource currentResource = request.getResource();
if (currentResource == null) {
this.log.error("No resource found on request!");
return;
}
ResourceResolver resolver = currentResource.getResourceResolver();
Resource taskRoot = resolver.getResource("/content/projects");
TaskManager taskManager = (TaskManager)taskRoot.adaptTo(TaskManager.class);
Condition taskContentCondition = new Condition();
taskContentCondition.setTaskProperty(TaskProperty.CONTENT_PATH);
taskContentCondition.setComparisonOperator(ComparisonOperator.EQUALS);
taskContentCondition.setComparisonValue((Object)currentResource.getPath());
Filter taskFilter = new Filter();
taskFilter.addCondition(new Condition[]{taskContentCondition});
try {
Iterator taskList = taskManager.getTasks(taskFilter);
HashMap<String, Task> nameFlattenedTasks = new HashMap<String, Task>();
while (taskList.hasNext()) {
Task relatedTask = (Task)taskList.next();
Task keptTask = (Task)nameFlattenedTasks.get(relatedTask.getName());
if (keptTask != null && relatedTask.getStatus() != Status.ACTIVE) continue;
nameFlattenedTasks.put(relatedTask.getName(), relatedTask);
}
TidyJSONWriter json = new TidyJSONWriter((Writer)response.getWriter());
json.object();
for (String taskName : nameFlattenedTasks.keySet()) {
Task task = (Task)nameFlattenedTasks.get(taskName);
json.key((String)task.getProperty("recommendationId"));
json.object();
json.key("path").value((Object)task.getId());
json.key("status").value((Object)task.getStatus());
json.endObject();
}
json.endObject();
}
catch (Exception e) {
this.log.error("Could not get the tasks related to content {}!", (Object)currentResource.getPath(), (Object)e);
}
}
}