From e37afe48f773ece5a7184fc2917439fde374879d Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Wed, 25 Apr 2018 18:28:51 +0200 Subject: [PATCH] Implement cache for is*() predicates - Methods can be used in UI to implement OS-specific workarounds - Better avoid extensive querying of system properties and environment Issue-Ref: 2443 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../org/fortiss/tooling/base/utils/.ratings | 2 +- .../tooling/base/utils/SystemUtils.java | 48 ++++++++++++++++--- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings index 1904c50db..386500d45 100644 --- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings +++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings @@ -13,6 +13,6 @@ PointUtils.java b21c92cc8e80ece9d87ede8a750f4de314379743 GREEN PointsUtils.java bad69811c59004948929f6a57edd5a79c0bf8643 GREEN RectangleLayoutUtils.java cdd61d162761da7f3e1d3512264135b9b0d564ff GREEN SnapToGridUtils.java 413785d7a8655db31a129b6f821e1d5f859aa726 GREEN -SystemUtils.java bd40519b5e286f274f47815ccc8d320fd65c2c0a YELLOW +SystemUtils.java 622dd176fa0febc1e92845cb0f988e503cc30efb YELLOW VisualizationModelElementFactory.java 18e67450ee4cf4a03dc88a10becb0fb6ce4c1bad GREEN ZoomUtils.java a339613fde18281bed3b55b529a053d348545bc7 GREEN diff --git a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/SystemUtils.java b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/SystemUtils.java index bd40519b5..622dd176f 100644 --- a/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/SystemUtils.java +++ b/org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/SystemUtils.java @@ -26,37 +26,71 @@ import static java.util.UUID.randomUUID; */ public class SystemUtils { + /** Cache for {@link #isWindowsPlatform()}. */ + private static Boolean isWindowsPlatform = null; + + /** Cache for {@link #isLinuxPlatform()}. */ + private static Boolean isLinuxPlatform = null; + + /** Cache for {@link #isMacOSXPlatform()}. */ + private static Boolean isMacOSXPlatform = null; + + /** Cache for {@link #isVm64BitArch()}. */ + private static Boolean isVm64BitArch; + + /** Cache for {@link #isOs64BitArch()}. */ + private static Boolean isOs64BitArch; + /** Predicate if the current platform is Windows. */ public static boolean isWindowsPlatform() { + if(isWindowsPlatform != null) { + return isWindowsPlatform; + } String osName = System.getProperty("os.name"); - return osName != null && osName.contains("Windows"); + isWindowsPlatform = osName != null && osName.contains("Windows"); + + return isWindowsPlatform; } /** Predicate if the current platform is Linux. */ public static boolean isLinuxPlatform() { + if(isLinuxPlatform != null) { + return isLinuxPlatform; + } String osName = System.getProperty("os.name"); - return osName != null && osName.contains("Linux"); + isLinuxPlatform = osName != null && osName.contains("Linux"); + return isLinuxPlatform; } /** Predicate if the current platform is Mac OS X. */ public static boolean isMacOSXPlatform() { + if(isMacOSXPlatform != null) { + return isMacOSXPlatform; + } String osName = System.getProperty("os.name"); - return osName != null && osName.contains("Mac OS X."); + isMacOSXPlatform = osName != null && osName.contains("Mac OS X."); + return isMacOSXPlatform; } /** Predicate if the current <b>Java VM</b> architecture is 64 bit. */ public static boolean isVm64BitArch() { + if(isVm64BitArch != null) { + return isVm64BitArch; + } String osArch = System.getProperty("os.arch"); - return osArch != null && osArch.contains("64"); + isVm64BitArch = osArch != null && osArch.contains("64"); + return isVm64BitArch; } /** Predicate if the current <b>OS</b> architecture is 64 bit. */ public static boolean isOs64BitArch() { - if(isWindowsPlatform()) { - return System.getenv("ProgramFiles(x86)") != null; + if(isOs64BitArch != null) { + return isOs64BitArch; } - return isVm64BitArch(); + String progFilesX86 = System.getenv("ProgramFiles(x86)"); + isOs64BitArch = isWindowsPlatform() ? progFilesX86 != null : isVm64BitArch(); + return isOs64BitArch; } /** -- GitLab