/*
* Copyright 2008-2017 the original author or authors.
*
* Licensed 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 griffon.util;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Locale;
import static griffon.util.GriffonNameUtils.isBlank;
/**
* Assorted utility methods and constants.
*
* @author Andres Almiray
*/
public final class GriffonApplicationUtils {
private GriffonApplicationUtils() {
}
private static final boolean isWindows;
private static final boolean isWindows95;
private static final boolean isWindows98;
private static final boolean isWindowsNT;
private static final boolean isWindows2000;
private static final boolean isWindows2003;
private static final boolean isWindowsXP;
private static final boolean isWindowsVista;
private static final boolean isWindows7;
private static final boolean isWindows8;
private static final boolean isWindows10;
/**
* True if running Linux, Solaris or MacOSX
*/
private static final boolean isUnix;
private static final boolean isLinux;
private static final boolean isSolaris;
private static final boolean isMacOSX;
private static final String osArch;
private static final String osName;
private static final String osVersion;
private static final String javaVersion;
private static final boolean is64Bit;
private static final boolean isJdk4;
private static final boolean isJdk5;
private static final boolean isJdk6;
private static final boolean isJdk7;
private static final boolean isJdk8;
private static final boolean isJdk9;
public static final String platform;
public static final String basePlatform;
static {
osArch = System.getProperty("os.arch");
osName = System.getProperty("os.name");
is64Bit = osArch.contains("64");
if (osName.contains("Windows")) {
basePlatform = "windows";
isWindows = true;
isLinux = false;
isUnix = false;
isMacOSX = false;
isSolaris = false;
if (osName.contains("95")) {
isWindows95 = true;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("98")) {
isWindows95 = false;
isWindows98 = true;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("NT")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = true;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("2003")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = true;
isWindowsXP = true;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("XP")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = true;
isWindows2000 = true;
isWindows2003 = true;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("Vista")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = true;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("Windows 7")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = true;
isWindows8 = false;
isWindows10 = false;
} else if (osName.equals("Windows 8")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = true;
isWindows10 = false;
} else if (osName.equals("Windows 8.1") || osName.equals("Windows 10")) {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = true;
} else {
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
}
} else if (osName.contains("Linux")) {
basePlatform = "linux";
isWindows = false;
isLinux = true;
isUnix = true;
isMacOSX = false;
isSolaris = false;
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("Solaris") || osName.contains("SunOS")) {
basePlatform = "solaris";
isWindows = false;
isLinux = false;
isUnix = true;
isMacOSX = false;
isSolaris = true;
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else if (osName.contains("Mac OS")) {
basePlatform = "macosx";
isWindows = false;
isLinux = false;
isUnix = true;
isMacOSX = true;
isSolaris = false;
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
} else {
basePlatform = "unknown";
isWindows = false;
isLinux = false;
isUnix = false;
isMacOSX = false;
isSolaris = false;
isWindows95 = false;
isWindows98 = false;
isWindowsNT = false;
isWindows2000 = false;
isWindows2003 = false;
isWindowsXP = false;
isWindowsVista = false;
isWindows7 = false;
isWindows8 = false;
isWindows10 = false;
}
osVersion = System.getProperty("os.version");
javaVersion = System.getProperty("java.version");
String version = javaVersion.substring(0, 3);
isJdk4 = true;
if (version.startsWith("9")) {
isJdk9 = true;
isJdk8 = true;
isJdk7 = true;
isJdk6 = true;
isJdk5 = true;
} else {
switch (version) {
case "1.8":
isJdk9 = false;
isJdk8 = true;
isJdk7 = true;
isJdk6 = true;
isJdk5 = true;
break;
case "1.7":
isJdk9 = false;
isJdk8 = false;
isJdk7 = true;
isJdk6 = true;
isJdk5 = true;
break;
case "1.6":
isJdk9 = false;
isJdk8 = false;
isJdk7 = false;
isJdk6 = true;
isJdk5 = true;
break;
case "1.5":
isJdk9 = false;
isJdk8 = false;
isJdk7 = false;
isJdk6 = false;
isJdk5 = true;
break;
default:
isJdk9 = false;
isJdk8 = false;
isJdk7 = false;
isJdk6 = false;
isJdk5 = false;
break;
}
}
platform = basePlatform + (is64Bit && !isSolaris ? "64" : "");
}
public static boolean isWindows() {
return isWindows;
}
public static boolean isWindows95() {
return isWindows95;
}
public static boolean isWindows98() {
return isWindows98;
}
public static boolean isWindowsNT() {
return isWindowsNT;
}
public static boolean isWindows2000() {
return isWindows2000;
}
public static boolean isWindows2003() {
return isWindows2003;
}
public static boolean isWindowsXP() {
return isWindowsXP;
}
public static boolean isWindowsVista() {
return isWindowsVista;
}
public static boolean isWindows7() {
return isWindows7;
}
public static boolean isWindows8() {
return isWindows8;
}
public static boolean isWindows10() {
return isWindows10;
}
public static boolean isUnix() {
return isUnix;
}
public static boolean isLinux() {
return isLinux;
}
public static boolean isSolaris() {
return isSolaris;
}
public static boolean isMacOSX() {
return isMacOSX;
}
public static String getOsArch() {
return osArch;
}
public static String getOsName() {
return osName;
}
public static String getOsVersion() {
return osVersion;
}
public static String getJavaVersion() {
return javaVersion;
}
public static boolean is64Bit() {
return is64Bit;
}
@Deprecated
public static boolean isJdk14() {
return isJdk4();
}
@Deprecated
public static boolean isJdk15() {
return isJdk5();
}
@Deprecated
public static boolean isJdk16() {
return isJdk6();
}
@Deprecated
public static boolean isJdk17() {
return isJdk7();
}
@Deprecated
public static boolean isJdk18() {
return isJdk8();
}
public static boolean isJdk4() {
return isJdk4;
}
public static boolean isJdk5() {
return isJdk5;
}
public static boolean isJdk6() {
return isJdk6;
}
public static boolean isJdk7() {
return isJdk7;
}
public static boolean isJdk8() {
return isJdk8;
}
public static boolean isJdk9() {
return isJdk9;
}
public static String getPlatform() {
return platform;
}
public static String getBasePlatform() {
return basePlatform;
}
public static boolean getIsWindows() {
return isWindows;
}
public static boolean getIsWindows95() {
return isWindows95;
}
public static boolean getIsWindows98() {
return isWindows98;
}
public static boolean getIsWindowsNT() {
return isWindowsNT;
}
public static boolean getIsWindows2000() {
return isWindows2000;
}
public static boolean getIsWindows2003() {
return isWindows2003;
}
public static boolean getIsWindowsXP() {
return isWindowsXP;
}
public static boolean getIsWindowsVista() {
return isWindowsVista;
}
public static boolean getIsWindows7() {
return isWindows7;
}
public static boolean getIsWindows8() {
return isWindows8;
}
public static boolean getIsWindows10() {
return isWindows10;
}
public static boolean getIsUnix() {
return isUnix;
}
public static boolean getIsLinux() {
return isLinux;
}
public static boolean getIsSolaris() {
return isSolaris;
}
public static boolean getIsMacOSX() {
return isMacOSX;
}
public static boolean getIs64Bit() {
return is64Bit;
}
@Deprecated
public static boolean getIsJdk14() {
return isJdk4;
}
@Deprecated
public static boolean getIsJdk15() {
return isJdk5;
}
@Deprecated
public static boolean getIsJdk16() {
return isJdk6;
}
@Deprecated
public static boolean getIsJdk17() {
return isJdk7;
}
@Deprecated
public static boolean getIsJdk18() {
return isJdk8;
}
public static boolean getIsJdk4() {
return isJdk4;
}
public static boolean getIsJdk5() {
return isJdk5;
}
public static boolean getIsJdk6() {
return isJdk6;
}
public static boolean getIsJdk7() {
return isJdk7;
}
public static boolean getIsJdk8() {
return isJdk8;
}
public static boolean getIsJdk9() {
return isJdk9;
}
@Nonnull
@SuppressWarnings("ConstantConditions")
public static Locale parseLocale(@Nullable String locale) {
if (isBlank(locale)) { return Locale.getDefault(); }
String[] parts = locale.split("_");
switch (parts.length) {
case 1:
return new Locale(parts[0]);
case 2:
return new Locale(parts[0], parts[1]);
case 3:
return new Locale(parts[0], parts[1], parts[2]);
default:
return Locale.getDefault();
}
}
}