Skip to content

Commit

Permalink
api: Update project export APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
doortts committed Jun 25, 2017
1 parent 15a2855 commit 8178319
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 13 deletions.
21 changes: 16 additions & 5 deletions app/controllers/MigrationApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,19 @@ public static List<ObjectNode> getAssginees(Project project) {
ObjectNode member = Json.newObject();
member.put("name", assignee.user.name);
member.put("login", assignee.user.loginId);
member.put("email", assignee.user.email);
members.add(member);
}
return members;
}

@AnonymousCheck(requiresLogin = true, displaysFlashMessage = true)
public static Result exportIssueLabelPairs(String owner, String projectName){
ObjectNode issueLabelPairs = composeIssueLabelPairJson(owner, projectName);
return ok(issueLabelPairs);
}

public static ObjectNode composeIssueLabelPairJson(String owner, String projectName) {
Project project = Project.findByOwnerAndProjectName(owner, projectName);

Query<IssueLabelAggregate> query = Ebean.find(IssueLabelAggregate.class);
Expand All @@ -160,9 +166,10 @@ public static Result exportIssueLabelPairs(String owner, String projectName){

ObjectNode issueLabelPairs = Json.newObject();
issueLabelPairs.put("issueLabelPairs", toJson(results));
return ok(issueLabelPairs);
return issueLabelPairs;
}


@AnonymousCheck(requiresLogin = true, displaysFlashMessage = true)
public static Result exportLabels(String owner, String projectName){
Project project = Project.findByOwnerAndProjectName(owner, projectName);
Expand Down Expand Up @@ -219,17 +226,21 @@ public static Result exportIssues(String owner, String projectName){
}

public static ObjectNode composeMilestoneJson(Milestone m) {

ObjectNode milestoneJson = Json.newObject();
milestoneJson.put("milestone", getMilestoneNode(m));
return milestoneJson;
}

public static ObjectNode getMilestoneNode(Milestone m) {
ObjectNode node = Json.newObject();
node.put("id", m.id);
node.put("title", m.title);
node.put("state", m.state.state());
node.put("description", m.contents);
Optional.ofNullable(m.dueDate).ifPresent(dueDate -> node.put("due_on",
LocalDateTime.ofInstant(m.dueDate.toInstant(), ZoneId.systemDefault()).format(formatter)));

ObjectNode milestoneJson = Json.newObject();
milestoneJson.put("milestone", node);
return milestoneJson;
return node;
}

private static String addOriginalAuthorName(String bodyText, String authorLoginId,
Expand Down
81 changes: 73 additions & 8 deletions app/controllers/api/ProjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
import play.mvc.Controller;
import play.mvc.Result;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static controllers.MigrationApp.composePlainCommentsJson;
Expand All @@ -36,15 +38,19 @@ public static Result exports(String owner, String projectName) {
ObjectNode json = Json.newObject();
json.put("owner", project.owner);
json.put("projectName", project.name);
json.put("projectDescription", project.overview);
json.put("assignees", toJson(getAssginees(project).toArray()));
json.put("memberCount", project.members().size());
json.put("members", project.members().size());
Optional.ofNullable(project.members())
.ifPresent(members -> json.put("members", composeMembersJson(project)));
json.put("issueCount", project.issues.size());
json.put("postCount", project.posts.size());
json.put("milestoneCount", project.milestones.size());
json.put("issues", composePosts(project, Issue.finder));
json.put("posts", composePosts(project, Posting.finder));
json.put("milestones", toJson(project.milestones.stream()
.map(MigrationApp::composeMilestoneJson).collect(Collectors.toList())));
.map(MigrationApp::getMilestoneNode).collect(Collectors.toList())));
return ok(json);
}

Expand All @@ -58,18 +64,28 @@ private static <T> JsonNode composePosts(Project project, Model.Finder<Long, T>

private static ObjectNode getResult(AbstractPosting posting) {
ObjectNode json = Json.newObject();
json.put("id", posting.getNumber());
json.put("number", posting.getNumber());
json.put("id", posting.id);
json.put("title", posting.title);
json.put("type", posting.asResource().getType().toString());
json.put("author", posting.authorLoginId);
json.put("authorName", posting.authorName);
json.put("created_at", posting.createdDate.getTime());
json.put("author", composeAuthorJson(posting.getAuthor()));
json.put("createdAt", posting.createdDate.getTime());
json.put("body", posting.body);

if(posting.asResource().getType() == ResourceType.ISSUE_POST){
Optional.ofNullable(((Issue)posting).assignee).ifPresent(assignee -> json.put("assignee", assignee.user.loginId));
Optional.ofNullable(((Issue)posting).milestone).ifPresent(milestone -> json.put("milestone", milestone.title));
Optional.ofNullable(((Issue)posting).milestone).ifPresent(milestone -> json.put("milestoneId", milestone.id));
Issue issue = ((Issue)posting);
Optional.ofNullable(issue.assignee)
.ifPresent(assignee -> json.put("assignee", composeAssigneeJson(issue)));
Optional.ofNullable(issue.getLabels()).ifPresent(labels -> {
if (labels.size() > 0) {
json.put("labels", composeLabelJson(labels));
}
});
Optional.ofNullable(issue.milestone).
ifPresent(milestone -> json.put("milestoneId", milestone.id));
Optional.ofNullable(issue.milestone)
.ifPresent(milestone -> json.put("milestoneTitle", milestone.title));

}
List<Attachment> attachments = Attachment.findByContainer(posting.asResource());
if(attachments.size() > 0) {
Expand All @@ -82,4 +98,53 @@ private static ObjectNode getResult(AbstractPosting posting) {
}
return json;
}

private static JsonNode composeAuthorJson(User user) {
ObjectNode authorNode = Json.newObject();
authorNode.put("loginId", user.loginId);
authorNode.put("name", user.name);
return authorNode;
}

// It may be looks like weired. But it is intended for future
// which may introduce multiple assignees feature
private static JsonNode composeAssigneeJson(Issue issue) {
List<ObjectNode> assignees = new ArrayList<>();
Assignee assignee = issue.assignee;

ObjectNode assigneelNode = Json.newObject();
assigneelNode.put("loginId", assignee.user.loginId);
assigneelNode.put("name", assignee.user.name);
assignees.add(assigneelNode);

return toJson(assignees);
}

private static JsonNode composeMembersJson(Project project){
List<ObjectNode> members = new ArrayList<>();

for(ProjectUser projectUser: project.members()){
User user = projectUser.user;
ObjectNode memberNode = Json.newObject();
memberNode.put("loginId", user.loginId);
memberNode.put("name", user.name);
memberNode.put("role", projectUser.role.name);
memberNode.put("email", user.email);
members.add(memberNode);
}

return toJson(members);
}

private static JsonNode composeLabelJson(Set<IssueLabel> issueLabels) {
List<ObjectNode> labels = new ArrayList<>();
for(IssueLabel label: issueLabels){
ObjectNode labelNode = Json.newObject();
labelNode.put("labelName", label.name);
labelNode.put("labelColor", label.color);
labelNode.put("labelCategory", label.category.name);
labels.add(labelNode);
}
return toJson(labels);
}
}

0 comments on commit 8178319

Please sign in to comment.