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  package net.sf.statsvn.input;
21  
22  import java.util.Map;
23  
24  /**
25   * <p>
26   * Interface for defining a Builder that constructs a data structure from a SVM
27   * logfile. {@link SvnLogfileParser} takes an instance of this interface and
28   * will call methods on the interface for every piece of data it encounters in
29   * the log.
30   * </p>
31   * 
32   * <p>
33   * First, {@link #buildModule} will be called with the name of the module. Then,
34   * {@link #buildFile} will be called with the filename and other pieces of
35   * information of the first file in the log. Then, for every revision of this
36   * file, {@link #buildRevision} is called. The calls to <tt>buildFile</tt> and
37   * <tt>buildRevision</tt> are repeated for every file in the log.
38   * </p>
39   * 
40   * <p>
41   * The files are in no particular order. The revisions of one file are ordered
42   * by time, beginning with the <em>most recent</em>.
43   * </p>
44   * 
45   * @author Richard Cyganiak <richard@cyganiak.de>
46   * @author Tammo van Lessen
47   * @version $Id: SvnLogBuilder.java 351 2008-03-28 18:46:26Z benoitx $
48   */
49  public interface SvnLogBuilder {
50  
51  	/**
52  	 * Starts building a module.
53  	 * 
54  	 * @param moduleName
55  	 *            the name of the module
56  	 */
57  	void buildModule(String moduleName);
58  
59  	/**
60  	 * Starts building a new file. The files are not processed in any particular
61  	 * order.
62  	 * 
63  	 * @param filename
64  	 *            the file's name with path relative to the module, for example
65  	 *            "path/file.txt"
66  	 * @param isBinary
67  	 *            <tt>true</tt> if it's a binary file
68  	 * @param isInAttic
69  	 *            <tt>true</tt> if the file is dead on the main branch
70  	 * @param revBySymnames
71  	 *            maps revision (string) by symbolic name (string)
72  	 * @param dateBySymnames
73  	 *            maps date (date) by symbolic name (string)
74  	 */
75  	void buildFile(String filename, boolean isBinary, boolean isInAttic, Map revBySymnames, final Map dateBySymnames);
76  
77  	/**
78  	 * Adds a revision to the last file that was built.. The revisions are added
79  	 * in SVN logfile order, that is starting with the most recent one.
80  	 * 
81  	 * @param data
82  	 *            the revision
83  	 */
84  	void buildRevision(RevisionData data);
85  
86  	/**
87  	 * Adds a file to the attic. This method should only be called if our first
88  	 * invocation to (@link #buildFile(String, boolean, boolean, Map)) was given
89  	 * an invalid isInAttic field.
90  	 * 
91  	 * This is a way to handle post-processing of implicit deletions at the same
92  	 * time as the implicit additions that can be found in Subversion.
93  	 * 
94  	 * @param filename
95  	 *            the filename to add to the attic.
96  	 */
97  	void addToAttic(String filename);
98  
99  	/**
100 	 * New in StatSVN: We need to have access to FileBuilders after they have
101 	 * been created to populate them with version numbers later on.
102 	 * 
103 	 * @todo Beef up this interface to better encapsulate the data structure.
104 	 * 
105 	 * @return this builder's contained (@link FileBuilder)s.
106 	 */
107 	Map getFileBuilders();
108 
109 	/**
110 	 * New in StatSVN: Updates a particular revision for a file with new line
111 	 * count information. If the file or revision does not exist, action will do
112 	 * nothing.
113 	 * 
114 	 * Necessary because line counts are not given in the log file and hence can
115 	 * only be added in a second pass.
116 	 * 
117 	 * @param filename
118 	 *            the file to be updated
119 	 * @param revisionNumber
120 	 *            the revision number to be updated
121 	 * @param linesAdded
122 	 *            the lines that were added
123 	 * @param linesRemoved
124 	 *            the lines that were removed
125 	 */
126 	void updateRevision(String filename, String revisionNumber, int linesAdded, int linesRemoved);
127 
128 	/**
129 	 * Matches a filename against the include and exclude patterns. If no
130 	 * include pattern was specified, all files will be included. If no exclude
131 	 * pattern was specified, no files will be excluded.
132 	 * 
133 	 * @param filename
134 	 *            a filename
135 	 * @return <tt>true</tt> if the filename matches one of the include
136 	 *         patterns and does not match any of the exclude patterns. If it
137 	 *         matches an include and an exclude pattern, <tt>false</tt> will
138 	 *         be returned.
139 	 */
140 	boolean matchesPatterns(final String filename);
141 
142 	/**
143 	 * Matches a tag against the tag patterns. 
144 	 * 
145 	 * @param tag
146 	 *            a tag
147 	 * @return <tt>true</tt> if the tag matches the tag pattern.
148 	 */
149 	boolean matchesTagPatterns(final String tag);
150 }