001    package hirondelle.web4jtools.metrics.tests;
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 the unit test classes.
013    * 
014    * <P>Uses the <tt>UnitTestFingerprint</tt> setting in <tt>web.xml</tt> to 
015    * identify test classes.
016    */
017    public final class TestsAction extends MetricsAction  {
018    
019      /** Full constructor. */
020      public TestsAction(RequestParser aRequestParser){
021        super(FORWARD, aRequestParser);
022      }
023    
024      /** Show the test class metrics to the user. */
025      protected void calculateMetric() {
026        scanFiles(fFileList);
027        addToRequest("testClasses", fTestFiles);
028        addToRequest("numTestLines", fNumTestLines);
029      }
030      
031      // PRIVATE //
032      private static final ResponsePage FORWARD = new ResponsePage("Test Frequency", "view.jsp", TestsAction.class);
033      private List<FileInfo> fTestFiles = new ArrayList<FileInfo>();
034      private long fNumTestLines;
035      
036      private void scanFiles(List<FileInfo> aFiles){
037        for (FileInfo fileInfo : aFiles){
038          if ( fileInfo.isUnitTest() ) {
039            fTestFiles.add(fileInfo);
040            fNumTestLines = fNumTestLines + fileInfo.getNumLines();
041          }
042        }
043      }
044    }