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 }