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    }