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 }