TaskDetailsServlet.java
5.32 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.granite.taskmanagement.Task
* com.adobe.granite.taskmanagement.TaskManager
* com.adobe.granite.taskmanagement.TaskManagerException
* javax.jcr.RepositoryException
* javax.jcr.Session
* javax.servlet.Servlet
* javax.servlet.ServletException
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Properties
* org.apache.felix.scr.annotations.Property
* org.apache.felix.scr.annotations.Service
* 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.SlingAllMethodsServlet
* org.apache.sling.commons.json.JSONException
* org.apache.sling.commons.json.io.JSONWriter
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.granite.taskmanagement.impl.servlet;
import com.adobe.granite.taskmanagement.Task;
import com.adobe.granite.taskmanagement.TaskManager;
import com.adobe.granite.taskmanagement.TaskManagerException;
import com.adobe.granite.taskmanagement.impl.servlet.TaskServletUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
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.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Service(value={Servlet.class})
@Properties(value={@Property(name="sling.servlet.paths", value={"/libs/granite/taskmanager/details.json"})})
public class TaskDetailsServlet
extends SlingAllMethodsServlet {
private static final Logger logger = LoggerFactory.getLogger(TaskDetailsServlet.class);
private static final String PARNAME_LOAD_TASK_STRUCTURE = "loadTaskStructure";
private static final String PARNAME_TASK_ID = "taskId";
private static final String PARNAME_FROM_RESOURCE = "fromResource";
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
logger.debug("TaskListServlet.doGet called");
String taskId = "";
try {
taskId = request.getParameter("taskId");
if (taskId == null) {
throw new ServletException("no taskId parameter specified");
}
boolean fromResource = Boolean.parseBoolean(request.getParameter("fromResource"));
String parameter = request.getParameter("loadTaskStructure");
boolean loadTaskStructure = false;
if (parameter != null && Boolean.parseBoolean(parameter)) {
loadTaskStructure = true;
}
ResourceResolver resolver = request.getResourceResolver();
TaskManager taskManager = this.getTaskManager(resolver, fromResource, taskId, "read");
Task task = taskManager.getTask(taskId, loadTaskStructure);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
JSONWriter w = new JSONWriter((Writer)response.getWriter());
w.setTidy(true);
TaskServletUtils.writeTaskInfo(w, task);
}
catch (TaskManagerException e) {
throw new ServletException("Failed to retrieve task for id '" + taskId + "'", (Throwable)e);
}
catch (JSONException e) {
throw new ServletException("Failed to retrieve task for id '" + taskId + "'", (Throwable)e);
}
}
private TaskManager getTaskManager(ResourceResolver resolver, boolean fromResource, String taskId, String permission) throws ServletException {
TaskManager taskManager = null;
if (fromResource) {
if (taskId == null) {
throw new ServletException("taskId parameter required");
}
if (this.hasWriteAccess(resolver, taskId, permission)) {
Resource taskResource = resolver.getResource(taskId);
taskManager = (TaskManager)taskResource.adaptTo(TaskManager.class);
} else {
taskManager = (TaskManager)resolver.adaptTo(TaskManager.class);
}
}
if (taskManager == null) {
taskManager = (TaskManager)resolver.adaptTo(TaskManager.class);
}
return taskManager;
}
private boolean hasWriteAccess(ResourceResolver resourceResolver, String taskId, String permission) {
Session session = (Session)resourceResolver.adaptTo(Session.class);
try {
return session.hasPermission(taskId, permission);
}
catch (RepositoryException e) {
logger.error("error checking access for task: " + taskId, (Throwable)e);
return false;
}
}
}