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 */
023package com.jcoverage.coverage.reporting.collation;
024
025import java.util.Iterator;
026
027import org.apache.log4j.Logger;
028
029import com.jcoverage.reporting.AbstractLine;
030import com.jcoverage.reporting.Column;
031import com.jcoverage.reporting.Line;
032import com.jcoverage.reporting.Page;
033
034/**
035 *
036 */
037public class OverallSummaryLine extends AbstractLine implements Line {
038  
039  static Logger logger=Logger.getLogger(OverallSummaryLine.class);
040  
041  public static Column COLUMN_TOTAL_JAVAFILES=new Column("files",Integer.class);
042  public static Column COLUMN_TOTAL_LINES=new Column("lines",Integer.class);
043  public static Column COLUMN_AVERAGE_COVERAGE=new Column("",Double.class);
044  public static Column COLUMN_AVERAGE_COVERAGE_PERCENT=new Column("%line",Integer.class);
045  public static Column COLUMN_BRANCH_AVERAGE_COVERAGE=new Column("",Double.class);
046  public static Column COLUMN_BRANCH_AVERAGE_COVERAGE_PERCENT=new Column("%branch",Integer.class);
047  
048  public Page instantiateDetailPage() {
049    return new ReportSummaryPage();
050  }
051
052  public Object getField(Column column) {
053
054    Object o=super.getField(column);
055
056    if (column.equals(COLUMN_TOTAL_LINES)) {
057      return new Integer(getTotalLines());
058      
059    } else if (column.equals(COLUMN_AVERAGE_COVERAGE)) {
060      return new Double(getAverageLineCoverageRate());
061
062    } else if (column.equals(COLUMN_AVERAGE_COVERAGE_PERCENT)) {
063      return new Integer(FieldHelper.toPercent(getAverageLineCoverageRate()));
064
065    } else if (column.equals(COLUMN_BRANCH_AVERAGE_COVERAGE)) {
066      return new Double(getAverageBranchCoverageRate());
067
068    } else if (column.equals(COLUMN_BRANCH_AVERAGE_COVERAGE_PERCENT)) {
069      return new Integer(FieldHelper.toPercent(getAverageBranchCoverageRate()));
070
071    } else if (column.equals(COLUMN_TOTAL_JAVAFILES)) {
072      return new Integer(getTotalJavaFiles());
073
074    } else {
075      return o;
076
077    }
078  }
079
080  double getAverageLineCoverageRate() {
081    int totalLines=0;
082    int coveredLines=0;
083    for (Iterator it=getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).iterator();it.hasNext();) {
084      Line line=(Line)it.next();
085      int sourceLineCount=((Integer)line.getField(ReportSummaryPackageLine.COLUMN_TOTAL_LINES)).intValue();
086      totalLines+=sourceLineCount;
087      double rate=((Double)line.getField(ReportSummaryPackageLine.COLUMN_AVERAGE_COVERAGE)).doubleValue();
088      coveredLines+=(int)(sourceLineCount*rate);
089    }
090
091    if (totalLines==0) {
092      return 1d;
093    } else {
094      return (double)coveredLines/totalLines;
095    }
096  }
097  
098  double getAverageBranchCoverageRate() {
099    if(getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).size()==0) {
100      return 0d;
101    }
102
103    double total=0d;
104
105    for (Iterator it=getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).iterator();it.hasNext();) {
106      Line line=(Line)it.next();
107      total+=((Double)line.getField(ReportSummaryPackageLine.COLUMN_BRANCH_AVERAGE_COVERAGE)).doubleValue();
108    }
109
110    return total/getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).size();
111  }
112
113  int getTotalLines() {
114    int totalLines=0;
115    for (Iterator it=getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).iterator();it.hasNext();) {
116      Line line=(Line)it.next();
117      totalLines+=((Integer)line.getField(ReportSummaryPackageLine.COLUMN_TOTAL_LINES)).intValue();
118    }
119    return totalLines;
120  }
121
122  int getTotalJavaFiles() {
123    int totalFiles=0;
124    for (Iterator it=getDetailPage().getLines(ReportSummaryPage.CATEGORY_PACKAGE_SUMMARY).iterator();it.hasNext();) {
125      Line line=(Line)it.next();
126      totalFiles+=((Integer)line.getField(ReportSummaryPackageLine.COLUMN_TOTAL_JAVAFILES)).intValue();
127    }
128    return totalFiles;
129  }
130
131}