replaced <code></code> with more concise {@code}
[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   private final String myDisplayName;
49   private final boolean myForProductionCompile;
50   private final boolean myForProductionRuntime;
51   private final boolean myForTestCompile;
52   private final boolean myForTestRuntime;
53
54   public static final String SCOPE_ATTR = "scope";
55
56   DependencyScope(String displayName,
57                   boolean forProductionCompile,
58                   boolean forProductionRuntime,
59                   boolean forTestCompile,
60                   boolean forTestRuntime) {
61     myDisplayName = displayName;
62     myForProductionCompile = forProductionCompile;
63     myForProductionRuntime = forProductionRuntime;
64     myForTestCompile = forTestCompile;
65     myForTestRuntime = forTestRuntime;
66   }
67
68   @NotNull
69   public static DependencyScope readExternal(@NotNull Element element) {
70     String scope = element.getAttributeValue(SCOPE_ATTR);
71     if (scope != null) {
72       try {
73         return valueOf(scope);
74       }
75       catch (IllegalArgumentException e) {
76         return COMPILE;
77       }
78     }
79     else {
80       return COMPILE;
81     }
82   }
83
84   public void writeExternal(Element element) {
85     if (this != COMPILE) {
86       element.setAttribute(SCOPE_ATTR, name());
87     }
88   }
89
90   public String getDisplayName() {
91     return myDisplayName;
92   }
93
94   public boolean isForProductionCompile() {
95     return myForProductionCompile;
96   }
97
98   public boolean isForProductionRuntime() {
99     return myForProductionRuntime;
100   }
101
102   public boolean isForTestCompile() {
103     return myForTestCompile;
104   }
105
106   public boolean isForTestRuntime() {
107     return myForTestRuntime;
108   }
109
110   @Override
111   public String toString() {
112     return myDisplayName;
113   }
114 }