/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.common;
import org.apache.commons.logging.LogFactory;
/**
* Enumeration for operating system "families". Also provides a convenience method to determine the OS family the local instance is running
* on.
*
* @author Sascha Zur
* @author Robert Mischke
*/
public enum OSFamily {
/**
* All kinds of Microsoft Windows OSs.
*/
Windows,
/**
* All kinds of unix, linux, apple, solaris and so on.
*/
Linux,
/**
* Default when nothing was selected.
*/
Unspecified;
/**
* Holder class that is initialized on first access; required because of enum initialization order rules.
*
* @author Robert Mischke
*/
private static class InitializationHolder {
private static final OSFamily LOCAL_OS_FAMILY;
static {
// TODO review: is the fallback mechanism necessary and reliable? - misc_ro
final String os = System.getProperty("os.name", "Linux" /* fallback */);
if (os.startsWith("Windows")) {
LOCAL_OS_FAMILY = Windows;
} else if (os.toLowerCase().indexOf("linux") >= 0) {
LOCAL_OS_FAMILY = OSFamily.Linux;
} else {
LOCAL_OS_FAMILY = Unspecified;
LogFactory.getLog(OSFamily.class).warn("Local operating system family not recognized, setting to " + LOCAL_OS_FAMILY);
}
}
}
public static OSFamily getLocal() {
return InitializationHolder.LOCAL_OS_FAMILY;
}
public static boolean isWindows() {
return InitializationHolder.LOCAL_OS_FAMILY == Windows;
}
public static boolean isLinux() {
return InitializationHolder.LOCAL_OS_FAMILY == Linux;
}
}