/* * #%L * gitools-core * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.ui.platform.os; public class SystemInfo { public static final String OS_NAME = System.getProperty("os.name"); public static final String OS_VERSION = System.getProperty("os.version").toLowerCase(); public static final String JAVA_RUNTIME_VERSION = System.getProperty("java.runtime.version"); protected static final String _OS_NAME = OS_NAME.toLowerCase(); public static final boolean isWindows = _OS_NAME.startsWith("windows"); public static final boolean isOS2 = _OS_NAME.startsWith("os/2") || _OS_NAME.startsWith("os2"); public static final boolean isMac = _OS_NAME.startsWith("mac"); public static final boolean isLinux = _OS_NAME.startsWith("linux"); public static final boolean isUnix = !isWindows && !isOS2; public static final boolean isFileSystemCaseSensitive = isUnix && !isMac; public static final boolean isXWindow = isUnix && !isMac; public static final boolean isMacOSLeopard = isMac && isOsVersionAtLeast("10.5"); public static final boolean isMacOSLion = isMac && isOsVersionAtLeast("10.7"); public static final boolean isWinVistaOrNewer = isWindows && isOsVersionAtLeast("6.0"); public static boolean isJavaVersionAtLeast(String v) { return compareVersionNumbers(JAVA_RUNTIME_VERSION, v) >= 0; } public static boolean isOsVersionAtLeast(String version) { return compareVersionNumbers(OS_VERSION, version) >= 0; } public static int compareVersionNumbers(String v1, String v2) { if (v1 == null && v2 == null) { return 0; } if (v1 == null) { return -1; } if (v2 == null) { return 1; } String[] part1 = v1.split("[\\.\\_\\-]"); String[] part2 = v2.split("[\\.\\_\\-]"); int idx = 0; for (; idx < part1.length && idx < part2.length; idx++) { String p1 = part1[idx]; String p2 = part2[idx]; int cmp; if (p1.matches("\\d+") && p2.matches("\\d+")) { cmp = new Integer(p1).compareTo(new Integer(p2)); } else { cmp = part1[idx].compareTo(part2[idx]); } if (cmp != 0) return cmp; } if (part1.length == part2.length) { return 0; } else { boolean left = part1.length > idx; String[] parts = left ? part1 : part2; for (; idx < parts.length; idx++) { String p = parts[idx]; int cmp; if (p.matches("\\d+")) { cmp = new Integer(p).compareTo(0); } else { cmp = 1; } if (cmp != 0) return left ? cmp : -cmp; } return 0; } } }