net.sf.statcvs.input
Class Builder

java.lang.Object
  extended by net.sf.statcvs.input.Builder
All Implemented Interfaces:
CvsLogBuilder

public class Builder
extends java.lang.Object
implements CvsLogBuilder

Helps building the Repository from a CVS log. The Builder is fed by some CVS history data source, for example a CVS log parser. The Repository can be retrieved using the createCvsContent() method.

The class also takes care of the creation of Author and Directory objects and makes sure that there's only one of these for each author name and path. It also provides LOC count services.

Version:
$Id: Builder.java,v 1.40 2008/04/02 11:22:14 benoitx Exp $
Author:
Richard Cyganiak

Constructor Summary
Builder(RepositoryFileManager repositoryFileManager, FilePatternMatcher includePattern, FilePatternMatcher excludePattern, java.util.regex.Pattern tagsPattern)
          Creates a new Builder
 
Method Summary
 boolean allRejectedByExcludePattern()
           
 boolean allRejectedByIncludePattern()
           
 void buildFile(java.lang.String filename, boolean isBinary, boolean isInAttic, java.util.Map revBySymnames)
          Starts building a new file.
 void buildModule(java.lang.String moduleName)
          Starts building the module.
 void buildRevision(RevisionData data)
          Adds a revision to the current file.
 Repository createCvsContent()
          Returns a Repository object of all files.
 java.util.Set getAtticFileNames()
          Returns the Set of filenames that are "in the attic".
 Author getAuthor(java.lang.String name)
          returns the Author of the given name or creates it if it does not yet exist.
 Directory getDirectory(java.lang.String filename)
          Returns the Directory of the given filename or creates it if it does not yet exist.
 int getLOC(java.lang.String filename)
           
 java.lang.String getProjectName()
           
 java.lang.String getRevision(java.lang.String filename)
           
 SymbolicName getSymbolicName(java.lang.String name)
          Returns the SymbolicName with the given name or creates it if it does not yet exist.
 boolean hasLocalCVSMetadata()
          Returns true if at least some local files have matching entries in local CVS metada directories.
 boolean isLocalFilesNotFound()
          Returns true if no local copy was found for the majority of files in the log.
 boolean isLogAndLocalFilesOutOfSync()
          Returns true if the local working copy is out of sync with the log.
 boolean matchesPatterns(java.lang.String filename)
          Matches a filename against the include and exclude patterns.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Builder

public Builder(RepositoryFileManager repositoryFileManager,
               FilePatternMatcher includePattern,
               FilePatternMatcher excludePattern,
               java.util.regex.Pattern tagsPattern)
Creates a new Builder

Parameters:
repositoryFileManager - the RepositoryFileManager that can be used to retrieve LOC counts for the files that this builder will create
includePattern - a list of Ant-style wildcard patterns, seperated by : or ;
excludePattern - a list of Ant-style wildcard patterns, seperated by : or ;
tagsPattern - A regular expression; matching symbolic names are recorded
Method Detail

buildModule

public void buildModule(java.lang.String moduleName)
Starts building the module.

Specified by:
buildModule in interface CvsLogBuilder
Parameters:
moduleName - name of the module

buildFile

public void buildFile(java.lang.String filename,
                      boolean isBinary,
                      boolean isInAttic,
                      java.util.Map revBySymnames)
Starts building a new file. The files are not expected to be created in any particular order.

Specified by:
buildFile in interface CvsLogBuilder
Parameters:
filename - the file's name with path, for example "path/file.txt"
isBinary - true if it's a binary file
isInAttic - true if the file is dead on the main branch
revBySymnames - maps revision (string) by symbolic name (string)

buildRevision

public void buildRevision(RevisionData data)
Adds a revision to the current file. The revisions must be added in CVS logfile order, that is starting with the most recent one.

Specified by:
buildRevision in interface CvsLogBuilder
Parameters:
data - the revision

createCvsContent

public Repository createCvsContent()
Returns a Repository object of all files.

Returns:
Repository a Repository object

getProjectName

public java.lang.String getProjectName()

getAtticFileNames

public java.util.Set getAtticFileNames()
Returns the Set of filenames that are "in the attic".

Returns:
a Set of Strings

allRejectedByExcludePattern

public boolean allRejectedByExcludePattern()
Returns:
true if there was an exclude pattern, and it rejected all files

allRejectedByIncludePattern

public boolean allRejectedByIncludePattern()
Returns:
true if there was an include pattern, and it rejected all files

isLogAndLocalFilesOutOfSync

public boolean isLogAndLocalFilesOutOfSync()
Returns true if the local working copy is out of sync with the log. The current implementation spots if local files have been deleted and not yet committed, or if the log file was generated before the latest commit.


isLocalFilesNotFound

public boolean isLocalFilesNotFound()
Returns true if no local copy was found for the majority of files in the log. This is a strong indication that the log is not for the specified local working copy.


hasLocalCVSMetadata

public boolean hasLocalCVSMetadata()
Returns true if at least some local files have matching entries in local CVS metada directories. If this is not the case, then the local copy is probably just an export, not a checkout, and we can't check if the log and working copy are in sync.


getAuthor

public Author getAuthor(java.lang.String name)
returns the Author of the given name or creates it if it does not yet exist. Author names are handled as case-insensitive.

Parameters:
name - the author's name
Returns:
a corresponding Author object

getDirectory

public Directory getDirectory(java.lang.String filename)
Returns the Directory of the given filename or creates it if it does not yet exist.

Parameters:
filename - the name and path of a file, for example "src/Main.java"
Returns:
a corresponding Directory object

getSymbolicName

public SymbolicName getSymbolicName(java.lang.String name)
Returns the SymbolicName with the given name or creates it if it does not yet exist.

Parameters:
name - the symbolic name's name
Returns:
the corresponding symbolic name object

getLOC

public int getLOC(java.lang.String filename)
           throws NoLineCountException
Throws:
NoLineCountException

getRevision

public java.lang.String getRevision(java.lang.String filename)
                             throws java.io.IOException
Throws:
java.io.IOException
See Also:
RepositoryFileManager.getRevision(String)

matchesPatterns

public boolean matchesPatterns(java.lang.String filename)
Matches a filename against the include and exclude patterns. If no include pattern was specified, all files will be included. If no exclude pattern was specified, no files will be excluded.

Parameters:
filename - a filename
Returns:
true if the filename matches one of the include patterns and does not match any of the exclude patterns. If it matches an include and an exclude pattern, false will be returned.


Copyright © 2008. All Rights Reserved.