All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.util.OperatingSystem Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.flink.util;

import org.apache.flink.annotation.Internal;

/**
 * An enumeration indicating the operating system that the JVM runs on.
 */
@Internal
public enum OperatingSystem {

	LINUX,
	WINDOWS,
	MAC_OS,
	FREE_BSD,
	SOLARIS,
	UNKNOWN;

	// ------------------------------------------------------------------------

	/**
	 * Gets the operating system that the JVM runs on from the java system properties.
	 * this method returns UNKNOWN, if the operating system was not successfully determined.
	 *
	 * @return The enum constant for the operating system, or UNKNOWN, if it was not possible to determine.
	 */
	public static OperatingSystem getCurrentOperatingSystem() {
		return os;
	}

	/**
	 * Checks whether the operating system this JVM runs on is Windows.
	 *
	 * @return true if the operating system this JVM runs on is
	 *         Windows, false otherwise
	 */
	public static boolean isWindows() {
		return getCurrentOperatingSystem() == WINDOWS;
	}

	/**
	 * Checks whether the operating system this JVM runs on is Linux.
	 *
	 * @return true if the operating system this JVM runs on is
	 *         Linux, false otherwise
	 */
	public static boolean isLinux() {
		return getCurrentOperatingSystem() == LINUX;
	}

	/**
	 * Checks whether the operating system this JVM runs on is Windows.
	 *
	 * @return true if the operating system this JVM runs on is
	 *         Windows, false otherwise
	 */
	public static boolean isMac() {
		return getCurrentOperatingSystem() == MAC_OS;
	}

	/**
	 * Checks whether the operating system this JVM runs on is FreeBSD.
	 *
	 * @return true if the operating system this JVM runs on is
	 *         FreeBSD, false otherwise
	 */
	public static boolean isFreeBSD() {
		return getCurrentOperatingSystem() == FREE_BSD;
	}

	/**
	 * Checks whether the operating system this JVM runs on is Solaris.
	 *
	 * @return true if the operating system this JVM runs on is
	 *         Solaris, false otherwise
	 */
	public static boolean isSolaris() {
		return getCurrentOperatingSystem() == SOLARIS;
	}

	/**
	 * The enum constant for the operating system.
	 */
	private static final OperatingSystem os = readOSFromSystemProperties();

	/**
	 * Parses the operating system that the JVM runs on from the java system properties.
	 * If the operating system was not successfully determined, this method returns {@code UNKNOWN}.
	 *
	 * @return The enum constant for the operating system, or {@code UNKNOWN}, if it was not possible to determine.
	 */
	private static OperatingSystem readOSFromSystemProperties() {
		String osName = System.getProperty(OS_KEY);

		if (osName.startsWith(LINUX_OS_PREFIX)) {
			return LINUX;
		}
		if (osName.startsWith(WINDOWS_OS_PREFIX)) {
			return WINDOWS;
		}
		if (osName.startsWith(MAC_OS_PREFIX)) {
			return MAC_OS;
		}
		if (osName.startsWith(FREEBSD_OS_PREFIX)) {
			return FREE_BSD;
		}
		String osNameLowerCase = osName.toLowerCase();
		if (osNameLowerCase.contains(SOLARIS_OS_INFIX_1) || osNameLowerCase.contains(SOLARIS_OS_INFIX_2)) {
			return SOLARIS;
		}

		return UNKNOWN;
	}

	// --------------------------------------------------------------------------------------------
	//  Constants to extract the OS type from the java environment
	// --------------------------------------------------------------------------------------------

	/**
	 * The key to extract the operating system name from the system properties.
	 */
	private static final String OS_KEY = "os.name";

	/**
	 * The expected prefix for Linux operating systems.
	 */
	private static final String LINUX_OS_PREFIX = "Linux";

	/**
	 * The expected prefix for Windows operating systems.
	 */
	private static final String WINDOWS_OS_PREFIX = "Windows";

	/**
	 * The expected prefix for Mac OS operating systems.
	 */
	private static final String MAC_OS_PREFIX = "Mac";

	/**
	 * The expected prefix for FreeBSD.
	 */
	private static final String FREEBSD_OS_PREFIX = "FreeBSD";

	/**
	 * One expected infix for Solaris.
	 */
	private static final String SOLARIS_OS_INFIX_1 = "sunos";

	/**
	 * One expected infix for Solaris.
	 */
	private static final String SOLARIS_OS_INFIX_2 = "solaris";
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy