1 /* 2 StatCvs - CVS statistics generation 3 Copyright (C) 2002 Lukasz Pekacki <lukasz@pekacki.de> 4 http://statcvs.sf.net/ 5 6 This library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 This library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with this library; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 package net.sf.statcvs.model; 21 22 import java.util.Date; 23 import java.util.HashSet; 24 import java.util.Iterator; 25 import java.util.Set; 26 27 /** 28 * Represents a commit, which may consist of several {@link Revision} 29 * objects. A commit means that several files were committed at once by the 30 * same author with the same message. 31 * 32 * TODO: Rename getAuthor() to getLogin(), getAffectedFiles() to getAffectedFileNames() (or change to return CvsFiles?) 33 * 34 * @author Richard Cyganiak <richard@cyganiak.de> 35 * @version $Id: Commit.java,v 1.16 2008/04/02 11:22:16 benoitx Exp $ 36 */ 37 public class Commit implements Comparable { 38 private final Set revisions = new HashSet(); 39 private final Revision aRevision; 40 41 /** 42 * Creates a new instance which consists of the given revision. 43 * @param revision the single revision out of which the commit will 44 * be created 45 */ 46 public Commit(final Revision revision) { 47 revisions.add(revision); 48 aRevision = revision; 49 } 50 51 /** 52 * Adds a revision to the commit. The revision must be part of the 53 * commit, that is, it must have the same date, author and message 54 * as all other revisions in the commit. 55 * @param revision the <code>Revision</code> to add. 56 */ 57 public void addRevision(final Revision revision) { 58 revisions.add(revision); 59 } 60 61 /** 62 * Returns the {@link Revision} objects that make up this commit. 63 * 64 * @return a set of <tt>Revision</tt> instances 65 */ 66 public Set getRevisions() { 67 return revisions; 68 } 69 70 /** 71 * Returns the author of the commit. 72 * @return the author 73 */ 74 public Author getAuthor() { 75 return aRevision.getAuthor(); 76 } 77 78 /** 79 * Returns the comment of the commit. 80 * @return the comment 81 */ 82 public String getComment() { 83 return aRevision.getComment(); 84 } 85 86 /** 87 * Returns the date when the commit took place. The implementation 88 * simply returns the timestamp of the first change of the commit. 89 * @return a date within the timeframe of the commit 90 */ 91 public Date getDate() { 92 return aRevision.getDate(); 93 } 94 95 /** 96 * Returns a <code>String</code> <code>Set</code> containing all filenames 97 * which were affected by this <code>Commit</code>. 98 * @return a <code>Set</code> of <code>String</code>s 99 */ 100 public Set getAffectedFiles() { 101 final Set result = new HashSet(); 102 final Iterator it = revisions.iterator(); 103 while (it.hasNext()) { 104 final Revision element = (Revision) it.next(); 105 result.add(element.getFile().getFilenameWithPath()); 106 } 107 return result; 108 } 109 110 /** 111 * Compares this commit to another revision, based on their date. 112 * @see java.lang.Comparable#compareTo(java.lang.Object) 113 */ 114 public int compareTo(final Object other) { 115 final Commit otherCommit = (Commit) other; 116 return getDate().compareTo(otherCommit.getDate()); 117 } 118 }