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.collation; 024 025 import java.util.Iterator; 026 027 import org.apache.log4j.Logger; 028 029 import com.jcoverage.reporting.AbstractLine; 030 import com.jcoverage.reporting.Column; 031 import com.jcoverage.reporting.Line; 032 import com.jcoverage.reporting.Page; 033 034 /** 035 * 036 */ 037 public 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 }