/* * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.jps.model.serialization; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.PathUtilRt; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Map; import static com.intellij.openapi.util.io.FileUtilRt.toSystemIndependentName; /** * @author nik */ public class PathMacroUtil { @NonNls public static final String PROJECT_DIR_MACRO_NAME = "PROJECT_DIR"; @NonNls public static final String MODULE_DIR_MACRO_NAME = "MODULE_DIR"; @NonNls public static final String DIRECTORY_STORE_NAME = ".idea"; @NonNls public static final String APPLICATION_HOME_DIR = "APPLICATION_HOME_DIR"; @NonNls public static final String APPLICATION_CONFIG_DIR = "APPLICATION_CONFIG_DIR"; @NonNls public static final String APPLICATION_PLUGINS_DIR = "APPLICATION_PLUGINS_DIR"; @NonNls public static final String USER_HOME_NAME = "USER_HOME"; private static final Map<String, String> ourGlobalMacros = ContainerUtil.<String, String>immutableMapBuilder() .put(APPLICATION_HOME_DIR, toSystemIndependentName(PathManager.getHomePath())) .put(APPLICATION_CONFIG_DIR, toSystemIndependentName(PathManager.getConfigPath())) .put(APPLICATION_PLUGINS_DIR, toSystemIndependentName(PathManager.getPluginsPath())) .put(USER_HOME_NAME, StringUtil.trimEnd(toSystemIndependentName(SystemProperties.getUserHome()), "/")).build(); @Nullable public static String getModuleDir(@NotNull String moduleFilePath) { String moduleDir = PathUtilRt.getParentPath(moduleFilePath); if (StringUtil.isEmpty(moduleDir)) { return null; } // hack so that, if a module is stored inside the .idea directory, the base directory // rather than the .idea directory itself is considered the module root // (so that a Ruby IDE project doesn't break if its directory is moved together with the .idea directory) String moduleDirParent = PathUtilRt.getParentPath(moduleDir); if (!StringUtil.isEmpty(moduleDirParent) && PathUtilRt.getFileName(moduleDir).equals(DIRECTORY_STORE_NAME)) { moduleDir = moduleDirParent; } moduleDir = toSystemIndependentName(moduleDir); if (moduleDir.endsWith(":/")) { moduleDir = moduleDir.substring(0, moduleDir.length() - 1); } return moduleDir; } @NotNull public static String getUserHomePath() { return ObjectUtils.assertNotNull(getGlobalSystemMacroValue(USER_HOME_NAME)); } @NotNull public static Map<String, String> getGlobalSystemMacros() { return ourGlobalMacros; } @Nullable public static String getGlobalSystemMacroValue(String name) { return ourGlobalMacros.get(name); } }