1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.clirr.core;
20
21 import net.sf.clirr.core.spi.Scope;
22 import net.sf.clirr.core.spi.Scoped;
23
24 /***
25 * Selects zero or more java scope values (public, protected, package,
26 * private). An instance of this class is used when comparing two versions
27 * of an application to indicate what items are of interest. When the target
28 * audience is "normal" users of the applications, only changes to items
29 * which have public or protected scope are relevant. When the audience is
30 * developers of the applications, then package-scope and private-scope
31 * changes are also of interest.
32 *
33 * @author Simon Kitching
34 */
35 public final class ScopeSelector
36 {
37 private Scope scope = Scope.PROTECTED;
38
39 /***
40 * Construct an instance which selects public and protected objects and
41 * ignores package and private objects. The selectXXX methods can later
42 * be used to adjust this default behaviour.
43 */
44 public ScopeSelector()
45 {
46 }
47
48 /***
49 * Construct an instance which selects public and protected objects and
50 * ignores package and private objects. The selectXXX methods can later
51 * be used to adjust this default behaviour.
52 */
53 public ScopeSelector(Scope scope)
54 {
55 this.scope = scope;
56 }
57
58 /*** Specify which scope objects are of interest. */
59 public void setScope(Scope scope)
60 {
61 this.scope = scope;
62 }
63
64 /***
65 * Get the scope that this object is configured with.
66 */
67 public Scope getScope()
68 {
69 return scope;
70 }
71
72 /***
73 * Return a string which indicates what scopes this object will consider
74 * to be selected (ie relevant).
75 */
76 public String toString()
77 {
78 return scope.getDesc();
79 }
80
81 /***
82 * Given a scoped object, return true if this object's scope is one of the
83 * values this object is configured to match.
84 *
85 * @param scoped is the object whose scope is to be checked.
86 * @return true if the object is selected.
87 */
88 public boolean isSelected(Scoped scoped)
89 {
90 return !scoped.getEffectiveScope().isLessVisibleThan(scope);
91 }
92
93 /***
94 * Return true if objects of the specified scope, or more visible,
95 * are selected by this selector.
96 *
97 * @param scope is the scope being checked
98 * @return true if objects of the specified scope are selected.
99 */
100 public boolean isSelected(Scope scope)
101 {
102 return !scope.isLessVisibleThan(this.scope);
103 }
104
105 }
106