@Override public void handle(Request request, Response response) { String issueKey = request.requiredParam("key"); IssueQueryResult queryResult = issueFinder.find(IssueQuery.builder().issueKeys(Arrays.asList(issueKey)).build()); if (queryResult.issues().size() != 1) { throw new NotFoundException("Issue not found: " + issueKey); } DefaultIssue issue = (DefaultIssue) queryResult.first(); JsonWriter json = response.newJsonWriter(); json.beginObject().name("issue").beginObject(); writeIssue(queryResult, issue, json); writeTransitions(issue, json); writeActions(issue, json); writeComments(queryResult, issue, json); writeChangelog(issue, json); json.endObject().endObject().close(); }
private void writeIssue(IssueQueryResult result, DefaultIssue issue, JsonWriter json) { Component component = result.component(issue); Component project = result.project(issue); String actionPlanKey = issue.actionPlanKey(); WorkDayDuration technicalDebt = issue.technicalDebt(); Date updateDate = issue.updateDate(); Date closeDate = issue.closeDate(); json.prop("key", issue.key()) .prop("component", issue.componentKey()) .prop("componentLongName", component != null ? component.longName() : null) .prop("componentQualifier", component != null ? component.qualifier() : null) .prop("project", issue.projectKey()) .prop("projectLongName", project != null ? project.longName() : null) .prop("rule", issue.ruleKey().toString()) .prop("ruleName", result.rule(issue).getName()) .prop("line", issue.line()) .prop("message", issue.message()) .prop("resolution", issue.resolution()) .prop("status", issue.status()) .prop("severity", issue.severity()) .prop("author", issue.authorLogin()) .prop("actionPlan", actionPlanKey) .prop( "debt", technicalDebt != null ? technicalDebtFormatter.format(UserSession.get().locale(), technicalDebt) : null) .prop("actionPlanName", actionPlanKey != null ? result.actionPlan(issue).name() : null) .prop("creationDate", DateUtils.formatDateTime(issue.creationDate())) .prop("fCreationDate", formatDate(issue.creationDate())) .prop("updateDate", updateDate != null ? DateUtils.formatDateTime(updateDate) : null) .prop("fUpdateDate", formatDate(updateDate)) .prop("fUpdateAge", formatAgeDate(updateDate)) .prop("closeDate", closeDate != null ? DateUtils.formatDateTime(closeDate) : null) .prop("fCloseDate", formatDate(issue.closeDate())); addUserWithLabel(result, issue.assignee(), "assignee", json); addUserWithLabel(result, issue.reporter(), "reporter", json); }
private void writeComments(IssueQueryResult queryResult, Issue issue, JsonWriter json) { json.name("comments").beginArray(); for (IssueComment comment : issue.comments()) { String userLogin = comment.userLogin(); json.beginObject() .prop("key", comment.key()) .prop("userName", userLogin != null ? queryResult.user(userLogin).name() : null) .prop("raw", comment.markdownText()) .prop("html", Markdown.convertToHtml(comment.markdownText())) .prop("createdAt", DateUtils.formatDateTime(comment.createdAt())) .prop("fCreatedAge", formatAgeDate(comment.createdAt())) .prop( "updatable", UserSession.get().isLoggedIn() && UserSession.get().login().equals(comment.userLogin())) .endObject(); } json.endArray(); }
private void addUserWithLabel( IssueQueryResult result, String value, String field, JsonWriter json) { if (value != null) { json.prop(field, value).prop(field + "Name", result.user(value).name()); } }