package org.argeo.util; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; /** When OS specific informations are needed. */ public class OS { public final static OS LOCAL = new OS(); private final String arch, name, version; /** The OS of the running JVM */ protected OS() { arch = System.getProperty("os.arch"); name = System.getProperty("os.name"); version = System.getProperty("os.version"); } public String getArch() { return arch; } public String getName() { return name; } public String getVersion() { return version; } public boolean isMSWindows() { // only MS Windows would use such an horrendous separator... return File.separatorChar == '\\'; } public String[] getDefaultShellCommand() { if (!isMSWindows()) return new String[] { "/bin/bash", "-l", "-i" }; else return new String[] { "cmd.exe", "/C" }; } public static long getJvmPid() { return ProcessHandle.current().pid(); // String pidAndHost = ManagementFactory.getRuntimeMXBean().getName(); // return Integer.parseInt(pidAndHost.substring(0, pidAndHost.indexOf('@'))); } /** * Get the runtime directory. It will be the environment variable * XDG_RUNTIME_DIR if it is set, or ~/.cache/argeo if not. */ public static Path getRunDir() { Path runDir; String xdgRunDir = System.getenv("XDG_RUNTIME_DIR"); if (xdgRunDir != null) { // TODO support multiple names runDir = Paths.get(xdgRunDir); } else { runDir = Paths.get(System.getProperty("user.home"), ".cache/argeo"); } return runDir; } }