Stardrad Yin
2013-01-23 aefb59ef98522ef8a10ab64b25840f11e622e1c7
src/com/gitblit/models/Activity.java
@@ -17,14 +17,17 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.revwalk.RevCommit;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
/**
@@ -41,7 +44,7 @@
   public final Date endDate;
   public final List<RepositoryCommit> commits;
   private final Set<RepositoryCommit> commits;
   private final Map<String, Metric> authorMetrics;
@@ -67,26 +70,47 @@
   public Activity(Date date, long duration) {
      startDate = date;
      endDate = new Date(date.getTime() + duration);
      commits = new ArrayList<RepositoryCommit>();
      commits = new LinkedHashSet<RepositoryCommit>();
      authorMetrics = new HashMap<String, Metric>();
      repositoryMetrics = new HashMap<String, Metric>();
   }
   /**
    * Adds a commit to the activity object as long as the commit is not a
    * duplicate.
    *
    * @param repository
    * @param branch
    * @param commit
    * @return a RepositoryCommit, if one was added. Null if this is duplicate
    *         commit
    */
   public RepositoryCommit addCommit(String repository, String branch, RevCommit commit) {
      RepositoryCommit commitModel = new RepositoryCommit(repository, branch, commit);
      commits.add(commitModel);
      if (commits.add(commitModel)) {
         if (!repositoryMetrics.containsKey(repository)) {
            repositoryMetrics.put(repository, new Metric(repository));
         }
         repositoryMetrics.get(repository).count++;
      if (!repositoryMetrics.containsKey(repository)) {
         repositoryMetrics.put(repository, new Metric(repository));
         String author = StringUtils.removeNewlines(commit.getAuthorIdent().getEmailAddress()).toLowerCase();
         if (!authorMetrics.containsKey(author)) {
            authorMetrics.put(author, new Metric(author));
         }
         authorMetrics.get(author).count++;
         return commitModel;
      }
      repositoryMetrics.get(repository).count++;
      String author = commit.getAuthorIdent().getEmailAddress().toLowerCase();
      if (!authorMetrics.containsKey(author)) {
         authorMetrics.put(author, new Metric(author));
      }
      authorMetrics.get(author).count++;
      return commitModel;
      return null;
   }
   public int getCommitCount() {
      return commits.size();
   }
   public List<RepositoryCommit> getCommits() {
      List<RepositoryCommit> list = new ArrayList<RepositoryCommit>(commits);
      Collections.sort(list);
      return list;
   }
   public Map<String, Metric> getAuthorMetrics() {
@@ -101,69 +125,5 @@
   public int compareTo(Activity o) {
      // reverse chronological order
      return o.startDate.compareTo(startDate);
   }
   /**
    * Model class to represent a RevCommit, it's source repository, and the
    * branch. This class is used by the activity page.
    *
    * @author James Moger
    */
   public static class RepositoryCommit implements Serializable, Comparable<RepositoryCommit> {
      private static final long serialVersionUID = 1L;
      public final String repository;
      public final String branch;
      private final RevCommit commit;
      private List<RefModel> refs;
      public RepositoryCommit(String repository, String branch, RevCommit commit) {
         this.repository = repository;
         this.branch = branch;
         this.commit = commit;
      }
      public void setRefs(List<RefModel> refs) {
         this.refs = refs;
      }
      public List<RefModel> getRefs() {
         return refs;
      }
      public String getName() {
         return commit.getName();
      }
      public String getShortName() {
         return commit.getName().substring(0, 8);
      }
      public String getShortMessage() {
         return commit.getShortMessage();
      }
      public int getParentCount() {
         return commit.getParentCount();
      }
      public PersonIdent getAuthorIdent() {
         return commit.getAuthorIdent();
      }
      @Override
      public int compareTo(RepositoryCommit o) {
         // reverse-chronological order
         if (commit.getCommitTime() > o.commit.getCommitTime()) {
            return -1;
         } else if (commit.getCommitTime() < o.commit.getCommitTime()) {
            return 1;
         }
         return 0;
      }
   }
}