/** * Yobi, Project Hosting SW * * Copyright 2013 NAVER Corp. * http://yobi.io * * @author Keesun Baik * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package models; import playRepository.Commit; import java.util.*; public class History { private String who; private String userPageUrl; private String userAvatarUrl; private Date when; private String where; private String what; private String how; private String shortTitle; private String url; public String getWho() { return who; } public void setWho(String who) { this.who = who; } public Date getWhen() { return when; } public void setWhen(Date when) { this.when = when; } public String getWhere() { return where; } public void setWhere(String where) { this.where = where; } public String getWhat() { return what; } public void setWhat(String what) { this.what = what; } public String getHow() { return how; } public void setHow(String how) { this.how = how; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserPageUrl() { return userPageUrl; } public void setUserPageUrl(String userPageUrl) { this.userPageUrl = userPageUrl; } public void setUserAvatarUrl(String userAvatarUrl){ this.userAvatarUrl = userAvatarUrl; } public String getUserAvatarUrl(){ return userAvatarUrl; } public String getShortTitle() { return shortTitle; } public void setShortTitle(String shortTitle) { this.shortTitle = shortTitle; } public static List<History> makeHistory(String userName, Project project, List<Commit> commits, List<Issue> issues, List<Posting> postings, List<PullRequest> pullRequests) { List<History> histories = new ArrayList<>(); buildCommitHistory(userName, project, commits, histories); buildIssueHistory(userName, project, issues, histories); buildPostingHistory(userName, project, postings, histories); buildPullRequestsHistory(userName, project, pullRequests, histories); sort(histories); return histories; } private static void buildPullRequestsHistory(String userName, Project project, List<PullRequest> pullRequests, List<History> histories) { for(PullRequest pull : pullRequests) { History pullHistory = new History(); User contributor = pull.contributor; pullHistory.setWho(contributor.loginId); setUserPageUrl(pullHistory, User.findByLoginId(contributor.loginId)); pullHistory.setWhen(pull.created); pullHistory.setWhere(project.name); pullHistory.setWhat("pullrequest"); pullHistory.setShortTitle("#" + pull.number); pullHistory.setHow(pull.title); pullHistory.setUrl("/" + userName + "/" + project.name + "/pullRequest/" + pull.number); histories.add(pullHistory); } } private static void sort(List<History> histories) { Collections.sort(histories, new Comparator<History>() { @Override public int compare(History h1, History h2) { return h2.getWhen().compareTo(h1.getWhen()); } }); } private static void buildPostingHistory(String userName, Project project, List<Posting> postings, List<History> histories) { for(Posting posting : postings) { History postingHistory = new History(); String authorName = posting.authorName; postingHistory.setWho(authorName); setUserPageUrl(postingHistory, User.findByLoginId(posting.authorLoginId)); postingHistory.setWhen(posting.createdDate); postingHistory.setWhere(project.name); postingHistory.setWhat("post"); postingHistory.setShortTitle("#" + posting.number); postingHistory.setHow(posting.title); postingHistory.setUrl("/" + userName + "/" + project.name + "/post/" + posting.number); histories.add(postingHistory); } } private static void buildIssueHistory(String userName, Project project, List<Issue> issues, List<History> histories) { for(Issue issue : issues) { History issueHistory = new History(); String authorName = issue.authorName; issueHistory.setWho(authorName); setUserPageUrl(issueHistory, User.findByLoginId(issue.authorLoginId)); issueHistory.setWhen(issue.createdDate); issueHistory.setWhere(project.name); issueHistory.setWhat("issue"); issueHistory.setShortTitle("#" + issue.number); issueHistory.setHow(issue.title); issueHistory.setUrl("/" + userName + "/" + project.name + "/issue/" + issue.number); histories.add(issueHistory); } } private static void buildCommitHistory(String userName, Project project, List<Commit> commits, List<History> histories) { if(commits != null) { for(Commit commit : commits) { History commitHistory = new History(); String authorEmail = commit.getAuthorEmail(); if(User.isEmailExist(authorEmail)) { setUserPageUrl(commitHistory, User.findByEmail(authorEmail)); } else { commitHistory.setWho(commit.getAuthorName()); } commitHistory.setWhen(commit.getCommitterDate()); commitHistory.setWhere(project.name); commitHistory.setWhat("commit"); commitHistory.setShortTitle(commit.getShortId()); commitHistory.setHow(commit.getShortMessage()); commitHistory.setUrl("/" + userName + "/" + project.name + "/commit/" + commit.getId()); histories.add(commitHistory); } } } private static void setUserPageUrl(History history, User user) { history.setWho(user.name); history.setUserPageUrl("/" + user.loginId); history.setUserAvatarUrl(user.avatarUrl()); } }