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 }