View Javadoc
1   package org.apache.maven.artifact;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  /**
23   * Type safe reincarnation of Artifact scope. Also supplies the {@code DEFAULT_SCOPE} as well
24   * as convenience method to deal with scope relationships.
25   *
26   * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
27   *
28   */
29  
30  public enum ArtifactScopeEnum
31  {
32      compile( 1 ), test( 2 ), runtime( 3 ), provided( 4 ), system( 5 ), runtime_plus_system( 6 );
33  
34      public static final ArtifactScopeEnum DEFAULT_SCOPE = compile;
35  
36      private int id;
37  
38      // Constructor
39      ArtifactScopeEnum( int id )
40      {
41          this.id = id;
42      }
43  
44      int getId()
45      {
46          return id;
47      }
48  
49  
50      /**
51       * Helper method to simplify null processing
52       *
53       * @param scope a scope or {@code null}
54       * @return the provided scope or DEFAULT_SCOPE
55       */
56      public static ArtifactScopeEnum checkScope( ArtifactScopeEnum scope )
57      {
58          return scope == null ? DEFAULT_SCOPE : scope;
59      }
60  
61      /**
62       *
63       * @return unsafe String representation of this scope.
64       */
65      public String getScope()
66      {
67          if ( id == 1 )
68          {
69              return Artifact.SCOPE_COMPILE;
70          }
71          else if ( id == 2 )
72          {
73              return Artifact.SCOPE_TEST;
74  
75          }
76          else if ( id == 3 )
77          {
78              return Artifact.SCOPE_RUNTIME;
79  
80          }
81          else if ( id == 4 )
82          {
83              return Artifact.SCOPE_PROVIDED;
84          }
85          else if ( id == 5 )
86          {
87              return Artifact.SCOPE_SYSTEM;
88          }
89          else
90          {
91              return Artifact.SCOPE_RUNTIME_PLUS_SYSTEM;
92          }
93      }
94  
95      private static final ArtifactScopeEnum [][][] COMPLIANCY_SETS = {
96            { { compile  }, { compile,                provided, system } }
97          , { { test     }, { compile, test,          provided, system } }
98          , { { runtime  }, { compile,       runtime,           system } }
99          , { { provided }, { compile, test,          provided         } }
100     };
101 
102     /**
103      * scope relationship function. Used by the graph conflict resolution policies
104      *
105      * @param scope a scope
106      * @return true is supplied scope is an inclusive sub-scope of current one.
107      */
108     public boolean encloses( ArtifactScopeEnum scope )
109     {
110         final ArtifactScopeEnum s = checkScope( scope );
111 
112         // system scope is historic only - and simple
113         if ( id == system.id )
114         {
115             return scope.id == system.id;
116         }
117 
118         for ( ArtifactScopeEnum[][] set : COMPLIANCY_SETS )
119         {
120             if ( id == set[0][0].id )
121             {
122                 for ( ArtifactScopeEnum ase : set[1] )
123                 {
124                     if ( s.id == ase.id )
125                     {
126                         return true;
127                     }
128                 }
129                 break;
130             }
131         }
132         return false;
133     }
134 }