26 package de.uapcore.lightpit.servlet |
26 package de.uapcore.lightpit.servlet |
27 |
27 |
28 import de.uapcore.lightpit.AbstractServlet |
28 import de.uapcore.lightpit.AbstractServlet |
29 import de.uapcore.lightpit.HttpRequest |
29 import de.uapcore.lightpit.HttpRequest |
30 import de.uapcore.lightpit.dao.DataAccessObject |
30 import de.uapcore.lightpit.dao.DataAccessObject |
31 import de.uapcore.lightpit.entities.Issue |
|
32 import de.uapcore.lightpit.util.IssueFilter |
31 import de.uapcore.lightpit.util.IssueFilter |
33 import de.uapcore.lightpit.util.IssueSorter |
32 import de.uapcore.lightpit.util.IssueSorter |
|
33 import de.uapcore.lightpit.util.SpecificFilter |
34 import de.uapcore.lightpit.viewmodel.IssueFeed |
34 import de.uapcore.lightpit.viewmodel.IssueFeed |
|
35 import de.uapcore.lightpit.viewmodel.ProjectFeed |
35 import javax.servlet.annotation.WebServlet |
36 import javax.servlet.annotation.WebServlet |
36 |
37 |
37 @WebServlet(urlPatterns = ["/feed/*"]) |
38 @WebServlet(urlPatterns = ["/feed/*"]) |
38 class FeedServlet : AbstractServlet() { |
39 class FeedServlet : AbstractServlet() { |
39 |
40 |
40 init { |
41 init { |
41 get("/issues.rss", this::issues) |
42 get("/projects.rss", this::projects) |
|
43 get("/%project/issues.rss", this::issues) |
|
44 } |
|
45 |
|
46 private fun projects(http: HttpRequest, dao: DataAccessObject) { |
|
47 |
|
48 val projects = dao.listProjects() |
|
49 |
|
50 http.view = ProjectFeed(projects) |
|
51 http.renderFeed("project-feed") |
42 } |
52 } |
43 |
53 |
44 private fun issues(http: HttpRequest, dao: DataAccessObject) { |
54 private fun issues(http: HttpRequest, dao: DataAccessObject) { |
|
55 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) } |
|
56 if (project == null) { |
|
57 http.response.sendError(404) |
|
58 return |
|
59 } |
45 |
60 |
46 val issues = dao.listIssues(IssueFilter()).sortedWith(IssueSorter.DEFAULT_ISSUE_SORTER) |
61 val issues = dao.listIssues(IssueFilter(SpecificFilter(project))).sortedWith(IssueSorter.DEFAULT_ISSUE_SORTER) |
47 |
62 |
48 http.view = IssueFeed(issues.groupBy(Issue::project)) |
63 http.view = IssueFeed(project, issues) |
49 http.forward("issues-feed") |
64 http.renderFeed("issues-feed") |
50 } |
65 } |
51 } |
66 } |