/* * Capsule * Copyright (c) 2014-2015, Parallel Universe Software Co. All rights reserved. * * This program and the accompanying materials are licensed under the terms * of the Eclipse Public License v1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package co.paralleluniverse.capsule; import java.util.Objects; /** * * @author pron */ public final class Platform { private static final String PROP_OS_NAME = "os.name"; public static final String OS_WINDOWS = "windows"; public static final String OS_MACOS = "macos"; public static final String OS_LINUX = "linux"; public static final String OS_SOLARIS = "solaris"; public static final String OS_BSD = "bsd"; public static final String OS_AIX = "aix"; public static final String OS_HP_UX = "hp-ux"; public static final String OS_UNIX = "unix"; public static final String OS_POSIX = "posix"; public static final String OS_VMS = "vms"; private static final Platform MY_PLATFORM = new Platform(System.getProperty(PROP_OS_NAME)); public static Platform myPlatform() { return MY_PLATFORM; } private final String os; private final String platform; public Platform(String os) { this.os = os.toLowerCase(); this.platform = getOS(this.os); } @Override public String toString() { return "Platform{" + "os: " + os + ", platform: " + platform + '}'; } @Override public int hashCode() { int hash = 5; hash = 47 * hash + Objects.hashCode(this.os); return hash; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Platform other = (Platform) obj; if (!Objects.equals(this.os, other.os)) return false; return true; } /** * Tests whether the current OS is Windows. */ @SuppressWarnings("StringEquality") public boolean isWindows() { return platform == OS_WINDOWS; } /** * Tests whether the current OS is MacOS. */ @SuppressWarnings("StringEquality") public boolean isMac() { return platform == OS_MACOS; } /** * Tests whether the current OS is Linux. */ @SuppressWarnings("StringEquality") public boolean isLinux() { return platform == OS_LINUX; } /** * Tests whether the current OS is UNIX/Linux. */ @SuppressWarnings("StringEquality") public boolean isUnix() { return platform == OS_LINUX || platform == OS_SOLARIS || platform == OS_BSD || platform == OS_AIX || platform == OS_HP_UX; } public String getOS() { return platform; } private static String getOS(String os) { if (os.startsWith("windows")) return OS_WINDOWS; if (os.startsWith("mac")) return OS_MACOS; if (os.contains("linux")) return OS_LINUX; if (os.contains("solaris") || os.contains("sunos") || os.contains("illumos")) return OS_SOLARIS; if (os.contains("bsd")) return OS_BSD; if (os.contains("aix")) return OS_AIX; if (os.contains("hp-ux")) return OS_HP_UX; if (os.contains("vms")) return OS_VMS; return null; } /** * The suffix of a native library on this OS. */ public String getNativeLibExtension() { if (isWindows()) return "dll"; if (isMac()) return "dylib"; if (isUnix()) return "so"; throw new RuntimeException("Unsupported operating system: " + System.getProperty(PROP_OS_NAME)); } }