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