package it.paspiz85.nanobot.util; import java.util.Locale; import java.util.Scanner; /** * Map operating systems. * * @author paspiz85 * */ public final class OS { /** * Family of operating systems. * * @author paspiz85 * */ public static enum Family { MAC, SOLARIS, UNIX, UNKNOW, WINDOWS } /** * Version of operating systems. * * @author paspiz85 * */ public static class Version { private final String version; private final int major; private final int minor; Version(final String version) { this.version = version; try (Scanner scanner = new Scanner(version)) { scanner.useDelimiter("\\D"); this.major = scanner.nextInt(); this.minor = scanner.nextInt(); } } public int getMajor() { return major; } public int getMinor() { return minor; } @Override public String toString() { return version; } } public static OS getCurrent() { return Utils.singleton(OS.class, () -> new OS()); } private static Family getFamily(final OS os) { Family result = Family.UNKNOW; final String name = os.name.toLowerCase(Locale.ROOT); if (name.indexOf("win") >= 0) { result = Family.WINDOWS; } else if (name.indexOf("mac") >= 0) { result = Family.MAC; } else if (name.indexOf("nix") >= 0 || name.indexOf("nux") >= 0 || name.indexOf("aix") > 0) { result = Family.UNIX; } else if (name.indexOf("sunos") >= 0) { result = Family.SOLARIS; } return result; } private final String arch; private final String name; private final Version version; private final Family family; private OS() { this(System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")); } private OS(final String name, final String version, final String arch) { this.name = name; this.version = new Version(version); this.arch = arch; this.family = getFamily(this); } public String getArch() { return arch; } public Family getFamily() { return family; } public String getName() { return name; } public Version getVersion() { return version; } }