package org.fandev.utils; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.SystemInfo; import static com.intellij.openapi.util.io.FileUtil.toSystemDependentName; import com.intellij.openapi.vfs.VirtualFileManager; import org.fandev.lang.fan.FanBundle; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.StringTokenizer; /** * Created by IntelliJ IDEA. * * @author: Roman Chernyatchik * @date: Nov 12, 2007 */ public class OSUtil { private static final String UNIX_PATH_NAME = "PATH"; private static final String WINDOWS_PATH_NAME = "Path"; //svn private static final String SVN_DEFAULT_UNIX_PATH = "/usr/bin"; private static final String SVN_DEFAULT_MAC_PATH = "/usr/local/bin"; private static final String SVN_DEFAULT_WIN_PATH = "c:"; private static final Logger LOG = Logger.getInstance(OSUtil.class.getName()); @Nullable public static String getPATHenvVariableName() { if (SystemInfo.isWindows) { return WINDOWS_PATH_NAME; } if (SystemInfo.isUnix){ return UNIX_PATH_NAME; } LOG.error(FanBundle.message("os.not.supported")); return null; } public static String appendToPATHenvVariable(@Nullable final String path, @NotNull final String additionalPath) { final String pathValue; if (TextUtil.isEmpty(path)) { pathValue = additionalPath; } else { pathValue = path + File.pathSeparatorChar + additionalPath; } return toSystemDependentName(pathValue); } @NotNull public static String getDefaultSVNPath() { if (SystemInfo.isWindows) { return SVN_DEFAULT_WIN_PATH; } if (SystemInfo.isMac) { return SVN_DEFAULT_MAC_PATH; } if (SystemInfo.isUnix){ return SVN_DEFAULT_UNIX_PATH; } LOG.error(FanBundle.message("os.not.supported")); return ""; } public static String getIdeaSystemPath() { return System.getenv().get(OSUtil.getPATHenvVariableName()); } /** * Finds executable by name in standart path environment * @param exeName executable name, gem for example * @return path if found */ @Nullable public static String findExecutableByName(@NotNull final String exeName){ final String path = getIdeaSystemPath(); final VirtualFileManager manager = VirtualFileManager.getInstance(); if (path!=null){ final StringTokenizer st = new StringTokenizer(path, File.pathSeparator); //tokens - are pathes with system-dependent slashes while (st.hasMoreTokens()){ final String s = VirtualFileUtil.convertToVFSPathAndNormalizeSlashes(st.nextToken()); final String possible_path = s + VirtualFileUtil.VFS_PATH_SEPARATOR + exeName; if (manager.findFileByUrl(VirtualFileUtil.constructLocalUrl(possible_path))!=null){ return possible_path; } } } return null; } }