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    }