001 /* 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2005 Mark Doliner <thekingant@users.sourceforge.net> 005 * 006 * Cobertura is free software; you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published 008 * by the Free Software Foundation; either version 2 of the License, 009 * or (at your option) any later version. 010 * 011 * Cobertura is distributed in the hope that it will be useful, but 012 * WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Cobertura; if not, write to the Free Software 018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 019 * USA 020 */ 021 022 package net.sourceforge.cobertura.reporting; 023 024 import java.util.Iterator; 025 import java.util.Map; 026 import java.util.TreeMap; 027 028 import net.sourceforge.cobertura.coverage.CoverageData; 029 import net.sourceforge.cobertura.util.ClassHelper; 030 031 public final class Clazz implements Comparable 032 { 033 034 private Map lines; 035 private String packageName; 036 private String name; 037 private CoverageData rawCoverageData; 038 039 private Clazz(String longName) 040 { 041 if (longName == null) 042 { 043 throw new IllegalArgumentException("Class name can not be null."); 044 } 045 lines = new TreeMap(); 046 packageName = ClassHelper.getPackageName(longName); 047 name = ClassHelper.getBaseName(longName); 048 } 049 050 public Clazz(String longName, CoverageData data) { 051 this(longName); 052 053 setRawCoverageData(data); 054 055 Iterator iter = data.getValidLineNumbers().iterator(); 056 while (iter.hasNext()) 057 { 058 int lineNumber = ((Integer)iter.next()).intValue(); 059 long numberOfHits = data.getHitCount(lineNumber); 060 addLine(lineNumber, numberOfHits); 061 } 062 } 063 064 public void addLine(int lineNumber, long numberOfHits) 065 { 066 lines.put(new Integer(lineNumber), new Long(numberOfHits)); 067 } 068 069 /** 070 * Required when implementing Comparable. 071 */ 072 public int compareTo(Object o1) 073 { 074 String longName = getLongName(); 075 String longName2 = ((Clazz)o1).getLongName(); 076 return longName.compareToIgnoreCase(longName2); 077 } 078 079 public double getBranchCoverageRate() 080 { 081 if (getNumberOfBranches() == 0) 082 { 083 if (getNumberOfCoveredLines() == 0) 084 { 085 return 0; 086 } 087 return 1; 088 } 089 return (double)getNumberOfCoveredBranches() / (double)getNumberOfBranches(); 090 } 091 092 public double getLineCoverageRate() 093 { 094 if (getNumberOfLines() == 0) 095 { 096 return 1; 097 } 098 return (double)getNumberOfCoveredLines() / (double)getNumberOfLines(); 099 } 100 101 public String getLongFileName() 102 { 103 if (packageName.length() > 0) 104 { 105 return (packageName + "." + name).replace('.', '/') + ".java"; 106 } 107 return name + ".java"; 108 } 109 110 public String getLongName() 111 { 112 if (packageName.length() > 0) 113 { 114 return packageName + "." + name; 115 } 116 return name; 117 } 118 119 public String getName() 120 { 121 return name; 122 } 123 124 public int getNumberOfBranches() 125 { 126 return getRawCoverageData().getNumberOfValidBranches(); 127 } 128 129 public int getNumberOfCoveredBranches() 130 { 131 return getRawCoverageData().getNumberOfCoveredBranches(); 132 } 133 134 public int getNumberOfCoveredLines() 135 { 136 return getRawCoverageData().getNumberOfCoveredLines(); 137 } 138 139 public long getNumberOfHits(int lineNumber) 140 { 141 Long numberOfHits = (Long)lines.get(new Integer(lineNumber)); 142 return numberOfHits.longValue(); 143 } 144 145 public int getNumberOfLines() 146 { 147 return getRawCoverageData().getNumberOfValidLines(); 148 } 149 150 public String getPackageName() 151 { 152 return packageName; 153 } 154 155 public final CoverageData getRawCoverageData() 156 { 157 return rawCoverageData; 158 } 159 160 public boolean isValidSourceLine(int lineNumber) 161 { 162 return lines.containsKey(new Integer(lineNumber)); 163 } 164 165 private final void setRawCoverageData(CoverageData rawCoverageData) 166 { 167 this.rawCoverageData = rawCoverageData; 168 } 169 170 }