Skip to content

Commit

Permalink
Refactored to be more of a reasonable application then one big honkin…
Browse files Browse the repository at this point in the history
…g file.
  • Loading branch information
Terrence Ryan committed Mar 4, 2010
1 parent 4a14798 commit 292c1fe
Show file tree
Hide file tree
Showing 5 changed files with 265 additions and 200 deletions.
212 changes: 12 additions & 200 deletions handlers/displayStats.cfm
Expand Up @@ -5,76 +5,21 @@
if (not DirectoryExists(url.rootFilePath) and fileExists(url.rootFilePath)){
onlyAFile = true;
fileToCount = url.rootFilePath;
rootFilePath = GetDirectoryFromPath(url.rootFilePath);
rootFilePath = Left(rootFilePath, Len(rootFilePath) -1);
rootFileName = GetFileFromPath(url.rootFilePath);
SQL = "SELECT * FROM resultset WHERE directory ='#rootFilePath#' AND name ='#rootFileName#'";
}
else{
onlyAFile = false;
rootFilePath = url.rootFilePath;
SQL = "SELECT * FROM resultset WHERE type !='Dir'";
}
FS = createObject("java", "java.lang.System").getProperty("file.separator");
extList = "cfm,cfc,css,xml,htm,html,js";
extList = listQualify(extList, "'");
files = DirectoryList(rootFilePath, true, "Query");
fileStats = QueryNew("file,extension,lines,relativeParent,relativeFile");
qoq = new Query();
qoq.setAttributes(resultSet = files);
qoq.SetDBType("query");
files = qoq.execute(sql=SQL).getResult();
for(i=1; i <= files.recordCount; i++){
filePath = files.directory[i] & FS & files.name[i];
QueryAddRow(fileStats);
QuerySetCell(fileStats, "file", filePath);
QuerySetCell(fileStats, "extension", ListLast(files.name[i], "."));
QuerySetCell(fileStats, "relativeParent", CleanFilePath(files.directory[i])) ;
QuerySetCell(fileStats, "relativeFile", CleanFilePath(filePath)) ;
}
//filter out extensions that we don't want.
SQL = "SELECT * FROM resultset WHERE extension in(#extList#)";
qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
fileStats = qoq.execute(sql=SQL).getResult();
//Count all of the lines of code
for(j=1; j <= fileStats.recordCount; j++){
QuerySetCell(fileStats, "lines", countLines(fileStats.file[j]), j);
}
util = New util();
fileStatsObj = New fileStats(rootFilePath, onlyAFile, util);
fileStats = fileStatsObj.getLineCountsAll();
//Get the grand total
SQL = "SELECT sum(cast(lines as integer)) as lines FROM resultset";
qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
totalLines = qoq.execute(sql=SQL).getResult();
totalLines = fileStatsObj.getGrandTotals();
//Query for lines of code by extension.
SQL = "SELECT count(file) as numberOfFiles, sum(cast(lines as integer)) as lines, extension FROM resultset GROUP BY extension";
qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
linesByextension = qoq.execute(sql=SQL).getResult();
linesByextension = fileStatsObj.getLinesByExtension();
//Query for lines of code by folder.
SQL = "SELECT count(file) as numberOfFiles, sum(cast(lines as integer)) as lines, relativeParent FROM resultset GROUP BY relativeParent";
qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
linesByFolder = qoq.execute(sql=SQL).getResult();
linesByFolder = fileStatsObj.getLinesByDirectory();
</cfscript>

Expand All @@ -83,129 +28,22 @@
<head>
<script src="jquery.js"></script>
<script src="jquery.tablesorter.min.js"></script>
<script>
$(document).ready(function() {
//From Barney B: http://www.barneyb.com/barneyblog/2009/06/03/jquery-tablesorter-comma-parser/
jQuery.tablesorter.addParser({
id: "commaDigit",
is: function(s, table) {
var c = table.config;
return jQuery.tablesorter.isDigit(s.replace(/,/g, ""), c);
},
format: function(s) {
return jQuery.tablesorter.formatFloat(s.replace(/,/g, ""));
},
type: "numeric"
});
$("#allData").tablesorter({
headers: {1: {sorter:"commaDigit"}},
widgets: ["zebra"]
});
$("#extData").tablesorter({
headers: {2: {sorter:"commaDigit"}},
widgets: ["zebra"]
});
$("#folderData").tablesorter({
headers: {2: {sorter:"commaDigit"}},
widgets: ["zebra"]
});
<script src="lib.js"></script>

})
</script>
<cfoutput><title>BuilderStats</title></cfoutput>

<style>
thead th { cursor:pointer; }
body{
font-family: "Adobe Clean", "Myriad Pro", Calibri, Tahoma, Arial, Helvetica, sans-serif;
font-size: 14px;
background-color: #2A587A;
background-image: url(grad.jpg);
background-repeat: repeat-x;
padding: 5px;
}
h1{
font-size: 17px;
}
h2{
font-size: 16px;
padding-bottom: 0;
margin-bottom: 0;
}
em{ font-style:italic;}
strong{font-weight:bold;};
table{
width: 100%;
}
th{
text-align: left;
font-weight: bold;
background-color: #142a3a;
padding: 2px;
color: #DDDDDD;
}
td{
padding: 1px 2px;
}
tr{
background-color:#FFFFFF;
}
td{
margin: 0;
}
tr.odd{
background-color: #DEDEDE;
}
tr.header{
background-color: transparent;
}
.lines{
text-align: right;
width: 100px;
}
.files{
width: 120px;
}
.type{
width: 180px;
}
.folder{
width: 180px;
}
.file{
width: 305px;
}
</style>
<title>BuilderStats</title>
<link rel="stylesheet" href="screen.css" type="text/css"/>

</head>
<body>
<cfoutput>
<h1>Code Stats</h1>

<cfif onlyAFile>
<p>The file <em>#url.rootFilePath#</em> contains <strong>#NumberFormat(totalLines.lines)#</strong> lines of code.
<p>The file <em>#url.rootFilePath#</em> contains <strong>#NumberFormat(totalLines)#</strong> lines of code.
<cfabort>
<cfelse>
<p>The folder <em>#rootFilePath#</em> contains <strong>#NumberFormat(totalLines.lines)#</strong> lines of code in <strong>#NumberFormat(fileStats.recordCount)#</strong> files.
<p>The folder <em>#rootFilePath#</em> contains <strong>#NumberFormat(totalLines)#</strong> lines of code in <strong>#NumberFormat(fileStats.recordCount)#</strong> files.
</cfif>

<h2>By Extension</h2>
Expand Down Expand Up @@ -250,30 +88,4 @@ $("#folderData").tablesorter({
</body>
</html>

<cfscript>
public numeric function countLines(required string filePath){
var file = FileOpen(arguments.filePath, "read");
var i = 0;
while(NOT FileisEOF(file)) {
var line = FileReadLine(file);
if(Len(Trim(line)) > 0){
i++;
}
}
FileClose(file);
return i;
}
public string function CleanFilePath(required string filePath){
var result = ReplaceNoCase(arguments.filePath, variables.rootFilePath, "", "once");
if (len(result) eq 0){
result = FS;
}
return result;
}
</cfscript>

106 changes: 106 additions & 0 deletions handlers/fileStats.cfc
@@ -0,0 +1,106 @@
component{

public fileStats function init(required string rootPath, string onlyAFile = "directory", required util util){
variables.FS = createObject("java", "java.lang.System").getProperty("file.separator");
variables.rootPath = arguments.rootPath;
variables.util = arguments.util;
variables.extList = "cfm,cfc,css,xml,htm,html,js";
variables.extList = listQualify(variables.extList, "'");
variables.onlyAFile = arguments.onlyAFile;

variables.baseStats = getBaseStats();

return This;
}

public query function getLineCountsAll(){
return variables.baseStats;
}

public numeric function getGrandTotal(){

//Get the grand total
var SQL = "SELECT sum(cast(lines as integer)) as lines FROM resultset";
var qoq = new Query();
qoq.setAttributes(resultSet = variables.baseStats);
qoq.SetDBType("query");
var totalLines = qoq.execute(sql=SQL).getResult();

return totalLines.lines;
}

public query function getLinesByExtension(){

var SQL = "SELECT count(file) as numberOfFiles, sum(cast(lines as integer)) as lines, extension FROM resultset GROUP BY extension";
var qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
var linesByextension = qoq.execute(sql=SQL).getResult();

return linesByextension;
}

public query function getLinesByDirectory(){

var SQL = "SELECT count(file) as numberOfFiles, sum(cast(lines as integer)) as lines, relativeParent FROM resultset GROUP BY relativeParent";
var qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
var linesByFolder = qoq.execute(sql=SQL).getResult();

return linesByFolder;
}


private query function getBaseStats(){

var files = DirectoryList(variables.rootPath, true, "Query");
var fileStats = QueryNew("file,extension,lines,relativeParent,relativeFile");
var i = 0;
var qoq = new Query();
var SQL ="";
var pathToCount = "";
var rootFileName = "";

if (variables.onlyAFile){
pathToCount = GetDirectoryFromPath(variables.rootPath);
pathToCount = Left(pathToCount, Len(pathToCount) -1);
rootFileName = GetFileFromPath(variables.rootPath);
SQL = "SELECT * FROM resultset WHERE directory ='#pathToCount#' AND name ='#rootFileName#'";
}
else{
SQL = "SELECT * FROM resultset WHERE type !='Dir'";
}

qoq.setAttributes(resultSet = files);
qoq.SetDBType("query");
files = qoq.execute(sql=SQL).getResult();

for(i=1; i <= files.recordCount; i++){
var filePath = files.directory[i] & FS & files.name[i];
QueryAddRow(fileStats);
QuerySetCell(fileStats, "file", filePath);
QuerySetCell(fileStats, "extension", ListLast(files.name[i], "."));
QuerySetCell(fileStats, "relativeParent", variables.util.MakeRelativeFilePath(files.directory[i],variables.rootPath)) ;
QuerySetCell(fileStats, "relativeFile", variables.util.MakeRelativeFilePath(filePath,variables.rootPath)) ;
}

//filter out extensions that we don't want.
SQL = "SELECT * FROM resultset WHERE extension in(#extList#)";
qoq = new Query();
qoq.setAttributes(resultSet = fileStats);
qoq.SetDBType("query");
fileStats = qoq.execute(sql=SQL).getResult();


//Count all of the lines of code
for(j=1; j <= fileStats.recordCount; j++){
QuerySetCell(fileStats, "lines", util.countLines(fileStats.file[j]), j);
}


return fileStats;
}


}
29 changes: 29 additions & 0 deletions handlers/lib.js
@@ -0,0 +1,29 @@
$(document).ready(function() {

//From Barney B: http://www.barneyb.com/barneyblog/2009/06/03/jquery-tablesorter-comma-parser/
jQuery.tablesorter.addParser({
id: "commaDigit",
is: function(s, table) {
var c = table.config;
return jQuery.tablesorter.isDigit(s.replace(/,/g, ""), c);
},
format: function(s) {
return jQuery.tablesorter.formatFloat(s.replace(/,/g, ""));
},
type: "numeric"
});

$("#allData").tablesorter({
headers: {1: {sorter:"commaDigit"}},
widgets: ["zebra"]
});
$("#extData").tablesorter({
headers: {2: {sorter:"commaDigit"}},
widgets: ["zebra"]
});
$("#folderData").tablesorter({
headers: {2: {sorter:"commaDigit"}},
widgets: ["zebra"]
});

})

0 comments on commit 292c1fe

Please sign in to comment.