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 $RCSfile: RevisionData.java,v $
21 $Date: 2008/04/02 11:22:15 $
22 */
23 package net.sf.statcvs.input;
24
25 import java.util.Date;
26
27 import net.sf.statcvs.util.CvsLogUtils;
28
29 /**
30 * Container for all information contained in one CVS revisionNumber
31 *
32 * @author Richard Cyganiak <richard@cyganiak.de>
33 * @version $Id: RevisionData.java,v 1.7 2008/04/02 11:22:15 benoitx Exp $
34 */
35 public class RevisionData {
36 private String revisionNumber;
37 private Date date;
38 private String loginName;
39 private boolean stateExp = false;
40 private boolean stateDead = false;
41 private boolean hasNoLines = true;
42 private int linesAdded;
43 private int linesRemoved;
44 private String comment;
45
46 /**
47 * @return Returns the loginName.
48 */
49 public String getLoginName() {
50 return loginName;
51 }
52
53 /**
54 * @param authorName The loginName to set.
55 */
56 public void setLoginName(final String authorName) {
57 this.loginName = authorName;
58 }
59
60 /**
61 * @return Returns the date.
62 */
63 public Date getDate() {
64 return date;
65 }
66
67 /**
68 * @param date The date to set.
69 */
70 public void setDate(final Date date) {
71 this.date = date;
72 }
73
74 /**
75 * @return Returns the linesAdded.
76 */
77 public int getLinesAdded() {
78 return linesAdded;
79 }
80
81 /**
82 * @return Returns the linesRemoved.
83 */
84 public int getLinesRemoved() {
85 return linesRemoved;
86 }
87
88 /**
89 * Checks if the revision contains numbers for the added
90 * and removed lines.
91 * @return true if the revision contains numbers for the
92 * added and removed lines
93 */
94 public boolean hasNoLines() {
95 return hasNoLines;
96 }
97
98 /**
99 * Sets the number of added and removed lines.
100 * @param added The number of added lines
101 * @param removed The number of removed lines
102 */
103 public void setLines(final int added, final int removed) {
104 this.linesAdded = added;
105 this.linesRemoved = removed;
106 hasNoLines = false;
107 }
108
109 /**
110 * @return Returns the revisionNumber.
111 */
112 public String getRevisionNumber() {
113 return revisionNumber;
114 }
115
116 /**
117 * Sets the revision number.
118 * @param revision The revision number
119 */
120 public void setRevisionNumber(final String revision) {
121 this.revisionNumber = revision;
122 }
123
124 public void setStateDead() {
125 stateDead = true;
126 }
127
128 public void setStateExp() {
129 stateExp = true;
130 }
131
132 /**
133 * @return Returns the comment.
134 */
135 public String getComment() {
136 return comment;
137 }
138
139 /**
140 * @param comment The comment to set.
141 */
142 public void setComment(final String comment) {
143 this.comment = comment;
144 }
145
146 /**
147 * Returns <tt>true</tt> if this revisionNumber marks the adding of a new file
148 * on a subbranch. CVS creates a dead 1.1 revisionNumber on the trunk even if
149 * the file never gets merged into the trunk. If we evaluate the trunk,
150 * and the file doesn't have any other revisions on the trunk, then we
151 * ignore this revisionNumber.
152 *
153 * @return <tt>true</tt> if this is the adding of a new file on a subbranch
154 */
155 public boolean isAddOnSubbranch() {
156 return stateDead && revisionNumber.equals("1.1");
157 }
158
159 /**
160 * Returns <tt>true</tt> if this revisionNumber is the removal of a file.
161 * Any dead revisionNumber means that the file was removed. The only exception
162 * is a dead 1.1 revisionNumber, which is an add on a subbranch.
163 *
164 * @return <tt>true</tt> if this revisionNumber deletes the file.
165 * @see #isAddOnSubbranch
166 */
167 public boolean isDeletion() {
168 return stateDead && !revisionNumber.equals("1.1");
169 }
170
171 /**
172 * Returns <tt>true</tt> if this revisionNumber is a normal change, or if it
173 * restores a removed file. The distinction between these two cases
174 * can be made by looking at the previous (in time, not log order) revisionNumber.
175 * If it was a deletion, then this revisionNumber is a restore.
176 *
177 * @return <tt>true</tt> if this is a normal change or a restore.
178 */
179 public boolean isChangeOrRestore() {
180 return stateExp && !hasNoLines;
181 }
182
183 /**
184 * Returns <tt>true</tt> if this revisionNumber is the creation of a new file.
185 *
186 * @return <tt>true</tt> if this is the creation of a new file.
187 */
188 public boolean isCreation() {
189 return stateExp && hasNoLines;
190 }
191
192 /**
193 * Returns <tt>true</tt> if this revisionNumber is on the main branch.
194 *
195 * @return <tt>true</tt> if this revisionNumber is on the main branch.
196 */
197 public boolean isOnTrunk() {
198 return CvsLogUtils.isOnMainBranch(revisionNumber);
199 }
200
201 /**
202 * Returns <tt>true</tt> if this is an Exp revisionNumber.
203 * This is CVS speak for any "live" revisionNumber, that is, if this is
204 * the current revisionNumber, then a file exists in the working copy.
205 *
206 * @return <tt>true</tt> if this is an Exp revisionNumber
207 */
208 public boolean isStateExp() {
209 return stateExp;
210 }
211
212 /**
213 * Returns <tt>true</tt> if this is a dead revisionNumber. If this is the
214 * current revisionNumber, then the file does not exist in the working copy.
215 *
216 * @return <tt>true</tt> if this is a dead revisionNumber
217 */
218 public boolean isStateDead() {
219 return stateDead;
220 }
221
222 public String toString() {
223 return "RevisionData " + revisionNumber;
224 }
225 }