001    /**
002     * www.jcoverage.com
003     * Copyright (C)2003 jcoverage ltd.
004     *
005     * This file is part of jcoverage.
006     *
007     * jcoverage is free software; you can redistribute it and/or modify
008     * it under the terms of the GNU General Public License as published
009     * by the Free Software Foundation; either version 2 of the License,
010     * or (at your option) any later version.
011     *
012     * jcoverage is distributed in the hope that it will be useful, but
013     * WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015     * General Public License for more details.
016     *
017     * You should have received a copy of the GNU General Public License
018     * along with jcoverage; if not, write to the Free Software
019     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
020     * USA
021     *
022     */
023    package com.jcoverage.coverage.reporting.html;
024    
025    import java.io.*;
026    
027    import org.apache.log4j.Logger;
028    
029    import com.jcoverage.reporting.Format;
030    import com.jcoverage.reporting.FormattingContext;
031    import com.jcoverage.reporting.Page;
032    import com.jcoverage.reporting.ReportingException;
033    import com.jcoverage.reporting.View;
034    import com.jcoverage.reporting.ViewFormattingContext;
035    
036    import com.jcoverage.coverage.reporting.collation.PackageSummaryPage;
037    import com.jcoverage.coverage.reporting.collation.ReportSummaryPage;
038    import com.jcoverage.coverage.reporting.collation.JavaFilePage;
039    import com.jcoverage.coverage.reporting.collation.StaticFileCollator;
040    
041    /**
042     * This class provides the generation of coverage reports in static
043     * html.  Multiple views are defined by this class, and used to
044     * generate each page.  Each view corresponds to a different line
045     * ordering, so that lines can be generated in alphabetical order, or
046     * by ascending or descending coverage.
047     */
048    public class MultiViewStaticHtmlFormat implements Format {
049      
050      static Logger logger=Logger.getLogger(MultiViewStaticHtmlFormat.class);
051      
052      public final static View ALPHABETICAL_VIEW=new AlphabeticalView("By Name");
053      public final static View COVERAGE_ASCENDING_VIEW=new CoverageView("By Coverage (Most covered first)",CoverageView.ASCENDING);
054      public final static View COVERAGE_DESCENDING_VIEW=new CoverageView("By Coverage (Least covered first)",CoverageView.DESCENDING);
055    
056      public final static View[] ALL_VIEWS=new View[]{ALPHABETICAL_VIEW,COVERAGE_ASCENDING_VIEW,COVERAGE_DESCENDING_VIEW};
057    
058      public void formatPage(ViewFormattingContext ctx,Page page) throws ReportingException {
059        throw new IllegalStateException(getClass().getName()+" must be called with a plain FormattingContext");
060      }
061    
062      /**
063       * Implementation proxy.  This implementation delegates to another
064       * formatPage implementation depending on the page.
065       * @throws ReportingException if the page is not recognized.
066       */
067      public void formatPage(FormattingContext ctx,Page page) throws ReportingException {
068        
069        if (page instanceof ReportSummaryPage || page instanceof PackageSummaryPage) {
070          
071          Format format=null;
072    
073          if (page instanceof ReportSummaryPage) {
074            format=new ReportSummaryFormat();
075          } else if (page instanceof PackageSummaryPage) {
076            format=new PackageSummaryFormat();
077          }
078    
079          ViewFormattingContext viewContext=new ViewFormattingContext(ctx,ALL_VIEWS,ALPHABETICAL_VIEW);
080          format.formatPage(viewContext,page);
081          viewContext=new ViewFormattingContext(ctx,ALL_VIEWS,COVERAGE_ASCENDING_VIEW);
082          format.formatPage(viewContext,page);
083          viewContext=new ViewFormattingContext(ctx,ALL_VIEWS,COVERAGE_DESCENDING_VIEW);
084          format.formatPage(viewContext,page);
085    
086        } else if (page instanceof JavaFilePage) {
087    
088          Format format=new JavaFilePageFormat();
089          format.formatPage(ctx,page);
090    
091        } else {
092          throw new ReportingException("Don't know how to format a page of type "+page.getClass());
093        }
094    
095      }
096      
097    }