1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.jboss.as.quickstarts.tasksrs.service;
18
19 import java.net.URI;
20 import java.security.Principal;
21 import java.util.List;
22
23 import javax.inject.Inject;
24 import javax.ws.rs.DELETE;
25 import javax.ws.rs.DefaultValue;
26 import javax.ws.rs.GET;
27 import javax.ws.rs.POST;
28 import javax.ws.rs.Path;
29 import javax.ws.rs.PathParam;
30 import javax.ws.rs.Produces;
31 import javax.ws.rs.WebApplicationException;
32 import javax.ws.rs.core.Context;
33 import javax.ws.rs.core.Response;
34 import javax.ws.rs.core.SecurityContext;
35 import javax.ws.rs.core.UriBuilder;
36 import javax.ws.rs.core.UriInfo;
37
38 import org.jboss.as.quickstarts.tasksrs.model.Task;
39 import org.jboss.as.quickstarts.tasksrs.model.TaskDao;
40 import org.jboss.as.quickstarts.tasksrs.model.User;
41 import org.jboss.as.quickstarts.tasksrs.model.UserDao;
42
43
44
45
46 @Path("/")
47 public class TaskResource {
48 @Inject
49 private UserDao userDao;
50
51 @Inject
52 private TaskDao taskDao;
53
54 @POST
55 @Path("tasks/{title}")
56 public Response createTask(@Context UriInfo info, @Context SecurityContext context,
57 @PathParam("title") @DefaultValue("task") String taskTitle) {
58
59 User user = getUser(context);
60 Task task = new Task(taskTitle);
61
62 taskDao.createTask(user, task);
63
64
65
66 String rawPath = info.getAbsolutePath().getRawPath().replace(task.getTitle(), task.getId().toString());
67 UriBuilder uriBuilder = info.getAbsolutePathBuilder().replacePath(rawPath);
68 URI uri = uriBuilder.build();
69
70 return Response.created(uri).build();
71 }
72
73 @DELETE
74 @Path("tasks/{id}")
75 public void deleteTaskById(@Context SecurityContext context, @PathParam("id") Long id) {
76 Task task = getTaskById(context, id);
77
78 taskDao.deleteTask(task);
79 }
80
81 @GET
82 @Path("tasks/{id}")
83
84
85 @Produces({ "application/xml" })
86 public Task getTaskById(@Context SecurityContext context, @PathParam("id") Long id) {
87 User user = getUser(context);
88
89 return getTask(user, id);
90 }
91
92 @GET
93 @Path("tasks/{title}")
94
95
96 @Produces({ "application/xml" })
97 public List<Task> getTasksByTitle(@Context SecurityContext context, @PathParam("title") String title) {
98 return getTasks(getUser(context), title);
99 }
100
101 @GET
102 @Path("tasks")
103
104
105 @Produces({ "application/xml" })
106 public List<Task> getTasks(@Context SecurityContext context) {
107 return getTasks(getUser(context));
108 }
109
110
111
112
113 private List<Task> getTasks(User user, String title) {
114 return taskDao.getForTitle(user, title);
115 }
116
117 private List<Task> getTasks(User user) {
118 return taskDao.getAll(user);
119 }
120
121 private Task getTask(User user, Long id) {
122 for (Task task : taskDao.getAll(user))
123 if (task.getId().equals(id))
124 return task;
125
126 throw new WebApplicationException(Response.Status.NOT_FOUND);
127 }
128
129 private User getUser(SecurityContext context) {
130 Principal principal = null;
131
132 if (context != null)
133 principal = context.getUserPrincipal();
134
135 if (principal == null)
136 throw new WebApplicationException(Response.Status.UNAUTHORIZED);
137
138 return getUser(principal.getName());
139 }
140
141 private User getUser(String username) {
142
143 try {
144 User user = userDao.getForUsername(username);
145
146 if (user == null) {
147 user = new User(username);
148
149 userDao.createUser(user);
150 }
151
152 return user;
153 } catch (Exception e) {
154 throw new WebApplicationException(e);
155 }
156 }
157 }