/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
* Portions Copyright 2014 ForgeRock AS
*/
package com.forgerock.opendj.util;
/**
* This class defines an enumeration that may be used to identify the operating system
* on which the JVM is running.
*/
public enum OperatingSystem {
/**
* The value indicating the AIX operating system.
*/
AIX("AIX", false, false, true),
/**
* The value indicating the FreeBSD operating system.
*/
FREEBSD("FreeBSD", false, false, true),
/**
* The value indicating the HP-UX operating system.
*/
HPUX("HP UX", false, false, true),
/**
* The value indicating the Linux operating system.
*/
LINUX("Linux", false, false, true),
/**
* The value indicating the Mac OS X operating system.
*/
MACOSX("Mac OS X", false, true, true),
/**
* The value indicating the Solaris operating system.
*/
SOLARIS("Solaris", false, false, true),
/**
* The value indicating the Windows operating system.
*/
WINDOWS("Windows", true, false, false),
/**
* The value indicating the Windows 7 operating system.
*/
WINDOWS7("Windows 7", true, false, false),
/**
* The value indicating the Windows Vista operating system.
*/
WINDOWS_VISTA("Windows Vista", true, false, false),
/**
* The value indicating the Windows Server 2008 operating system.
*/
WINDOWS_SERVER_2008("Server 2008", true, false, false),
/**
* The value indicating the z/OS operating system.
*/
ZOS("z/OS", false, false, false),
/**
* The value indicating an unknown operating system.
*/
UNKNOWN("Unknown", false, false, false);
// The human-readable name for this operating system.
private String osName;
private boolean isWindows;
private boolean isMacOS;
private boolean isUnixBased;
private static OperatingSystem os;
/**
* Creates a new operating system value with the provided name.
*
* @param osName
* The human-readable name for the operating system.
*/
private OperatingSystem(String osName, boolean isWindows, boolean isMacOS, boolean isUnixBased) {
this.osName = osName;
this.isWindows = isWindows;
this.isMacOS = isMacOS;
this.isUnixBased = isUnixBased;
}
/**
* Retrieves the human-readable name of this operating system.
*
* @return The human-readable name for this operating system.
*/
public String toString() {
return osName;
}
/**
* Retrieves the operating system for the provided name.
*
* @param osName
* The name for which to retrieve the corresponding operating system.
* @return The operating system for the provided name.
*/
public static OperatingSystem forName(final String osName) {
return os = forName2(osName);
}
private static OperatingSystem forName2(final String osName) {
if (osName == null) {
return UNKNOWN;
}
final String lowerName = osName.toLowerCase();
if ((lowerName.indexOf("solaris") >= 0) || (lowerName.indexOf("sunos") >= 0)) {
return SOLARIS;
} else if (lowerName.indexOf("linux") >= 0) {
return LINUX;
} else if ((lowerName.indexOf("hp-ux") >= 0) || (lowerName.indexOf("hp ux") >= 0)
|| (lowerName.indexOf("hpux") >= 0)) {
return HPUX;
} else if (lowerName.indexOf("aix") >= 0) {
return AIX;
} else if (lowerName.indexOf("windows") >= 0) {
if (lowerName.indexOf("windows 7") != -1) {
return WINDOWS7;
} else if (lowerName.indexOf("vista") != -1) {
return WINDOWS_VISTA;
} else if (lowerName.indexOf("server 2008") != -1) {
return WINDOWS_SERVER_2008;
}
return WINDOWS;
} else if ((lowerName.indexOf("freebsd") >= 0) || (lowerName.indexOf("free bsd") >= 0)) {
return FREEBSD;
} else if ((lowerName.indexOf("macos x") >= 0) || (lowerName.indexOf("mac os x") >= 0)) {
return MACOSX;
} else if (lowerName.indexOf("z/os") >= 0) {
return ZOS;
}
return UNKNOWN;
}
/**
* Indicates whether the provided operating system is UNIX-based. UNIX-based operating systems include Solaris,
* Linux, HP-UX, AIX, FreeBSD, and Mac OS X.
*
* @param os
* The operating system for which to make the determination.
* @return true if the provided operating system is UNIX-based, or false if not.
*/
public static boolean isUNIXBased(OperatingSystem os) {
return os.isUnixBased;
}
/**
* Returns the operating system on which the JVM is running.
*
* @return The operating system on which the JVM is running
*/
public static OperatingSystem getOperatingSystem() {
return OperatingSystem.forName(System.getProperty("os.name"));
}
/**
* Indicates whether the underlying operating system is a Windows variant.
*
* @return {@code true} if the underlying operating system is a Windows variant, or {@code false} if not.
*/
public static boolean isWindows() {
return os.isWindows;
}
/**
* Indicates whether the underlying operating system is Windows Vista.
*
* @return {@code true} if the underlying operating system is Windows Vista, or {@code false} if not.
*/
public static boolean isVista() {
return os == WINDOWS_VISTA;
}
/**
* Indicates whether the underlying operating system is Windows 2008.
*
* @return {@code true} if the underlying operating system is Windows 2008, or {@code false} if not.
*/
public static boolean isWindows2008() {
return os == WINDOWS_SERVER_2008;
}
/**
* Indicates whether the underlying operating system is Windows 7.
*
* @return {@code true} if the underlying operating system is Windows 7, or {@code false} if not.
*/
public static boolean isWindows7() {
return os == WINDOWS7;
}
/**
* Returns {@code true} if we are running under Mac OS and {@code false} otherwise.
*
* @return {@code true} if we are running under Mac OS and {@code false} otherwise.
*/
public static boolean isMacOS() {
return os == MACOSX;
}
/**
* Returns {@code true} if we are running under Unix and {@code false} otherwise.
*
* @return {@code true} if we are running under Unix and {@code false} otherwise.
*/
public static boolean isUnix() {
return os.isUnixBased;
}
/**
* Returns {@code true} if the OS is Unix based.
*
* @return {@code true} if the OS is Unix based.
*/
public static boolean isUnixBased() {
return os.isUnixBased;
}
/**
* Returns {@code true} if the OS is Unknown.
*
* @return {@code true} if the OS is Unknown.
*/
public static boolean isUnknown() {
return os == UNKNOWN;
}
/**
* Indicates whether the underlying operating system has UAC (User Access Control).
*
* @return {@code true} if the underlying operating system has UAC (User Access Control), or {@code false} if not.
*/
public static boolean hasUAC() {
return isVista() || isWindows2008() || isWindows7();
}
}