EMMA Coverage Report (generated Sun Aug 17 11:20:34 PDT 2014)
[all classes][net.digitaltsunami.tmeter.level]

COVERAGE SUMMARY FOR SOURCE FILE [TimerLevelSet.java]

nameclass, %method, %block, %line, %
TimerLevelSet.java100% (2/2)100% (11/11)99%  (250/253)100% (48.9/49)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TimerLevelSet$1100% (1/1)100% (1/1)88%  (23/26)88%  (0.9/1)
<static initializer> 100% (1/1)88%  (23/26)88%  (0.9/1)
     
class TimerLevelSet100% (1/1)100% (10/10)100% (227/227)100% (49/49)
TimerLevelSet (TimerLevel []): void 100% (1/1)100% (28/28)100% (5/5)
addLevel (TimerLevel): TimerLevel 100% (1/1)100% (106/106)100% (25/25)
addLevels (TimerLevel []): boolean 100% (1/1)100% (30/30)100% (4/4)
clear (): void 100% (1/1)100% (4/4)100% (2/2)
getGroup (): Object 100% (1/1)100% (2/2)100% (1/1)
getLevelType (): TimerLevelType 100% (1/1)100% (2/2)100% (1/1)
getLevels (): Set 100% (1/1)100% (6/6)100% (1/1)
isEnabled (TimerLevel []): boolean 100% (1/1)100% (24/24)100% (4/4)
isEnabled (TimerLevel): boolean 100% (1/1)100% (20/20)100% (5/5)
removeLevel (TimerLevel): boolean 100% (1/1)100% (5/5)100% (1/1)

1package net.digitaltsunami.tmeter.level;
2 
3import java.util.HashSet;
4import java.util.Set;
5 
6/**
7 * Set of {@link TimerLevel}s implementing the {@link TimerLevelCollection}.
8 * 
9 * @author dhagberg
10 * 
11 */
12public class TimerLevelSet implements TimerLevelCollection {
13 
14    /**
15     * Set of {@link TimerLevel} instances used as backing store for this collection.
16     */
17    private final Set<TimerLevel> levelSet = new HashSet<TimerLevel>();
18 
19    /**
20     * Add one to many {@link TimerLevel} instances based on the rules specified
21     * in {@link TimerLevelCollection}.
22     * 
23     * @param levels one to many {@link TimerLevel}s to add the set. 
24     */
25    public TimerLevelSet(TimerLevel... levels) {
26        for (TimerLevel level : levels) {
27            addLevel(level);
28        }
29    }
30 
31    /* (non-Javadoc)
32     * @see net.digitaltsunami.tmeter.level.TimerLevelCollection#addLevel(net.digitaltsunami.tmeter.level.TimerLevel)
33     */
34    @Override
35    public TimerLevel addLevel(TimerLevel newLevel) {
36        if (newLevel == null) {
37            return null;
38        }
39        switch (newLevel.getLevelType()) {
40 
41        case CATEGORY:
42                for (TimerLevel level : levelSet) {
43                    if (level.isEnabled(newLevel)) {
44                        return level;
45                    }
46                }
47            levelSet.add(newLevel);
48            return null;
49        
50        case THRESHOLD:
51            TimerLevel oldLevel = null;
52            for (TimerLevel level : levelSet) {
53                if (level.getLevelType() == TimerLevelType.THRESHOLD && level.getGroup() == newLevel.getGroup()) {
54                    levelSet.add(newLevel);
55                    levelSet.remove(level);
56                    oldLevel = level;
57                    // Existing level found and set modified.  Must leave iteration.
58                    break;  
59                }
60            }
61            levelSet.add(newLevel);
62            return oldLevel;
63        case SET:
64            if (newLevel instanceof TimerLevelCollection) {
65                for(TimerLevel levelElem : ((TimerLevelCollection)newLevel).getLevels()) {
66                        this.addLevel(levelElem);
67                }
68            }
69            else {
70                throw new IllegalArgumentException(
71                        "TimerLevels of type Set should implmement TimerLevelCollection");
72            }
73        }
74        return null;
75    }
76 
77    /* (non-Javadoc)
78     * @see net.digitaltsunami.tmeter.level.TimerLevelCollection#addLevels(net.digitaltsunami.tmeter.level.TimerLevel[])
79     */
80    @Override
81    public boolean addLevels(TimerLevel... newLevels) {
82        boolean levelAdded = false;
83        for (TimerLevel newLevel : newLevels) {
84            levelAdded |= addLevel(newLevel) == null;
85        }
86        return levelAdded;
87    }
88 
89    /* (non-Javadoc)
90     * @see net.digitaltsunami.tmeter.level.TimerLevelCollection#removeLevel(net.digitaltsunami.tmeter.level.TimerLevel)
91     */
92    @Override
93    public boolean removeLevel(TimerLevel level) {
94        return levelSet.remove(level);
95    }
96 
97    /* (non-Javadoc)
98     * @see net.digitaltsunami.tmeter.level.TimerLevelCollection#clear()
99     */
100    @Override
101    public void clear() {
102        levelSet.clear();
103    }
104 
105    /* (non-Javadoc)
106     * @see net.digitaltsunami.tmeter.level.TimerLevel#isEnabled(net.digitaltsunami.tmeter.level.TimerLevel)
107     */
108    public boolean isEnabled(TimerLevel oLevel) {
109        for (TimerLevel level : levelSet) {
110            if (level.isEnabled(oLevel)) {
111                return true;
112            }
113        }
114        return false;
115    }
116 
117    /* (non-Javadoc)
118     * @see net.digitaltsunami.tmeter.level.TimerLevel#isEnabled(net.digitaltsunami.tmeter.level.TimerLevel[])
119     */
120    public boolean isEnabled(TimerLevel... oLevels) {
121        for (TimerLevel oLevel : oLevels) {
122            if (isEnabled(oLevel)) {
123                return true;
124            }
125        }
126        return false;
127    }
128 
129    /* (non-Javadoc)
130     * @see net.digitaltsunami.tmeter.level.TimerLevel#getLevelType()
131     */
132    public TimerLevelType getLevelType() {
133        return TimerLevelType.SET;
134    }
135 
136    /* (non-Javadoc)
137     * @see net.digitaltsunami.tmeter.level.TimerLevelCollection#getLevels()
138     */
139    public Set<TimerLevel> getLevels() {
140        // Return a copy of the current level set.
141        return new HashSet<TimerLevel>(levelSet);
142    }
143 
144    /* (non-Javadoc)
145     * @see net.digitaltsunami.tmeter.level.TimerLevel#getGroup()
146     */
147    @Override
148    public Object getGroup() {
149        return this;
150    }
151    
152}

[all classes][net.digitaltsunami.tmeter.level]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov