Project 4 - Java Statistics

Due Friday, April 27, 5:00pm

For project 4 you will create a program that traverses your Java projects directory and print out statistics about the .java files in each of your projects. Your main class should be called WorkspaceStatsDriver. The class WorkspaceStatsDriver should take as a command-line parameter a string representing the full path of the workspace directory, and should print out the following statistics:

Total Number of projects (directories) in the workspace

Average number of classes per project

Minimum number of classes in any project

Maximum number of classes in any project

For each project (that is, directory in the workspace directory):

The path of the directory folder

Average lines per class in the project

Class with minimum number of lines (with line count)

Class with maximum number of lines (with line count)

For each class in the project:

Full path to class, number of lines in the class, number of lines in the class excluding comment lines

Processing Projects

You may assume that each directory withing the top-level directory passed in is a project. Within each project, you can assume that the java files are all in the src directory -- however, they may be nested within subdirectories of the src directory (so you will need to do a recursive traversal, much like you did for lab 7)

Processing a .java class file

When processing a single .java class file, you will need to go through the file line by line, counting both every line in the file, and every line that is not a comment line. So, for the following file:

public class Test { public int Q; // This is a comment line public Test() // This is not a comment line! { /* int x = 0 int y = 4 int z = 3 */ Q = 3; } }

The line count would be 12 (since there are a total of 12 lines in the file), and the number of lines excluding comments would be 8. For single line comments (//), you should exclude lines that have only whitespace (spaces, tabs) before the comment. For multi-line comments, you can assume that the beginning of comment marker (/*) has only whitespace (spaces, tabs) in front of it, while the end of comment marker (*/) has only whitespace after it. Feel free to use any methods in the String class to make your life easier ...

Project Architecture

We are giving you much less direction on how to structure your project this time than we have in the past. The training wheels are coming off! You are strongly encouraged to discuss your project with your professor. At the very least you should likely have a class to process a single java file, and a class that processes a java project, and a class that processes all of the classes.

Please submit your work in an SVN directory https://www.cs.usfca.edu/svn/<username>/cs112/project4

Sample Output

When run on Professor Rollin's teaching workspace directory, the output is:

Number of projects in workspace: 14 Average Number of Classes Per Project: 2 Minimum Number of Classes: 0 Project: /Users/srollins/teaching/cs112/code/TicTac Maximum Number of Classes: 9 Project: /Users/srollins/teaching/cs112/code/Project3 Project: /Users/srollins/teaching/cs112/code/BillCalculator Average Lines Per Class: 4 Minimum Lines: 4 Class: /Users/srollins/teaching/cs112/code/BillCalculator/src/Bill.java Maximum Lines: 4 Class: /Users/srollins/teaching/cs112/code/BillCalculator/src/Bill.java Class: /Users/srollins/teaching/cs112/code/BillCalculator/src/Bill.java Total Lines: 4 Lines Excluding Comments: 4 Project: /Users/srollins/teaching/cs112/code/Calculations Average Lines Per Class: 27 Minimum Lines: 27 Class: /Users/srollins/teaching/cs112/code/Calculations/src/Calculator.java Maximum Lines: 27 Class: /Users/srollins/teaching/cs112/code/Calculations/src/Calculator.java Class: /Users/srollins/teaching/cs112/code/Calculations/src/Calculator.java Total Lines: 27 Lines Excluding Comments: 27 Project: /Users/srollins/teaching/cs112/code/CodeAnalyzer Average Lines Per Class: 41 Minimum Lines: 28 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/WorkspaceProcessor.java Maximum Lines: 66 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/ProjectInfo.java Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/TestDriver.java Total Lines: 31 Lines Excluding Comments: 21 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/WorkspaceProcessor.java Total Lines: 28 Lines Excluding Comments: 28 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/ProjectProcessor.java Total Lines: 39 Lines Excluding Comments: 39 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/FileProcessor.java Total Lines: 48 Lines Excluding Comments: 40 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/WorkspaceInfo.java Total Lines: 44 Lines Excluding Comments: 44 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/FileInfo.java Total Lines: 36 Lines Excluding Comments: 36 Class: /Users/srollins/teaching/cs112/code/CodeAnalyzer/src/ProjectInfo.java Total Lines: 66 Lines Excluding Comments: 66 Project: /Users/srollins/teaching/cs112/code/Exam Average Lines Per Class: 27 Minimum Lines: 8 Class: /Users/srollins/teaching/cs112/code/Exam/src/Fraction.java Maximum Lines: 64 Class: /Users/srollins/teaching/cs112/code/Exam/src/Exam1.java Class: /Users/srollins/teaching/cs112/code/Exam/src/Exam1.java Total Lines: 64 Lines Excluding Comments: 48 Class: /Users/srollins/teaching/cs112/code/Exam/src/Name.java Total Lines: 11 Lines Excluding Comments: 11 Class: /Users/srollins/teaching/cs112/code/Exam/src/Fraction.java Total Lines: 8 Lines Excluding Comments: 7 Project: /Users/srollins/teaching/cs112/code/FileAnalyzer Average Lines Per Class: 58 Minimum Lines: 31 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/SimilarityDriver.java Maximum Lines: 100 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/SortedWordList.java Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/SimilarityDriver.java Total Lines: 31 Lines Excluding Comments: 20 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/WordCount.java Total Lines: 51 Lines Excluding Comments: 26 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/SimilarityCalculator.java Total Lines: 43 Lines Excluding Comments: 30 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/SortedWordList.java Total Lines: 100 Lines Excluding Comments: 58 Class: /Users/srollins/teaching/cs112/code/FileAnalyzer/src/DocumentProcessor.java Total Lines: 68 Lines Excluding Comments: 48 Project: /Users/srollins/teaching/cs112/code/FormattedDate Average Lines Per Class: 73 Minimum Lines: 54 Class: /Users/srollins/teaching/cs112/code/FormattedDate/src/Driver.java Maximum Lines: 92 Class: /Users/srollins/teaching/cs112/code/FormattedDate/src/FormattedDate.java Class: /Users/srollins/teaching/cs112/code/FormattedDate/src/FormattedDate.java Total Lines: 92 Lines Excluding Comments: 83 Class: /Users/srollins/teaching/cs112/code/FormattedDate/src/Driver.java Total Lines: 54 Lines Excluding Comments: 54 Project: /Users/srollins/teaching/cs112/code/InheritanceExample Average Lines Per Class: 27 Minimum Lines: 27 Class: /Users/srollins/teaching/cs112/code/InheritanceExample/src/StringListDriver.java Maximum Lines: 28 Class: /Users/srollins/teaching/cs112/code/InheritanceExample/src/StringList.java Class: /Users/srollins/teaching/cs112/code/InheritanceExample/src/StringListDriver.java Total Lines: 27 Lines Excluding Comments: 21 Class: /Users/srollins/teaching/cs112/code/InheritanceExample/src/StringList.java Total Lines: 28 Lines Excluding Comments: 17 Project: /Users/srollins/teaching/cs112/code/Project3 Average Lines Per Class: 51 Minimum Lines: 20 Class: /Users/srollins/teaching/cs112/code/Project3/src/Driver.java Maximum Lines: 84 Class: /Users/srollins/teaching/cs112/code/Project3/src/DocsUploadSample.java Class: /Users/srollins/teaching/cs112/code/Project3/src/Document.java Total Lines: 38 Lines Excluding Comments: 38 Class: /Users/srollins/teaching/cs112/code/Project3/src/UI.java Total Lines: 60 Lines Excluding Comments: 60 Class: /Users/srollins/teaching/cs112/code/Project3/src/DocViewer.java Total Lines: 64 Lines Excluding Comments: 64 Class: /Users/srollins/teaching/cs112/code/Project3/src/UploadInfo.java Total Lines: 28 Lines Excluding Comments: 28 Class: /Users/srollins/teaching/cs112/code/Project3/src/DocsUploadSample.class Total Lines: 36 Lines Excluding Comments: 36 Class: /Users/srollins/teaching/cs112/code/Project3/src/Uploader.java Total Lines: 68 Lines Excluding Comments: 51 Class: /Users/srollins/teaching/cs112/code/Project3/src/DocumentList.java Total Lines: 67 Lines Excluding Comments: 66 Class: /Users/srollins/teaching/cs112/code/Project3/src/Driver.java Total Lines: 20 Lines Excluding Comments: 20 Class: /Users/srollins/teaching/cs112/code/Project3/src/DocsUploadSample.java Total Lines: 84 Lines Excluding Comments: 65 Project: /Users/srollins/teaching/cs112/code/Project4 Average Lines Per Class: 45 Minimum Lines: 13 Class: /Users/srollins/teaching/cs112/code/Project4/src/Driver.java Maximum Lines: 83 Class: /Users/srollins/teaching/cs112/code/Project4/src/Mp3.java Class: /Users/srollins/teaching/cs112/code/Project4/src/Mp3List.java Total Lines: 14 Lines Excluding Comments: 14 Class: /Users/srollins/teaching/cs112/code/Project4/src/Mp3Browser.java Total Lines: 71 Lines Excluding Comments: 71 Class: /Users/srollins/teaching/cs112/code/Project4/src/Driver.java Total Lines: 13 Lines Excluding Comments: 13 Class: /Users/srollins/teaching/cs112/code/Project4/src/UI.java Total Lines: 46 Lines Excluding Comments: 46 Class: /Users/srollins/teaching/cs112/code/Project4/src/Mp3.java Total Lines: 83 Lines Excluding Comments: 83 Project: /Users/srollins/teaching/cs112/code/SearchReplace Average Lines Per Class: 22 Minimum Lines: 22 Class: /Users/srollins/teaching/cs112/code/SearchReplace/src/SearchReplace.java Maximum Lines: 22 Class: /Users/srollins/teaching/cs112/code/SearchReplace/src/SearchReplace.java Class: /Users/srollins/teaching/cs112/code/SearchReplace/src/SearchReplace.java Total Lines: 22 Lines Excluding Comments: 22 Project: /Users/srollins/teaching/cs112/code/TicTac No classes in project Project: /Users/srollins/teaching/cs112/code/Week1 Average Lines Per Class: 27 Minimum Lines: 27 Class: /Users/srollins/teaching/cs112/code/Week1/src/Calculator.java Maximum Lines: 27 Class: /Users/srollins/teaching/cs112/code/Week1/src/Calculator.java Class: /Users/srollins/teaching/cs112/code/Week1/src/Calculator.java Total Lines: 27 Lines Excluding Comments: 27 Project: /Users/srollins/teaching/cs112/code/WordAnalyzer Average Lines Per Class: 39 Minimum Lines: 26 Class: /Users/srollins/teaching/cs112/code/WordAnalyzer/src/WordDriver.java Maximum Lines: 53 Class: /Users/srollins/teaching/cs112/code/WordAnalyzer/src/Word.java Class: /Users/srollins/teaching/cs112/code/WordAnalyzer/src/Word.java Total Lines: 53 Lines Excluding Comments: 52 Class: /Users/srollins/teaching/cs112/code/WordAnalyzer/src/WordDriver.java Total Lines: 26 Lines Excluding Comments: 26 Project: /Users/srollins/teaching/cs112/code/WorkspaceProcessor No classes in project