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: 2004/10/12 07:22:42 $
22 */
23 package net.sf.statsvn.input;
24
25 import java.util.Date;
26
27 /**
28 * Container for all information contained in one SVN revision.
29 *
30 * @author Richard Cyganiak <richard@cyganiak.de> *
31 * @author Gunter Mussbacher <gunterm@site.uottawa.ca>
32 * @author Jason Kealey <jkealey@shade.ca>
33 *
34 * @version $Id: RevisionData.java 351 2008-03-28 18:46:26Z benoitx $
35 */
36 public class RevisionData {
37 private String revisionNumber;
38
39 private Date date;
40
41 private String loginName;
42
43 private boolean stateExp = false;
44
45 private boolean stateDead = false;
46
47 private boolean stateAdded = false;
48
49 private boolean hasNoLines = true;
50
51 private int linesAdded;
52
53 private int linesRemoved;
54
55 private String comment = "";
56
57 private String copyfromPath;
58
59 private String copyfromRevision;
60
61 public RevisionData() {
62 }
63
64 /**
65 * @return Returns the loginName.
66 */
67 public String getLoginName() {
68 return loginName;
69 }
70
71 /**
72 * @param authorName
73 * The loginName to set.
74 */
75 public void setLoginName(final String authorName) {
76 this.loginName = authorName;
77 }
78
79 /**
80 * @return Returns the date.
81 */
82 public Date getDate() {
83 return date != null ? new Date(date.getTime()) : null;
84 }
85
86 /**
87 * @param date
88 * The date to set.
89 */
90 public void setDate(final Date date) {
91 if (date != null) {
92 this.date = new Date(date.getTime());
93 } else {
94 this.date = null;
95 }
96 }
97
98 /**
99 * @return Returns the linesAdded.
100 */
101 public int getLinesAdded() {
102 return linesAdded;
103 }
104
105 /**
106 * @return Returns the linesRemoved.
107 */
108 public int getLinesRemoved() {
109 return linesRemoved;
110 }
111
112 /**
113 * Checks if the revision contains numbers for the added and removed lines.
114 *
115 * @return true if the revision contains numbers for the added and removed lines
116 */
117 public boolean hasNoLines() {
118 return hasNoLines;
119 }
120
121 /**
122 * Sets the number of added and removed lines.
123 *
124 * @param added
125 * The number of added lines
126 * @param removed
127 * The number of removed lines
128 */
129 public void setLines(final int added, final int removed) {
130 this.linesAdded = added;
131 this.linesRemoved = removed;
132 hasNoLines = false;
133 }
134
135 /**
136 * @return Returns the revisionNumber.
137 */
138 public String getRevisionNumber() {
139 return revisionNumber;
140 }
141
142 /**
143 * Sets the revision number.
144 *
145 * @param revision
146 * The revision number
147 */
148 public void setRevisionNumber(final String revision) {
149 this.revisionNumber = revision;
150 }
151
152 /**
153 * Is this revision a deletion?
154 *
155 * @param isDead
156 * <tt>true</tt> if revision is a deletion.
157 */
158 public void setStateDead(final boolean isDead) {
159 stateDead = isDead;
160 }
161
162 /**
163 * Is the revision exposed. This is CVS speak for any "live" revisionNumber, that is, if this is the current revisionNumber, then a file exists in the
164 * working copy.
165 *
166 * New in StatSVN: We use it to mean this revision is not a deletion revision. (modify, add or replace)
167 *
168 * @param isExposed
169 * <tt>true</tt> true if the revision is not a deletion.
170 */
171 public void setStateExp(final boolean isExposed) {
172 stateExp = isExposed;
173 }
174
175 /**
176 * Is this revision an addition?
177 *
178 * New in StatSVN: This is no longer a still exists in working copy. We use it to mean this revision is not a deletion revision.
179 *
180 * @param isAdded
181 */
182 public void setStateAdded(final boolean isAdded) {
183 stateAdded = isAdded;
184 }
185
186 /**
187 * @return Returns the comment.
188 */
189 public String getComment() {
190 return comment;
191 }
192
193 /**
194 * @param comment
195 * The comment to set.
196 */
197 public void setComment(final String comment) {
198 this.comment = comment;
199 }
200
201 /**
202 * Returns <tt>true</tt> if this revisionNumber is the removal of a file.
203 *
204 * @return <tt>true</tt> if this revisionNumber deletes the file.
205 *
206 */
207 public boolean isDeletion() {
208 return stateDead;
209 }
210
211 /**
212 * Returns <tt>true</tt> if this revisionNumber is a normal change.
213 *
214 * New in StatSVN: This was isChangeOrRestore before.
215 *
216 * @return <tt>true</tt> if this is a normal change or a restore.
217 */
218 public boolean isChange() {
219 // return stateExp && !hasNoLines;
220 return stateExp && !stateAdded;
221 }
222
223 /**
224 * Returns <tt>true</tt> if this revisionNumber is the creation of a new file or a restore.. The distinction between these two cases can be made by
225 * looking at the previous (in time, not log order) revisionNumber. If it was a deletion, then this revisionNumber is a restore.
226 *
227 * New in StatSVN: This was isCreation before.
228 *
229 * @return <tt>true</tt> if this is the creation of a new file.
230 */
231 public boolean isCreationOrRestore() {
232 // return stateExp && hasNoLines;
233 return stateExp && stateAdded;
234 }
235
236 /**
237 * Returns <tt>true</tt> if this is an Exp ("exposed"?) revisionNumber. This is CVS speak for any "live" revisionNumber, that is, if this is the current
238 * revisionNumber, then a file exists in the working copy.
239 *
240 * New in StatSVN: We use it to mean this revision is not a deletion revision. (modify, add or replace)
241 *
242 * @return <tt>true</tt> if this is an Exp revisionNumber
243 */
244 public boolean isStateExp() {
245 return stateExp;
246 }
247
248 /**
249 * Returns <tt>true</tt> if this is a dead revisionNumber. If this is the current revisionNumber, then the file does not exist in the working copy.
250 *
251 * @return <tt>true</tt> if this is a dead revisionNumber
252 */
253 public boolean isStateDead() {
254 return stateDead;
255 }
256
257 /**
258 * Returns the current revision data in string format.
259 */
260 public String toString() {
261 return "RevisionData " + revisionNumber;
262 }
263
264 /**
265 * Returns a new instance of the RevisionData, with the same fields as the current one.
266 *
267 * @return the clone
268 */
269 public RevisionData createCopy() {
270 final RevisionData copy = new RevisionData(revisionNumber, date, stateExp, stateDead, stateAdded, hasNoLines, linesAdded, linesRemoved);
271 copy.setComment(comment);
272 copy.setLoginName(loginName);
273 return copy;
274 }
275
276 /**
277 * Private constructor used by (@link #clone())
278 *
279 * @param revisionNumber
280 * the revision number
281 * @param date
282 * the revision date
283 * @param stateExp
284 * if this were the current revision, would the file still be live (not-dead)
285 * @param stateDead
286 * is this a deletion revision
287 * @param stateAdded
288 * is this an addition revision
289 * @param hasNoLines
290 * have we set the line counts?
291 * @param linesAdded
292 * number of lines added
293 * @param linesRemoved
294 * number of lines removed
295 */
296 private RevisionData(final String revisionNumber, final Date date, final boolean stateExp, final boolean stateDead, final boolean stateAdded,
297 final boolean hasNoLines, final int linesAdded, final int linesRemoved) {
298 super();
299 this.revisionNumber = revisionNumber;
300 this.date = date;
301 this.stateExp = stateExp;
302 this.stateDead = stateDead;
303 this.hasNoLines = hasNoLines;
304 this.linesAdded = linesAdded;
305 this.linesRemoved = linesRemoved;
306 this.stateAdded = stateAdded;
307 }
308
309 public String getCopyfromPath() {
310 return copyfromPath;
311 }
312
313 public void setCopyfromPath(final String copyfromPath) {
314 this.copyfromPath = copyfromPath;
315 }
316
317 public String getCopyfromRevision() {
318 return copyfromRevision;
319 }
320
321 public void setCopyfromRevision(final String copyfromRevision) {
322 this.copyfromRevision = copyfromRevision;
323 }
324
325 }