View Javadoc

1   //////////////////////////////////////////////////////////////////////////////
2   // Clirr: compares two versions of a java library for binary compatibility
3   // Copyright (C) 2003 - 2005  Lars Kühne
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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