View Javadoc

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 }