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.Set; 027 import java.util.TreeMap; 028 import java.util.TreeSet; 029 030 public class Package implements Comparable 031 { 032 033 private String name; 034 private Map classes; 035 036 public Package(String name) 037 { 038 if (name == null) 039 { 040 throw new IllegalArgumentException( 041 "Package name can not be null."); 042 } 043 044 this.name = name; 045 classes = new TreeMap(); 046 } 047 048 public void addClass(Clazz clazz) 049 { 050 if (classes.containsKey(clazz.getName())) 051 { 052 throw new IllegalArgumentException( 053 "This package already contains the class " 054 + clazz.getName()); 055 } 056 classes.put(clazz.getName(), clazz); 057 } 058 059 /** 060 * Required when implementing Comparable. 061 */ 062 public int compareTo(Object o1) 063 { 064 String name1 = ((Package)o1).getName(); 065 return name.compareToIgnoreCase(name1); 066 } 067 068 public double getBranchCoverageRate() 069 { 070 long numberOfBranches = getNumberOfBranches(); 071 if (numberOfBranches == 0) 072 { 073 if (getNumberOfCoveredLines() == 0) 074 return 0; 075 return 1; 076 } 077 return (double)getNumberOfCoveredBranches() 078 / (double)numberOfBranches; 079 } 080 081 public Set getClasses() 082 { 083 return new TreeSet(classes.values()); 084 } 085 086 public String getFileName() 087 { 088 return name.replace('.', '/'); 089 } 090 091 public double getLineCoverageRate() 092 { 093 long numberOfLines = getNumberOfLines(); 094 if (numberOfLines == 0) 095 { 096 return 1; 097 } 098 return (double)getNumberOfCoveredLines() / (double)numberOfLines; 099 } 100 101 public String getName() 102 { 103 return name; 104 } 105 106 public long getNumberOfBranches() 107 { 108 long numberOfBranches = 0; 109 110 Iterator iter = classes.values().iterator(); 111 while (iter.hasNext()) 112 { 113 Clazz clazz = (Clazz)iter.next(); 114 numberOfBranches += clazz.getNumberOfBranches(); 115 } 116 117 return numberOfBranches; 118 } 119 120 public long getNumberOfCoveredBranches() 121 { 122 long numberOfCoveredBranches = 0; 123 124 Iterator iter = classes.values().iterator(); 125 while (iter.hasNext()) 126 { 127 Clazz clazz = (Clazz)iter.next(); 128 numberOfCoveredBranches += clazz.getNumberOfCoveredBranches(); 129 } 130 131 return numberOfCoveredBranches; 132 } 133 134 public long getNumberOfCoveredLines() 135 { 136 long numberOfCoveredLines = 0; 137 138 Iterator iter = classes.values().iterator(); 139 while (iter.hasNext()) 140 { 141 Clazz clazz = (Clazz)iter.next(); 142 numberOfCoveredLines += clazz.getNumberOfCoveredLines(); 143 } 144 145 return numberOfCoveredLines; 146 } 147 148 public long getNumberOfLines() 149 { 150 long numberOfLines = 0; 151 152 Iterator iter = classes.values().iterator(); 153 while (iter.hasNext()) 154 { 155 Clazz clazz = (Clazz)iter.next(); 156 numberOfLines += clazz.getNumberOfLines(); 157 } 158 159 return numberOfLines; 160 } 161 162 public void removeClass(Clazz clazz) 163 { 164 classes.remove(clazz.getName()); 165 } 166 167 }