001 package hirondelle.web4jtools.metrics.tabs; 002 003 import hirondelle.web4j.action.ResponsePage; 004 import hirondelle.web4j.request.RequestParser; 005 import hirondelle.web4jtools.metrics.base.FileInfo; 006 import hirondelle.web4jtools.metrics.base.MetricsAction; 007 008 import java.util.ArrayList; 009 import java.util.List; 010 011 /** 012 * List source files containing at least one tab character. 013 * 014 * <P>Since tools often display tabs with excessively large indentation, tab characters 015 * are usually undesirable in code. 016 */ 017 public class TabsListAction extends MetricsAction { 018 019 /** Full constructor. */ 020 public TabsListAction(RequestParser aRequestParser) { 021 super(FORWARD, aRequestParser); 022 } 023 024 /** 025 * List source files containing one or more TAB characters. 026 * 027 *<P>In addition, show these stats : 028 *<ul> 029 * <li>total number of tab characters in source code 030 * <li>total number of source code files containing at least one tab character 031 *</ul> 032 */ 033 @Override protected void calculateMetric() { 034 List<FileInfo> filesWithTabs = filterFilesWithTabs(); 035 addToRequest("filesWithTabs", filesWithTabs); 036 addToRequest("numTabs", fNumTabs); 037 } 038 039 // PRIVATE // 040 private int fNumTabs; 041 private static final ResponsePage FORWARD = new ResponsePage("Files With TAB Characters", "view.jsp", TabsListAction.class); 042 043 private List<FileInfo> filterFilesWithTabs(){ 044 List<FileInfo> result = new ArrayList<FileInfo>(); 045 for(FileInfo fileInfo : fFileList){ 046 if ( fileInfo.getNumTabs() > 0 ) { 047 result.add(fileInfo); 048 fNumTabs = fNumTabs + fileInfo.getNumTabs(); 049 } 050 } 051 return result; 052 } 053 }