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 }