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

COVERAGE SUMMARY FOR SOURCE FILE [ThresholdTimerLevel.java]

nameclass, %method, %block, %line, %
ThresholdTimerLevel.java100% (1/1)100% (5/5)100% (60/60)100% (16/16)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ThresholdTimerLevel100% (1/1)100% (5/5)100% (60/60)100% (16/16)
ThresholdTimerLevel (Enum): void 100% (1/1)100% (10/10)100% (4/4)
getGroup (): Object 100% (1/1)100% (3/3)100% (1/1)
getLevelType (): TimerLevelType 100% (1/1)100% (2/2)100% (1/1)
isEnabled (TimerLevel []): boolean 100% (1/1)100% (24/24)100% (4/4)
isEnabled (TimerLevel): boolean 100% (1/1)100% (21/21)100% (6/6)

1package net.digitaltsunami.tmeter.level;
2 
3/**
4 * {@link TimerLevel} representing a {@link TimerLevelType#THRESHOLD} type
5 * backed by an enumeration. Timer levels of this type are threshold and will be
6 * active only on a match equal to or above the backing enumeration.
7 * <p>
8 * As an example, use of an enum of type TLevel with values: MAIN, and DETAIL.
9 * If a {@link CategoryTimerLevel} is created by using
10 * 
11 * <pre>
12 * <code>
13 *     enum TLevel {MAIN,DETAIL;}
14 *     public static final TimerLevel MAIN = new CategoryTimerLevel<TLevel>(TLevel.MAIN);
15 *     public static final TimerLevel DETAIL = new CategoryTimerLevel<TLevel>(TLevel.DETAIL);
16 * </code>
17 * </pre>
18 * 
19 * Usage:
20 * 
21 * <pre>
22 * <code>
23 *  TimeTracker.enableTimerLevel(MAIN);
24 *  Timer tLogin = TimeTracker.startRecording(MAIN, "Login");
25 *  Timer tSession = TimeTracker.startRecording(DETAIL, "CheckExistingSession");  // Would not be recorded
26 * </code>
27 * </pre>
28 * 
29 * Another method is to create an enum that extends {@link TimerLevel} and uses
30 * this CategoryTimerLevel to provide the implementation.
31 * 
32 * <pre>
33 * <code>
34 *  public enum TrackLevel implements TimerLevel {
35 *      MAIN(),
36 *      DETAIL();
37 * 
38 *      CategoryTimerLevel<TrackLevel> timerLevel;
39 * 
40 *      TrackLevel() { timerLevel = new CategoryTimerLevel<TrackLevel>(this); }
41 *      public boolean isEnabled(TimerLevel level) { return timerLevel.isEnabled(level); }
42 *      public boolean isEnabled(TimerLevel... levels) { return timerLevel.isEnabled(levels); }
43 *      public TimerLevelType getLevelType() { return timerLevel.getLevelType(); }
44 *      public Object getGroup() { return timerLevel.getGroup(); }
45 *  }
46 * </code>
47 * </pre>
48 * 
49 * Usage:
50 * 
51 * <pre>
52 * <code>
53 *  TimeTracker.enableTimerLevel(TrackLevel.MAIN);
54 *  Timer tLogin = TimeTracker.startRecording(TrackLevel.MAIN, "Login");
55 *  Timer tSession = TimeTracker.startRecording(TrackLevel.DETAIL, "CheckExistingSession");  // Would not be recorded
56 * </code>
57 * </pre>
58 * 
59 * @author dhagberg
60 * 
61 */
62public class ThresholdTimerLevel<E extends Enum<E>> implements TimerLevel {
63 
64    private E level;
65    private Class<Enum<E>> enumClass;
66 
67    @SuppressWarnings("unchecked")
68    public ThresholdTimerLevel(E level) {
69        this.level = level;
70        this.enumClass = (Class<Enum<E>>) level.getClass();
71    }
72 
73    @SuppressWarnings("unchecked")
74    @Override
75    public boolean isEnabled(TimerLevel oLevel) {
76        if (oLevel instanceof ThresholdTimerLevel<?>) {
77            Enum<?> oLevelLevel = ((ThresholdTimerLevel<?>) oLevel).level;
78            if (oLevelLevel.getClass() == this.enumClass) {
79                if (this.level.compareTo((E) oLevelLevel) >= 0) {
80                    return true;
81                }
82            }
83        }
84        return false;
85    }
86 
87    @Override
88    public boolean isEnabled(TimerLevel... oLevels) {
89        for (TimerLevel oLevel : oLevels) {
90            if (isEnabled(oLevel)) {
91                return true;
92            }
93        }
94        return false;
95    }
96 
97    @Override
98    public TimerLevelType getLevelType() {
99        return TimerLevelType.THRESHOLD;
100    }
101 
102    @Override
103    public Object getGroup() {
104        return enumClass;
105    }
106 
107}

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