0703dd596a102c9a869249b677398062bf95bb54
[idea/community.git] / jps / model-serialization / src / org / jetbrains / jps / model / serialization / JpsModelSerializationDataService.java
1 /*
2  * Copyright 2000-2012 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 package org.jetbrains.jps.model.serialization;
17
18 import org.jetbrains.annotations.NotNull;
19 import org.jetbrains.annotations.Nullable;
20 import org.jetbrains.jps.model.JpsGlobal;
21 import org.jetbrains.jps.model.JpsProject;
22 import org.jetbrains.jps.model.module.JpsModule;
23 import org.jetbrains.jps.model.serialization.impl.JpsModuleSerializationDataExtensionImpl;
24 import org.jetbrains.jps.model.serialization.impl.JpsPathVariablesConfigurationImpl;
25 import org.jetbrains.jps.model.serialization.impl.JpsProjectSerializationDataExtensionImpl;
26 import org.jetbrains.jps.model.serialization.module.JpsModuleSerializationDataExtension;
27
28 import java.io.File;
29 import java.util.HashMap;
30 import java.util.Map;
31
32 public class JpsModelSerializationDataService {
33   /**
34    * @deprecated use {@link #computeAllPathVariables(JpsGlobal)} instead
35    */
36   @Deprecated
37   @NotNull
38   public static Map<String, String> getAllPathVariables(JpsGlobal global) {
39     return computeAllPathVariables(global);
40   }
41
42   public static Map<String, String> computeAllPathVariables(JpsGlobal global) {
43     Map<String, String> pathVariables = new HashMap<>(PathMacroUtil.getGlobalSystemMacros(false));
44     JpsPathVariablesConfiguration configuration = getPathVariablesConfiguration(global);
45     if (configuration != null) {
46       pathVariables.putAll(configuration.getAllUserVariables());
47     }
48     return pathVariables;
49   }
50
51   @Nullable
52   public static JpsPathVariablesConfiguration getPathVariablesConfiguration(JpsGlobal global) {
53     return global.getContainer().getChild(JpsGlobalLoader.PATH_VARIABLES_ROLE);
54   }
55
56   @NotNull
57   public static JpsPathVariablesConfiguration getOrCreatePathVariablesConfiguration(JpsGlobal global) {
58     JpsPathVariablesConfiguration child = global.getContainer().getChild(JpsGlobalLoader.PATH_VARIABLES_ROLE);
59     if (child == null) {
60       return global.getContainer().setChild(JpsGlobalLoader.PATH_VARIABLES_ROLE, new JpsPathVariablesConfigurationImpl());
61     }
62     return child;
63   }
64
65
66   @Nullable
67   public static JpsProjectSerializationDataExtension getProjectExtension(@NotNull JpsProject project) {
68     return project.getContainer().getChild(JpsProjectSerializationDataExtensionImpl.ROLE);
69   }
70
71   @Nullable
72   public static File getBaseDirectory(@NotNull JpsProject project) {
73     JpsProjectSerializationDataExtension extension = getProjectExtension(project);
74     return extension != null ? extension.getBaseDirectory() : null;
75   }
76
77   @Nullable
78   public static JpsModuleSerializationDataExtension getModuleExtension(@NotNull JpsModule project) {
79     return project.getContainer().getChild(JpsModuleSerializationDataExtensionImpl.ROLE);
80   }
81
82   @Nullable
83   public static File getBaseDirectory(@NotNull JpsModule module) {
84     JpsModuleSerializationDataExtension extension = getModuleExtension(module);
85     return extension != null ? extension.getBaseDirectory() : null;
86   }
87
88   @Nullable
89   public static String getPathVariableValue(@NotNull JpsGlobal global, @NotNull String name) {
90     String value = PathMacroUtil.getGlobalSystemMacroValue(name, false);
91     if (value != null) {
92       return value;
93     }
94     JpsPathVariablesConfiguration configuration = getPathVariablesConfiguration(global);
95     return configuration != null ? configuration.getUserVariableValue(name) : null;
96   }
97 }