8e1f6787a96d65af4f3f5634b428e75fe78e4a32
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / DependencyScope.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.openapi.roots;
18
19 import org.jdom.Element;
20 import org.jetbrains.annotations.NotNull;
21
22 /**
23  * The table below specifies which order entries are used during compilation and runtime.
24  * <table border=1>
25  * <thead><td></td><td>Production<br/>Compile</td><td>Production<br/>Runtime</td>
26  * <td>Test<br/>Compile</td><td>Test<br/>Runtime</td></thead>
27  * <tbody>
28  * <tr><td>{@link #COMPILE}</td>      <td>*</td><td>*</td><td>*</td><td>*</td></tr>
29  * <tr><td>{@link #TEST}</td>         <td> </td><td> </td><td>*</td><td>*</td></tr>
30  * <tr><td>{@link #RUNTIME}</td>      <td> </td><td>*</td><td> </td><td>*</td></tr>
31  * <tr><td>{@link #PROVIDED}</td>     <td>*</td><td> </td><td>*</td><td>*</td></tr>
32  * <tr><td>Production<br/>Output</td> <td> </td><td>*</td><td>*</td><td>*</td></tr>
33  * <tr><td>Test<br/>Output</td>       <td> </td><td> </td><td> </td><td>*</td></tr>
34  * </tbody>
35  * </table>
36  * <br>
37  * 
38  * In order to check whether a dependency should be included in a classpath use one of {@code isFor}
39  * methods instead of direct comparison with the enum constants
40  *
41  * @author yole
42  */
43 public enum DependencyScope {
44   COMPILE("Compile", true, true, true, true),
45   TEST("Test", false, false, true, true),
46   RUNTIME("Runtime", false, true, false, true),
47   PROVIDED("Provided", true, false, true, true);
48   @NotNull
49   private final String myDisplayName;
50   private final boolean myForProductionCompile;
51   private final boolean myForProductionRuntime;
52   private final boolean myForTestCompile;
53   private final boolean myForTestRuntime;
54
55   public static final String SCOPE_ATTR = "scope";
56
57   DependencyScope(@NotNull String displayName,
58                   boolean forProductionCompile,
59                   boolean forProductionRuntime,
60                   boolean forTestCompile,
61                   boolean forTestRuntime) {
62     myDisplayName = displayName;
63     myForProductionCompile = forProductionCompile;
64     myForProductionRuntime = forProductionRuntime;
65     myForTestCompile = forTestCompile;
66     myForTestRuntime = forTestRuntime;
67   }
68
69   @NotNull
70   public static DependencyScope readExternal(@NotNull Element element) {
71     String scope = element.getAttributeValue(SCOPE_ATTR);
72     if (scope != null) {
73       try {
74         return valueOf(scope);
75       }
76       catch (IllegalArgumentException e) {
77         return COMPILE;
78       }
79     }
80     else {
81       return COMPILE;
82     }
83   }
84
85   public void writeExternal(Element element) {
86     if (this != COMPILE) {
87       element.setAttribute(SCOPE_ATTR, name());
88     }
89   }
90
91   @NotNull
92   public String getDisplayName() {
93     return myDisplayName;
94   }
95
96   public boolean isForProductionCompile() {
97     return myForProductionCompile;
98   }
99
100   public boolean isForProductionRuntime() {
101     return myForProductionRuntime;
102   }
103
104   public boolean isForTestCompile() {
105     return myForTestCompile;
106   }
107
108   public boolean isForTestRuntime() {
109     return myForTestRuntime;
110   }
111
112   @Override
113   public String toString() {
114     return myDisplayName;
115   }
116 }