commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <GGreg...@seagullsoftware.com>
Subject RE: svn commit: r949140 [2/3] - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/SystemUtils.java test/java/org/apache/commons/lang3/SystemUtilsTest.java
Date Fri, 28 May 2010 20:25:20 GMT
Please find below a "reverse" patch file that shows the differences without the formatting noise. This file should be useful to anyone who wants to review the changes. The file is a "reverse" patch hack which shows what happens if you remove the changes instead of adding them, it's just the simplest way I found to show the deltas without the formatting noise.

Gary

### Eclipse Workspace Patch 1.0
#P Apache Commons Lang
Index: src/main/java/org/apache/commons/lang3/SystemUtils.java
===================================================================
--- src/main/java/org/apache/commons/lang3/SystemUtils.java     (revision 949223)
+++ src/main/java/org/apache/commons/lang3/SystemUtils.java     (working copy)
@@ -17,7 +17,6 @@
 package org.apache.commons.lang3;

 import java.io.File;
-import java.util.regex.Pattern;

 /**
  * <p>
@@ -47,8 +46,6 @@
  */
 public class SystemUtils {

-    private static final int JAVA_VERSION_TRIM_SIZE = 3;
-
     /**
      * The prefix String for all Windows OS.
      */
@@ -782,8 +779,8 @@

     /**
      * <p>
-     * The <code>user.country</code> or <code>user.region</code> System Property. User's country code, such as <code>GB</code>. First in
-     * Java version 1.2 as <code>user.region</code>. Renamed to <code>user.country</code> in 1.4
+     * The <code>user.country</code> or <code>user.region</code> System Property. User's country code, such as <code>GB</code>. First in JDK
+     * version 1.2 as <code>user.region</code>. Renamed to <code>user.country</code> in 1.4
      * </p>
      *
      * <p>
@@ -930,8 +927,8 @@
      * Example return values:
      * </p>
      * <ul>
-     * <li><code>1.2f</code> for Java 1.2
-     * <li><code>1.31f</code> for Java 1.3.1
+     * <li><code>1.2f</code> for JDK 1.2
+     * <li><code>1.31f</code> for JDK 1.3.1
      * </ul>
      *
      * <p>
@@ -951,8 +948,8 @@
      * Example return values:
      * </p>
      * <ul>
-     * <li><code>120</code> for Java 1.2
-     * <li><code>131</code> for Java 1.3.1
+     * <li><code>120</code> for JDK 1.2
+     * <li><code>131</code> for JDK 1.3.1
      * </ul>
      *
      * <p>
@@ -1066,7 +1063,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_AIX = getOSMatchesName("AIX");
+    public static final boolean IS_OS_AIX = getOSMatches("AIX");

     /**
      * <p>
@@ -1079,7 +1076,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_HP_UX = getOSMatchesName("HP-UX");
+    public static final boolean IS_OS_HP_UX = getOSMatches("HP-UX");

     /**
      * <p>
@@ -1092,7 +1089,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_IRIX = getOSMatchesName("Irix");
+    public static final boolean IS_OS_IRIX = getOSMatches("Irix");

     /**
      * <p>
@@ -1105,7 +1102,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_LINUX = getOSMatchesName("Linux") || getOSMatchesName("LINUX");
+    public static final boolean IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX");

     /**
      * <p>
@@ -1118,7 +1115,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_MAC = getOSMatchesName("Mac");
+    public static final boolean IS_OS_MAC = getOSMatches("Mac");

     /**
      * <p>
@@ -1131,7 +1128,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_MAC_OSX = getOSMatchesName("Mac OS X");
+    public static final boolean IS_OS_MAC_OSX = getOSMatches("Mac OS X");

     /**
      * <p>
@@ -1144,7 +1141,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_OS2 = getOSMatchesName("OS/2");
+    public static final boolean IS_OS_OS2 = getOSMatches("OS/2");

     /**
      * <p>
@@ -1157,7 +1154,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_SOLARIS = getOSMatchesName("Solaris");
+    public static final boolean IS_OS_SOLARIS = getOSMatches("Solaris");

     /**
      * <p>
@@ -1170,7 +1167,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_SUN_OS = getOSMatchesName("SunOS");
+    public static final boolean IS_OS_SUN_OS = getOSMatches("SunOS");

     /**
      * <p>
@@ -1197,7 +1194,7 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_WINDOWS = getOSMatchesName(OS_NAME_WINDOWS_PREFIX);
+    public static final boolean IS_OS_WINDOWS = getOSMatches(OS_NAME_WINDOWS_PREFIX);

     /**
      * <p>
@@ -1224,7 +1221,7 @@
      * @since 2.0
      */
     public static final boolean IS_OS_WINDOWS_95 = getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.0");
-    // Java 1.2 running on Windows98 returns 'Windows 95', hence the above
+    // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above

     /**
      * <p>
@@ -1238,7 +1235,7 @@
      * @since 2.0
      */
     public static final boolean IS_OS_WINDOWS_98 = getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.1");
-    // Java 1.2 running on Windows98 returns 'Windows 95', hence the above
+    // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above

     /**
      * <p>
@@ -1252,7 +1249,7 @@
      * @since 2.0
      */
     public static final boolean IS_OS_WINDOWS_ME = getOSMatches(OS_NAME_WINDOWS_PREFIX, "4.9");
-    // Java 1.2 running on WindowsME may return 'Windows 95', hence the above
+    // JDK 1.2 running on WindowsME may return 'Windows 95', hence the above

     /**
      * <p>
@@ -1265,8 +1262,8 @@
      *
      * @since 2.0
      */
-    public static final boolean IS_OS_WINDOWS_NT = getOSMatchesName(OS_NAME_WINDOWS_PREFIX + " NT");
-    // Windows 2000 returns 'Windows 2000' but may suffer from same Java1.2 problem
+    public static final boolean IS_OS_WINDOWS_NT = getOSMatches(OS_NAME_WINDOWS_PREFIX + " NT");
+    // Windows 2000 returns 'Windows 2000' but may suffer from same JDK1.2 problem

     /**
      * <p>
@@ -1340,6 +1337,7 @@
         return new File(System.getProperty(JAVA_IO_TMPDIR_KEY));
     }

+    // -----------------------------------------------------------------------
     /**
      * <p>
      * Gets the Java version number as a <code>float</code>.
@@ -1349,19 +1347,29 @@
      * Example return values:
      * </p>
      * <ul>
-     * <li><code>1.2f</code> for Java 1.2</li>
-     * <li><code>1.31f</code> for Java 1.3.1</li>
-     * <li><code>1.6f</code> for Java 1.6.0_20</li>
+     * <li><code>1.2f</code> for JDK 1.2
+     * <li><code>1.31f</code> for JDK 1.3.1
      * </ul>
      *
      * <p>
-     * Patch releases are not reported.
+     * Patch releases are not reported. Zero is returned if {@link #JAVA_VERSION_TRIMMED} is <code>null</code>.
      * </p>
      *
-     * @return the version, for example 1.31f for Java 1.3.1
+     * @return the version, for example 1.31f for JDK 1.3.1
      */
     private static float getJavaVersionAsFloat() {
-        return toVersionFloat(toJavaVersionIntArray(SystemUtils.JAVA_VERSION, JAVA_VERSION_TRIM_SIZE));
+        if (JAVA_VERSION_TRIMMED == null) {
+            return 0f;
+        }
+        String str = JAVA_VERSION_TRIMMED.substring(0, 3);
+        if (JAVA_VERSION_TRIMMED.length() >= 5) {
+            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
+        }
+        try {
+            return Float.parseFloat(str);
+        } catch (Exception ex) {
+            return 0;
+        }
     }

     /**
@@ -1373,24 +1381,37 @@
      * Example return values:
      * </p>
      * <ul>
-     * <li><code>120</code> for Java 1.2</li>
-     * <li><code>131</code> for Java 1.3.1</li>
-     * <li><code>160</code> for Java 1.6.0_20</li>
+     * <li><code>120</code> for JDK 1.2
+     * <li><code>131</code> for JDK 1.3.1
      * </ul>
      *
      * <p>
-     * Patch releases are not reported.
+     * Patch releases are not reported. Zero is returned if {@link #JAVA_VERSION_TRIMMED} is <code>null</code>.
      * </p>
      *
-     * @return the version, for example 131 for Java 1.3.1
+     * @return the version, for example 131 for JDK 1.3.1
      */
     private static int getJavaVersionAsInt() {
-        return toVersionInt(toJavaVersionIntArray(SystemUtils.JAVA_VERSION, JAVA_VERSION_TRIM_SIZE));
+        if (JAVA_VERSION_TRIMMED == null) {
+            return 0;
+        }
+        String str = JAVA_VERSION_TRIMMED.substring(0, 1);
+        str = str + JAVA_VERSION_TRIMMED.substring(2, 3);
+        if (JAVA_VERSION_TRIMMED.length() >= 5) {
+            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
+        } else {
+            str = str + "0";
+        }
+        try {
+            return Integer.parseInt(str);
+        } catch (Exception ex) {
+            return 0;
+        }
     }

     /**
      * <p>
-     * Decides if the Java version matches.
+     * Decides if the java version matches.
      * </p>
      *
      * @param versionPrefix
@@ -1398,7 +1419,10 @@
      * @return true if matches, or false if not or can't determine
      */
     private static boolean getJavaVersionMatches(String versionPrefix) {
-        return isJavaVersionMatch(JAVA_VERSION_TRIMMED, versionPrefix);
+        if (JAVA_VERSION_TRIMMED == null) {
+            return false;
+        }
+        return JAVA_VERSION_TRIMMED.startsWith(versionPrefix);
     }

     /**
@@ -1419,27 +1443,37 @@
     }

     /**
+     * <p>
      * Decides if the operating system matches.
+     * </p>
      *
      * @param osNamePrefix
      *            the prefix for the os name
-     * @param osVersionPrefix
-     *            the prefix for the version
      * @return true if matches, or false if not or can't determine
      */
-    private static boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
-        return isOSMatch(OS_NAME, OS_VERSION, osNamePrefix, osVersionPrefix);
+    private static boolean getOSMatches(String osNamePrefix) {
+        if (OS_NAME == null) {
+            return false;
+        }
+        return OS_NAME.startsWith(osNamePrefix);
     }

     /**
+     * <p>
      * Decides if the operating system matches.
+     * </p>
      *
      * @param osNamePrefix
      *            the prefix for the os name
+     * @param osVersionPrefix
+     *            the prefix for the version
      * @return true if matches, or false if not or can't determine
      */
-    private static boolean getOSMatchesName(String osNamePrefix) {
-        return isOSNameMatch(OS_NAME, osNamePrefix);
+    private static boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
+        if (OS_NAME == null || OS_VERSION == null) {
+            return false;
+        }
+        return OS_NAME.startsWith(osNamePrefix) && OS_VERSION.startsWith(osVersionPrefix);
     }

     // -----------------------------------------------------------------------
@@ -1522,8 +1556,8 @@
      * Example input:
      * </p>
      * <ul>
-     * <li><code>1.2f</code> to test for Java 1.2</li>
-     * <li><code>1.31f</code> to test for Java 1.3.1</li>
+     * <li><code>1.2f</code> to test for JDK 1.2</li>
+     * <li><code>1.31f</code> to test for JDK 1.3.1</li>
      * </ul>
      *
      * @param requiredVersion
@@ -1543,8 +1577,8 @@
      * Example input:
      * </p>
      * <ul>
-     * <li><code>120</code> to test for Java 1.2 or greater</li>
-     * <li><code>131</code> to test for Java 1.3.1 or greater</li>
+     * <li><code>120</code> to test for JDK 1.2 or greater</li>
+     * <li><code>131</code> to test for JDK 1.3.1 or greater</li>
      * </ul>
      *
      * @param requiredVersion
@@ -1556,256 +1590,6 @@
         return JAVA_VERSION_INT >= requiredVersion;
     }

-    /**
-     * <p>
-     * Decides if the Java version matches.
-     * </p>
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @param version
-     *            the actual Java version
-     * @param versionPrefix
-     *            the prefix for the expected Java version
-     * @return true if matches, or false if not or can't determine
-     */
-    static boolean isJavaVersionMatch(String version, String versionPrefix) {
-        if (version == null) {
-            return false;
-        }
-        return version.startsWith(versionPrefix);
-    }
-
-    /**
-     * Decides if the operating system matches.
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @param osName
-     *            the actual OS name
-     * @param osVersion
-     *            the actual OS version
-     * @param osNamePrefix
-     *            the prefix for the expected OS name
-     * @param osVersionPrefix
-     *            the prefix for the expected OS version
-     * @return true if matches, or false if not or can't determine
-     */
-    static boolean isOSMatch(String osName, String osVersion, String osNamePrefix, String osVersionPrefix) {
-        if (osName == null || osVersion == null) {
-            return false;
-        }
-        return osName.startsWith(osNamePrefix) && osVersion.startsWith(osVersionPrefix);
-    }
-
-    /**
-     * Decides if the operating system matches.
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @param osName
-     *            the actual OS name
-     * @param osNamePrefix
-     *            the prefix for the expected OS name
-     * @return true if matches, or false if not or can't determine
-     */
-    static boolean isOSNameMatch(String osName, String osNamePrefix) {
-        if (osName == null) {
-            return false;
-        }
-        return osName.startsWith(osNamePrefix);
-    }
-
-    /**
-     * <p>
-     * Converts the given Java version string to a <code>float</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>1.2f</code> for Java 1.2</li>
-     * <li><code>1.31f</code> for Java 1.3.1</li>
-     * <li><code>1.6f</code> for Java 1.6.0_20</li>
-     * </ul>
-     *
-     * <p>
-     * Patch releases are not reported.
-     * </p>
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @return the version, for example 1.31f for Java 1.3.1
-     */
-    static float toJavaVersionFloat(String version) {
-        return toVersionFloat(toJavaVersionIntArray(version, JAVA_VERSION_TRIM_SIZE));
-    }
-
-    /**
-     * <p>
-     * Converts the given Java version string to an <code>int</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>120</code> for Java 1.2</li>
-     * <li><code>131</code> for Java 1.3.1</li>
-     * <li><code>160</code> for Java 1.6.0_20</li>
-     * </ul>
-     *
-     * <p>
-     * Patch releases are not reported.
-     * </p>
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @return the version, for example 131 for Java 1.3.1
-     */
-    static int toJavaVersionInt(String version) {
-        return toVersionInt(toJavaVersionIntArray(version, JAVA_VERSION_TRIM_SIZE));
-    }
-
-    /**
-     * <p>
-     * Converts the given Java version string to an <code>int[]</code> of maximum size <code>3</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>[1, 2, 0]</code> for Java 1.2</li>
-     * <li><code>[1, 3, 1]</code> for Java 1.3.1</li>
-     * <li><code>[1, 5, 0]</code> for Java 1.5.0_21</li>
-     * </ul>
-     * <p>
-     * This method is package private instead of private to support unit test invocation.
-     * </p>
-     *
-     * @return the version, for example [1, 5, 0] for Java 1.5.0_21
-     */
-    static int[] toJavaVersionIntArray(String version) {
-        return toJavaVersionIntArray(version, Integer.MAX_VALUE);
-    }
-
-    /**
-     * <p>
-     * Converts the given Java version string to an <code>int[]</code> of maximum size <code>limit</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>[1, 2, 0]</code> for Java 1.2</li>
-     * <li><code>[1, 3, 1]</code> for Java 1.3.1</li>
-     * <li><code>[1, 5, 0, 21]</code> for Java 1.5.0_21</li>
-     * </ul>
-     *
-     * @return the version, for example [1, 5, 0, 21] for Java 1.5.0_21
-     */
-    private static int[] toJavaVersionIntArray(String version, int limit) {
-        if (version == null) {
-            return ArrayUtils.EMPTY_INT_ARRAY;
-        }
-        String[] strings = Pattern.compile("[^\\d]").split(version);
-        int[] ints = new int[Math.min(limit, strings.length)];
-        int j = 0;
-        for (int i = 0; i < strings.length && j < limit; i++) {
-            String s = strings[i];
-            if (s.length() > 0) {
-                ints[j++] = Integer.parseInt(s);
-            }
-        }
-        return ints;
-    }
-
-    /**
-     * <p>
-     * Converts given the Java version array to a <code>float</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>1.2f</code> for Java 1.2</li>
-     * <li><code>1.31f</code> for Java 1.3.1</li>
-     * <li><code>1.6f</code> for Java 1.6.0_20</li>
-     * </ul>
-     *
-     * <p>
-     * Patch releases are not reported.
-     * </p>
-     *
-     * @return the version, for example 1.31f for Java 1.3.1
-     */
-    private static float toVersionFloat(int[] javaVersions) {
-        if (javaVersions == null || javaVersions.length == 0) {
-            return 0f;
-        }
-        if (javaVersions.length == 1) {
-            return javaVersions[0];
-        }
-        StringBuilder builder = new StringBuilder();
-        builder.append(javaVersions[0]);
-        builder.append('.');
-        for (int i = 1; i < javaVersions.length; i++) {
-            builder.append(javaVersions[i]);
-        }
-        try {
-            return Float.parseFloat(builder.toString());
-        } catch (Exception ex) {
-            return 0f;
-        }
-    }
-
-    /**
-     * <p>
-     * Converts given the Java version array to an <code>int</code>.
-     * </p>
-     *
-     * <p>
-     * Example return values:
-     * </p>
-     * <ul>
-     * <li><code>120</code> for Java 1.2</li>
-     * <li><code>131</code> for Java 1.3.1</li>
-     * <li><code>160</code> for Java 1.6.0_20</li>
-     * </ul>
-     *
-     * <p>
-     * Patch releases are not reported.
-     * </p>
-     *
-     * @return the version, for example 1.31f for Java 1.3.1
-     */
-    private static int toVersionInt(int[] javaVersions) {
-        if (javaVersions == null) {
-            return 0;
-        }
-        int intVersion = 0;
-        int len = javaVersions.length;
-        if (len >= 1) {
-            intVersion = javaVersions[0] * 100;
-        }
-        if (len >= 2) {
-            intVersion += javaVersions[1] * 10;
-        }
-        if (len >= 3) {
-            intVersion += javaVersions[2];
-        }
-        return intVersion;
-    }
-
     // -----------------------------------------------------------------------
     /**
      * <p>

Gary Gregory
Senior Software Engineer
Seagull Software
email: ggregory@seagullsoftware.com
email: ggregory@apache.org
www.seagullsoftware.com



> -----Original Message-----
> From: Gary Gregory
> Sent: Friday, May 28, 2010 08:59
> To: dev@commons.apache.org
> Subject: RE: svn commit: r949140 [2/3] - in /commons/proper/lang/trunk/src:
> main/java/org/apache/commons/lang3/SystemUtils.java
> test/java/org/apache/commons/lang3/SystemUtilsTest.java
>
> Jörg,
>
> I am sorry about that, I did not realize I created extra formatting noise in
> the change set. The changes to the class are numerous though, so there would
> have been lots of deltas, namely:
>
> - Fixed and tested (LANG-624) SystemUtils.getJavaVersionAsFloat throws
> StringIndexOutOfBoundsException on Android runtime/Dalvik VM. This is based on
> a new implementation of the underlying code with less reliance of hard coded
> array indices, for example, calls like substring (0, 3).
>
> - Refactored some private methods into one private and one package private
> method such that the latter can be called from unit tests. This allows [LANG-
> 624] to be tested along with other methods. See below.
>
> - Removed "dead code" from unit tests: The SystemUtilsTest unit test contained
> code that was cut and pasted from SystemUtils for four constants and
> associated initialization methods. The test methods then called these
> SystemUtilsTest methods instead of the SystemUtils methods. The refactoring
> allows for the test to run against as much of the code in SystemUtils as
> possible.
>
> - Added assertions for Java version "0", "1.4.2", "1.6" and "1.7" to some
> tests.
>
> - Added Javadocs to document what happens with "1.6.0_20" vs. "1.6.0", which
> is that the patch level is ignored.
>
> Gary Gregory
> Senior Software Engineer
> Seagull Software
> email: ggregory@seagullsoftware.com
> email: ggregory@apache.org
> www.seagullsoftware.com
>
>
> > -----Original Message-----
> > From: Jörg Schaible [mailto:joerg.schaible@gmx.de]
> > Sent: Friday, May 28, 2010 05:13
> > To: dev@commons.apache.org
> > Subject: Fwd: svn commit: r949140 [2/3] - in /commons/proper/lang/trunk/src:
> > main/java/org/apache/commons/lang3/SystemUtils.java
> > test/java/org/apache/commons/lang3/SystemUtilsTest.java
> >
> > Gary,
> >
> > can you please stop with this code reformatting? How should anyone can have
> > a look at the changes if it is hidden between 95% unrelated stuff ???
> >
> > - Jörg
> >
> >
> >
> > --------------- Forwarded Message
> >
> > Betreff: svn commit: r949140 [2/3] - in /commons/proper/lang/trunk/src:
> > main/java/org/apache/commons/lang3/SystemUtils.java
> > test/java/org/apache/commons/lang3/SystemUtilsTest.java
> > Absender: ggregory@apache.org
> > Datum: Fri, 28 May 2010 10:12:04 +0000
> > Newsgruppe: gmane.comp.jakarta.commons.scm
> >
> >
> > Modified:
> >
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.j
> > ava
> > URL:
> >
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apach
> > e/commons/lang3/SystemUtils.java?rev=949140&r1=949139&r2=949140&view=diff
> >
> ==============================================================================
> > ---
> >
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.j
> > ava
> > (original)
> > +++
> >
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/SystemUtils.j
> > ava
> > Fri May 28 10:12:04 2010
> > @@ -17,15 +17,22 @@
> >  package org.apache.commons.lang3;
> >
> >  import java.io.File;
> > +import java.util.regex.Pattern;
> >
> >  /**
> > - * <p>Helpers for <code>java.lang.System</code>.</p>
> > + * <p>
> > + * Helpers for <code>java.lang.System</code>.
> > + * </p>
> > + *
> > + * <p>
> > + * If a system property cannot be read due to security restrictions, the
> > corresponding field in this class will be set to <code>null</code>
> > + * and a message will be written to <code>System.err</code>.
> > + * </p>
> > + *
> > + * <p>
> > + * #ThreadSafe#
> > + * </p>
> >   *
> > - * <p>If a system property cannot be read due to security restrictions,
> > - * the corresponding field in this class will be set to <code>null</code>
> > - * and a message will be written to <code>System.err</code>.</p>
> > - *
> > - * <p>#ThreadSafe#</p>
> >   * @author Apache Software Foundation
> >   * @author Based on code from Avalon Excalibur
> >   * @author Based on code from Lucene
> > @@ -40,15 +47,17 @@ import java.io.File;
> >   */
> >  public class SystemUtils {
> >
> > +    private static final int JAVA_VERSION_TRIM_SIZE = 3;
> > +
> >      /**
> >       * The prefix String for all Windows OS.
> >       */
> >      private static final String OS_NAME_WINDOWS_PREFIX = "Windows";
> > -
> > +
> >      // System property constants
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      // These MUST be declared first. Other constants depend on this.
> > -
> > +
> >      /**
> >       * The System property key for the user home directory.
> >       */
> > @@ -58,29 +67,36 @@ public class SystemUtils {
> >       * The System property key for the user directory.
> >       */
> >      private static final String USER_DIR_KEY = "user.dir";
> > -
> > +
> >      /**
> >       * The System property key for the Java IO temporary directory.
> >       */
> >      private static final String JAVA_IO_TMPDIR_KEY = "java.io.tmpdir";
> > -
> > +
> >      /**
> >       * The System property key for the Java home directory.
> >       */
> >      private static final String JAVA_HOME_KEY = "java.home";
> > -
> > +
> >      /**
> > -     * <p>The <code>awt.toolkit</code> System Property.</p>
> > -     * <p>Holds a class name, on Windows XP this is
> > <code>sun.awt.windows.WToolkit</code>.</p>
> > -     * <p><b>On platforms without a GUI, this value is
> > <code>null</code>.</b></p>
> > +     * <p>
> > +     * The <code>awt.toolkit</code> System Property.
> > +     * </p>
> > +     * <p>
> > +     * Holds a class name, on Windows XP this is
> > <code>sun.awt.windows.WToolkit</code>.
> > +     * </p>
> > +     * <p>
> > +     * <b>On platforms without a GUI, this value is <code>null</code>.</b>
> > +     * </p>
> >       *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> > @@ -88,16 +104,21 @@ public class SystemUtils {
> >      public static final String AWT_TOOLKIT =
> > getSystemProperty("awt.toolkit");
> >
> >      /**
> > -     * <p>The <code>file.encoding</code> System Property.</p>
> > -     * <p>File encoding, such as <code>Cp1252</code>.</p>
> > +     * <p>
> > +     * The <code>file.encoding</code> System Property.
> > +     * </p>
> > +     * <p>
> > +     * File encoding, such as <code>Cp1252</code>.
> > +     * </p>
> >       *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> > @@ -106,16 +127,18 @@ public class SystemUtils {
> >      public static final String FILE_ENCODING =
> > getSystemProperty("file.encoding");
> >
> >      /**
> > -     * <p>The <code>file.separator</code> System Property.
> > -     * File separator (<code>&quot;/&quot;</code> on UNIX).</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>file.separator</code> System Property. File separator
> > (<code>&quot;/&quot;</code> on UNIX).
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -123,15 +146,18 @@ public class SystemUtils {
> >      public static final String FILE_SEPARATOR =
> > getSystemProperty("file.separator");
> >
> >      /**
> > -     * <p>The <code>java.awt.fonts</code> System Property.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.awt.fonts</code> System Property.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> > @@ -139,15 +165,18 @@ public class SystemUtils {
> >      public static final String JAVA_AWT_FONTS =
> > getSystemProperty("java.awt.fonts");
> >
> >      /**
> > -     * <p>The <code>java.awt.graphicsenv</code> System Property.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.awt.graphicsenv</code> System Property.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> > @@ -156,17 +185,18 @@ public class SystemUtils {
> >
> >      /**
> >       * <p>
> > -     * The <code>java.awt.headless</code> System Property.
> > -     * The value of this property is the String <code>"true"</code> or
> > <code>"false"</code>.
> > +     * The <code>java.awt.headless</code> System Property. The value of
> > this property is the String <code>"true"</code> or
> > +     * <code>"false"</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> >       * </p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @see #isJavaAwtHeadless()
> > @@ -176,15 +206,18 @@ public class SystemUtils {
> >      public static final String JAVA_AWT_HEADLESS =
> > getSystemProperty("java.awt.headless");
> >
> >      /**
> > -     * <p>The <code>java.awt.printerjob</code> System Property.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.awt.printerjob</code> System Property.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> > @@ -192,15 +225,18 @@ public class SystemUtils {
> >      public static final String JAVA_AWT_PRINTERJOB =
> > getSystemProperty("java.awt.printerjob");
> >
> >      /**
> > -     * <p>The <code>java.class.path</code> System Property. Java class
> > path.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.class.path</code> System Property. Java class path.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -208,16 +244,18 @@ public class SystemUtils {
> >      public static final String JAVA_CLASS_PATH =
> > getSystemProperty("java.class.path");
> >
> >      /**
> > -     * <p>The <code>java.class.version</code> System Property.
> > -     * Java class format version number.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.class.version</code> System Property. Java class
> > format version number.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -225,16 +263,19 @@ public class SystemUtils {
> >      public static final String JAVA_CLASS_VERSION =
> > getSystemProperty("java.class.version");
> >
> >      /**
> > -     * <p>The <code>java.compiler</code> System Property. Name of JIT
> > compiler to use.
> > -     * First in JDK version 1.2. Not used in Sun JDKs after 1.2.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.compiler</code> System Property. Name of JIT compiler
> > to use. First in JDK version 1.2. Not used in Sun JDKs after
> > +     * 1.2.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2. Not used in Sun versions after 1.2.
> > @@ -242,16 +283,18 @@ public class SystemUtils {
> >      public static final String JAVA_COMPILER =
> > getSystemProperty("java.compiler");
> >
> >      /**
> > -     * <p>The <code>java.endorsed.dirs</code> System Property. Path of
> > endorsed directory
> > -     * or directories.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.endorsed.dirs</code> System Property. Path of
> > endorsed directory or directories.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.4
> > @@ -259,16 +302,18 @@ public class SystemUtils {
> >      public static final String JAVA_ENDORSED_DIRS =
> > getSystemProperty("java.endorsed.dirs");
> >
> >      /**
> > -     * <p>The <code>java.ext.dirs</code> System Property. Path of extension
> > directory
> > -     * or directories.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.ext.dirs</code> System Property. Path of extension
> > directory or directories.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.3
> > @@ -276,15 +321,18 @@ public class SystemUtils {
> >      public static final String JAVA_EXT_DIRS =
> > getSystemProperty("java.ext.dirs");
> >
> >      /**
> > -     * <p>The <code>java.home</code> System Property. Java installation
> > directory.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.home</code> System Property. Java installation
> > directory.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -292,15 +340,18 @@ public class SystemUtils {
> >      public static final String JAVA_HOME =
> > getSystemProperty(JAVA_HOME_KEY);
> >
> >      /**
> > -     * <p>The <code>java.io.tmpdir</code> System Property. Default temp
> > file path.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.io.tmpdir</code> System Property. Default temp file
> > path.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -308,16 +359,18 @@ public class SystemUtils {
> >      public static final String JAVA_IO_TMPDIR =
> > getSystemProperty(JAVA_IO_TMPDIR_KEY);
> >
> >      /**
> > -     * <p>The <code>java.library.path</code> System Property. List of paths
> > to search
> > -     * when loading libraries.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.library.path</code> System Property. List of paths to
> > search when loading libraries.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -325,16 +378,18 @@ public class SystemUtils {
> >      public static final String JAVA_LIBRARY_PATH =
> > getSystemProperty("java.library.path");
> >
> >      /**
> > -     * <p>The <code>java.runtime.name</code> System Property. Java Runtime
> > Environment
> > -     * name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.runtime.name</code> System Property. Java Runtime
> > Environment name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> > @@ -343,16 +398,18 @@ public class SystemUtils {
> >      public static final String JAVA_RUNTIME_NAME =
> > getSystemProperty("java.runtime.name");
> >
> >      /**
> > -     * <p>The <code>java.runtime.version</code> System Property. Java
> > Runtime Environment
> > -     * version.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.runtime.version</code> System Property. Java Runtime
> > Environment version.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> > @@ -361,16 +418,18 @@ public class SystemUtils {
> >      public static final String JAVA_RUNTIME_VERSION =
> > getSystemProperty("java.runtime.version");
> >
> >      /**
> > -     * <p>The <code>java.specification.name</code> System Property. Java
> > Runtime Environment
> > -     * specification name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.specification.name</code> System Property. Java
> > Runtime Environment specification name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -378,16 +437,18 @@ public class SystemUtils {
> >      public static final String JAVA_SPECIFICATION_NAME =
> > getSystemProperty("java.specification.name");
> >
> >      /**
> > -     * <p>The <code>java.specification.vendor</code> System Property. Java
> > Runtime Environment
> > -     * specification vendor.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.specification.vendor</code> System Property. Java
> > Runtime Environment specification vendor.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -395,16 +456,18 @@ public class SystemUtils {
> >      public static final String JAVA_SPECIFICATION_VENDOR =
> > getSystemProperty("java.specification.vendor");
> >
> >      /**
> > -     * <p>The <code>java.specification.version</code> System Property. Java
> > Runtime Environment
> > -     * specification version.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.specification.version</code> System Property. Java
> > Runtime Environment specification version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.3
> > @@ -412,33 +475,38 @@ public class SystemUtils {
> >      public static final String JAVA_SPECIFICATION_VERSION =
> > getSystemProperty("java.specification.version");
> >
> >      /**
> > -     * <p>The <code>java.util.prefs.PreferencesFactory</code> System
> > Property. A class name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.util.prefs.PreferencesFactory</code> System Property.
> > A class name.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> >       * @since Java 1.4
> >       */
> > -    public static final String JAVA_UTIL_PREFS_PREFERENCES_FACTORY =
> > -        getSystemProperty("java.util.prefs.PreferencesFactory");
> > +    public static final String JAVA_UTIL_PREFS_PREFERENCES_FACTORY =
> > getSystemProperty("java.util.prefs.PreferencesFactory");
> >
> >      /**
> > -     * <p>The <code>java.vendor</code> System Property. Java vendor-
> > specific string.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vendor</code> System Property. Java vendor-specific
> > string.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -446,31 +514,37 @@ public class SystemUtils {
> >      public static final String JAVA_VENDOR =
> > getSystemProperty("java.vendor");
> >
> >      /**
> > -     * <p>The <code>java.vendor.url</code> System Property. Java vendor
> > URL.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vendor.url</code> System Property. Java vendor URL.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > -    */
> > +     */
> >      public static final String JAVA_VENDOR_URL =
> > getSystemProperty("java.vendor.url");
> >
> >      /**
> > -     * <p>The <code>java.version</code> System Property. Java version
> > number.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.version</code> System Property. Java version number.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -478,16 +552,18 @@ public class SystemUtils {
> >      public static final String JAVA_VERSION =
> > getSystemProperty("java.version");
> >
> >      /**
> > -     * <p>The <code>java.vm.info</code> System Property. Java Virtual
> > Machine implementation
> > -     * info.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.info</code> System Property. Java Virtual Machine
> > implementation info.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> > @@ -496,16 +572,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_INFO =
> > getSystemProperty("java.vm.info");
> >
> >      /**
> > -     * <p>The <code>java.vm.name</code> System Property. Java Virtual
> > Machine implementation
> > -     * name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.name</code> System Property. Java Virtual Machine
> > implementation name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -513,16 +591,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_NAME =
> > getSystemProperty("java.vm.name");
> >
> >      /**
> > -     * <p>The <code>java.vm.specification.name</code> System Property. Java
> > Virtual Machine
> > -     * specification name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.specification.name</code> System Property. Java
> > Virtual Machine specification name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -530,16 +610,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_SPECIFICATION_NAME =
> > getSystemProperty("java.vm.specification.name");
> >
> >      /**
> > -     * <p>The <code>java.vm.specification.vendor</code> System Property.
> > Java Virtual
> > -     * Machine specification vendor.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.specification.vendor</code> System Property. Java
> > Virtual Machine specification vendor.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -547,16 +629,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_SPECIFICATION_VENDOR =
> > getSystemProperty("java.vm.specification.vendor");
> >
> >      /**
> > -     * <p>The <code>java.vm.specification.version</code> System Property.
> > Java Virtual Machine
> > -     * specification version.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.specification.version</code> System Property. Java
> > Virtual Machine specification version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -564,16 +648,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_SPECIFICATION_VERSION =
> > getSystemProperty("java.vm.specification.version");
> >
> >      /**
> > -     * <p>The <code>java.vm.vendor</code> System Property. Java Virtual
> > Machine implementation
> > -     * vendor.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.vendor</code> System Property. Java Virtual
> > Machine implementation vendor.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -581,16 +667,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_VENDOR =
> > getSystemProperty("java.vm.vendor");
> >
> >      /**
> > -     * <p>The <code>java.vm.version</code> System Property. Java Virtual
> > Machine
> > -     * implementation version.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>java.vm.version</code> System Property. Java Virtual
> > Machine implementation version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.2
> > @@ -598,16 +686,18 @@ public class SystemUtils {
> >      public static final String JAVA_VM_VERSION =
> > getSystemProperty("java.vm.version");
> >
> >      /**
> > -     * <p>The <code>line.separator</code> System Property. Line separator
> > -     * (<code>&quot;\n&quot;</code> on UNIX).</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>line.separator</code> System Property. Line separator
> > (<code>&quot;\n&quot;</code> on UNIX).
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -615,15 +705,18 @@ public class SystemUtils {
> >      public static final String LINE_SEPARATOR =
> > getSystemProperty("line.separator");
> >
> >      /**
> > -     * <p>The <code>os.arch</code> System Property. Operating system
> > architecture.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>os.arch</code> System Property. Operating system
> > architecture.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -631,15 +724,18 @@ public class SystemUtils {
> >      public static final String OS_ARCH = getSystemProperty("os.arch");
> >
> >      /**
> > -     * <p>The <code>os.name</code> System Property. Operating system
> > name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>os.name</code> System Property. Operating system name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -647,15 +743,18 @@ public class SystemUtils {
> >      public static final String OS_NAME = getSystemProperty("os.name");
> >
> >      /**
> > -     * <p>The <code>os.version</code> System Property. Operating system
> > version.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>os.version</code> System Property. Operating system
> > version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -663,16 +762,18 @@ public class SystemUtils {
> >      public static final String OS_VERSION =
> > getSystemProperty("os.version");
> >
> >      /**
> > -     * <p>The <code>path.separator</code> System Property. Path separator
> > -     * (<code>&quot;:&quot;</code> on UNIX).</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>path.separator</code> System Property. Path separator
> > (<code>&quot;:&quot;</code> on UNIX).
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -680,37 +781,40 @@ public class SystemUtils {
> >      public static final String PATH_SEPARATOR =
> > getSystemProperty("path.separator");
> >
> >      /**
> > -     * <p>The <code>user.country</code> or <code>user.region</code> System
> > Property.
> > -     * User's country code, such as <code>GB</code>. First in JDK version
> > 1.2 as
> > -     * <code>user.region</code>. Renamed to <code>user.country</code> in
> > 1.4</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.country</code> or <code>user.region</code> System
> > Property. User's country code, such as <code>GB</code>. First in
> > +     * Java version 1.2 as <code>user.region</code>. Renamed to
> > <code>user.country</code> in 1.4
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> >       * @since Java 1.2
> >       */
> > -    public static final String USER_COUNTRY =
> > -        getSystemProperty("user.country") == null ?
> > -            getSystemProperty("user.region") :
> > getSystemProperty("user.country");
> > +    public static final String USER_COUNTRY =
> > getSystemProperty("user.country") == null ? getSystemProperty("user.region")
> > +            : getSystemProperty("user.country");
> >
> >      /**
> > -     * <p>The <code>user.dir</code> System Property. User's current working
> > -     * directory.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.dir</code> System Property. User's current working
> > directory.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -718,15 +822,18 @@ public class SystemUtils {
> >      public static final String USER_DIR = getSystemProperty(USER_DIR_KEY);
> >
> >      /**
> > -     * <p>The <code>user.home</code> System Property. User's home
> > directory.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.home</code> System Property. User's home directory.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -734,16 +841,18 @@ public class SystemUtils {
> >      public static final String USER_HOME =
> > getSystemProperty(USER_HOME_KEY);
> >
> >      /**
> > -     * <p>The <code>user.language</code> System Property. User's language
> > code,
> > -     * such as <code>"en"</code>.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.language</code> System Property. User's language
> > code, such as <code>"en"</code>.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.0
> > @@ -752,15 +861,18 @@ public class SystemUtils {
> >      public static final String USER_LANGUAGE =
> > getSystemProperty("user.language");
> >
> >      /**
> > -     * <p>The <code>user.name</code> System Property. User's account
> > name.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.name</code> System Property. User's account name.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since Java 1.1
> > @@ -768,16 +880,18 @@ public class SystemUtils {
> >      public static final String USER_NAME = getSystemProperty("user.name");
> >
> >      /**
> > -     * <p>The <code>user.timezone</code> System Property.
> > -     * For example: <code>"America/Los_Angeles"</code>.</p>
> > -     *
> > -     * <p>Defaults to <code>null</code> if the runtime does not have
> > -     * security access to read this property or the property does not
> > exist.</p>
> > +     * <p>
> > +     * The <code>user.timezone</code> System Property. For example:
> > <code>"America/Los_Angeles"</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Defaults to <code>null</code> if the runtime does not have security
> > access to read this property or the property does not exist.
> > +     * </p>
> >       *
> >       * <p>
> > -     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)}
> > -     * or {@link System#setProperties(java.util.Properties)} is called
> > after this class is loaded, the value
> > -     * will be out of sync with that System property.
> > +     * This value is initialized when the class is loaded. If {@link
> > System#setProperty(String,String)} or
> > +     * {@link System#setProperties(java.util.Properties)} is called after
> > this class is loaded, the value will be out of sync with that
> > +     * System property.
> >       * </p>
> >       *
> >       * @since 2.1
> > @@ -785,119 +899,156 @@ public class SystemUtils {
> >      public static final String USER_TIMEZONE =
> > getSystemProperty("user.timezone");
> >
> >      // Java version
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      // This MUST be declared after those above as it depends on the
> >      // values being set up
> >
> >      /**
> > -     * <p>Gets the Java version as a <code>String</code> trimming leading
> > letters.</p>
> > -     *
> > -     * <p>The field will return <code>null</code> if {@link #JAVA_VERSION}
> > is <code>null</code>.</p>
> > +     * <p>
> > +     * Gets the Java version as a <code>String</code> trimming leading
> > letters.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>null</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.1
> >       */
> >      public static final String JAVA_VERSION_TRIMMED =
> > getJavaVersionTrimmed();
> >
> >      // Java version values
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      // These MUST be declared after the trim above as they depend on the
> >      // value being set up
> >
> >      /**
> > -     * <p>Gets the Java version as a <code>float</code>.</p>
> > -     *
> > -     * <p>Example return values:</p>
> > +     * <p>
> > +     * Gets the Java version as a <code>float</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example return values:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>1.2f</code> for JDK 1.2
> > -     *  <li><code>1.31f</code> for JDK 1.3.1
> > +     * <li><code>1.2f</code> for Java 1.2
> > +     * <li><code>1.31f</code> for Java 1.3.1
> >       * </ul>
> > -     *
> > -     * <p>The field will return zero if {@link #JAVA_VERSION} is
> > <code>null</code>.</p>
> > +     *
> > +     * <p>
> > +     * The field will return zero if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final float JAVA_VERSION_FLOAT = getJavaVersionAsFloat();
> >
> >      /**
> > -     * <p>Gets the Java version as an <code>int</code>.</p>
> > -     *
> > -     * <p>Example return values:</p>
> > +     * <p>
> > +     * Gets the Java version as an <code>int</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example return values:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>120</code> for JDK 1.2
> > -     *  <li><code>131</code> for JDK 1.3.1
> > +     * <li><code>120</code> for Java 1.2
> > +     * <li><code>131</code> for Java 1.3.1
> >       * </ul>
> > -     *
> > -     * <p>The field will return zero if {@link #JAVA_VERSION} is
> > <code>null</code>.</p>
> > +     *
> > +     * <p>
> > +     * The field will return zero if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final int JAVA_VERSION_INT = getJavaVersionAsInt();
> >
> >      // Java version checks
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      // These MUST be declared after those above as they depend on the
> >      // values being set up
> > -
> > +
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.1 (also 1.1.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.1 (also 1.1.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       */
> >      public static final boolean IS_JAVA_1_1 = getJavaVersionMatches("1.1");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.2 (also 1.2.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.2 (also 1.2.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       */
> >      public static final boolean IS_JAVA_1_2 = getJavaVersionMatches("1.2");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.3 (also 1.3.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > -     */
> > -    public static final boolean IS_JAVA_1_3 = getJavaVersionMatches("1.3");
> > -
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.3 (also 1.3.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> > +     */
> > +    public static final boolean IS_JAVA_1_3 = getJavaVersionMatches("1.3");
> > +
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.4 (also 1.4.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.4 (also 1.4.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       */
> >      public static final boolean IS_JAVA_1_4 = getJavaVersionMatches("1.4");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.5 (also 1.5.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.5 (also 1.5.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       */
> >      public static final boolean IS_JAVA_1_5 = getJavaVersionMatches("1.5");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.6 (also 1.6.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.6 (also 1.6.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       */
> >      public static final boolean IS_JAVA_1_6 = getJavaVersionMatches("1.6");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Java version 1.7 (also 1.7.x
> > versions).</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if {@link #JAVA_VERSION}
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Java version 1.7 (also 1.7.x
> > versions).
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if {@link #JAVA_VERSION} is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 3.0
> >       */
> >      public static final boolean IS_JAVA_1_7 = getJavaVersionMatches("1.7");
> >
> >      // Operating system checks
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      // These MUST be declared after those above as they depend on the
> >      // values being set up
> >      // OS names from http://www.vamphq.com/os.html
> > @@ -905,276 +1056,349 @@ public class SystemUtils {
> >      // if you want another added or a mistake corrected
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is AIX.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is AIX.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_AIX = getOSMatches("AIX");
> > +    public static final boolean IS_OS_AIX = getOSMatchesName("AIX");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is HP-UX.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is HP-UX.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_HP_UX = getOSMatches("HP-UX");
> > +    public static final boolean IS_OS_HP_UX = getOSMatchesName("HP-UX");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Irix.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Irix.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_IRIX = getOSMatches("Irix");
> > +    public static final boolean IS_OS_IRIX = getOSMatchesName("Irix");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Linux.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Linux.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_LINUX = getOSMatches("Linux") ||
> > getOSMatches("LINUX");
> > +    public static final boolean IS_OS_LINUX = getOSMatchesName("Linux") ||
> > getOSMatchesName("LINUX");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Mac.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Mac.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_MAC = getOSMatches("Mac");
> > +    public static final boolean IS_OS_MAC = getOSMatchesName("Mac");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Mac.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Mac.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_MAC_OSX = getOSMatches("Mac OS X");
> > +    public static final boolean IS_OS_MAC_OSX = getOSMatchesName("Mac OS
> > X");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is OS/2.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is OS/2.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_OS2 = getOSMatches("OS/2");
> > +    public static final boolean IS_OS_OS2 = getOSMatchesName("OS/2");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Solaris.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Solaris.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_SOLARIS = getOSMatches("Solaris");
> > +    public static final boolean IS_OS_SOLARIS =
> > getOSMatchesName("Solaris");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is SunOS.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is SunOS.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_SUN_OS = getOSMatches("SunOS");
> > +    public static final boolean IS_OS_SUN_OS = getOSMatchesName("SunOS");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is a POSIX compilant system,
> > -     * as in any of AIX, HP-UX, Irix, Linux, MacOSX, Solaris or SUN OS.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is a POSIX compilant system, as in any
> > of AIX, HP-UX, Irix, Linux, MacOSX, Solaris or SUN OS.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.1
> >       */
> > -    public static final boolean IS_OS_UNIX =
> > -        IS_OS_AIX || IS_OS_HP_UX || IS_OS_IRIX || IS_OS_LINUX ||
> > -        IS_OS_MAC_OSX || IS_OS_SOLARIS || IS_OS_SUN_OS;
> > +    public static final boolean IS_OS_UNIX = IS_OS_AIX || IS_OS_HP_UX ||
> > IS_OS_IRIX || IS_OS_LINUX || IS_OS_MAC_OSX || IS_OS_SOLARIS
> > +            || IS_OS_SUN_OS;
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_WINDOWS =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX);
> > +    public static final boolean IS_OS_WINDOWS =
> > getOSMatchesName(OS_NAME_WINDOWS_PREFIX);
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows 2000.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows 2000.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final boolean IS_OS_WINDOWS_2000 =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "5.0");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows 95.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows 95.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final boolean IS_OS_WINDOWS_95 =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.0");
> > -    // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above
> > +    // Java 1.2 running on Windows98 returns 'Windows 95', hence the above
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows 98.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows 98.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final boolean IS_OS_WINDOWS_98 =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.1");
> > -    // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above
> > +    // Java 1.2 running on Windows98 returns 'Windows 95', hence the above
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows ME.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows ME.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final boolean IS_OS_WINDOWS_ME =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "4.9");
> > -    // JDK 1.2 running on WindowsME may return 'Windows 95', hence the
> > above
> > +    // Java 1.2 running on WindowsME may return 'Windows 95', hence the
> > above
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows NT.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows NT.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> > -    public static final boolean IS_OS_WINDOWS_NT =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX + " NT");
> > -    // Windows 2000 returns 'Windows 2000' but may suffer from same JDK1.2
> > problem
> > +    public static final boolean IS_OS_WINDOWS_NT =
> > getOSMatchesName(OS_NAME_WINDOWS_PREFIX + " NT");
> > +    // Windows 2000 returns 'Windows 2000' but may suffer from same Java1.2
> > problem
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows XP.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows XP.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> >       *
> >       * @since 2.0
> >       */
> >      public static final boolean IS_OS_WINDOWS_XP =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "5.1");
> >
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows Vista.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > -     *
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows Vista.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> > +     *
> >       * @since 2.4
> >       */
> > -    public static final boolean IS_OS_WINDOWS_VISTA =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.0");
> > +    public static final boolean IS_OS_WINDOWS_VISTA =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.0");
> >
> >      /**
> > -     * <p>Is <code>true</code> if this is Windows 7.</p>
> > -     *
> > -     * <p>The field will return <code>false</code> if <code>OS_NAME</code>
> > is
> > -     * <code>null</code>.</p>
> > -     *
> > +     * <p>
> > +     * Is <code>true</code> if this is Windows 7.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * The field will return <code>false</code> if <code>OS_NAME</code> is
> > <code>null</code>.
> > +     * </p>
> > +     *
> >       * @since 3.0
> >       */
> > -    public static final boolean IS_OS_WINDOWS_7 =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.1");
> > +    public static final boolean IS_OS_WINDOWS_7 =
> > getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.1");
> >
> > -
> > //-----------------------------------------------------------------------
> >      /**
> > -     * <p>SystemUtils instances should NOT be constructed in standard
> > -     * programming. Instead, the class should be used as
> > -     * <code>SystemUtils.FILE_SEPARATOR</code>.</p>
> > -     *
> > -     * <p>This constructor is public to permit tools that require a
> > JavaBean
> > -     * instance to operate.</p>
> > +     * <p>
> > +     * Gets the Java home directory as a <code>File</code>.
> > +     * </p>
> > +     *
> > +     * @return a directory
> > +     * @throws SecurityException
> > +     *             if a security manager exists and its
> > <code>checkPropertyAccess</code> method doesn't allow access to the
> > specified system
> > +     *             property.
> > +     * @see System#getProperty(String)
> > +     * @since 2.1
> >       */
> > -    public SystemUtils() {
> > -        super();
> > +    public static File getJavaHome() {
> > +        return new File(System.getProperty(JAVA_HOME_KEY));
> >      }
> > -
> > -
> > //-----------------------------------------------------------------------
> > +
> >      /**
> > -     * <p>Gets the Java version number as a <code>float</code>.</p>
> > -     *
> > -     * <p>Example return values:</p>
> > +     * <p>
> > +     * Gets the Java IO temporary directory as a <code>File</code>.
> > +     * </p>
> > +     *
> > +     * @return a directory
> > +     * @throws SecurityException
> > +     *             if a security manager exists and its
> > <code>checkPropertyAccess</code> method doesn't allow access to the
> > specified system
> > +     *             property.
> > +     * @see System#getProperty(String)
> > +     * @since 2.1
> > +     */
> > +    public static File getJavaIoTmpDir() {
> > +        return new File(System.getProperty(JAVA_IO_TMPDIR_KEY));
> > +    }
> > +
> > +    /**
> > +     * <p>
> > +     * Gets the Java version number as a <code>float</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example return values:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>1.2f</code> for JDK 1.2
> > -     *  <li><code>1.31f</code> for JDK 1.3.1
> > +     * <li><code>1.2f</code> for Java 1.2</li>
> > +     * <li><code>1.31f</code> for Java 1.3.1</li>
> > +     * <li><code>1.6f</code> for Java 1.6.0_20</li>
> >       * </ul>
> >       *
> > -     * <p>Patch releases are not reported.
> > -     * Zero is returned if {@link #JAVA_VERSION_TRIMMED} is
> > <code>null</code>.</p>
> > +     * <p>
> > +     * Patch releases are not reported.
> > +     * </p>
> >       *
> > -     * @return the version, for example 1.31f for JDK 1.3.1
> > +     * @return the version, for example 1.31f for Java 1.3.1
> >       */
> >      private static float getJavaVersionAsFloat() {
> > -        if (JAVA_VERSION_TRIMMED == null) {
> > -            return 0f;
> > -        }
> > -        String str = JAVA_VERSION_TRIMMED.substring(0, 3);
> > -        if (JAVA_VERSION_TRIMMED.length() >= 5) {
> > -            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
> > -        }
> > -        try {
> > -            return Float.parseFloat(str);
> > -        } catch (Exception ex) {
> > -            return 0;
> > -        }
> > +        return
> > toVersionFloat(toJavaVersionIntArray(SystemUtils.JAVA_VERSION,
> > JAVA_VERSION_TRIM_SIZE));
> >      }
> > -
> > +
> >      /**
> > -     * <p>Gets the Java version number as an <code>int</code>.</p>
> > -     *
> > -     * <p>Example return values:</p>
> > +     * <p>
> > +     * Gets the Java version number as an <code>int</code>.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example return values:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>120</code> for JDK 1.2
> > -     *  <li><code>131</code> for JDK 1.3.1
> > +     * <li><code>120</code> for Java 1.2</li>
> > +     * <li><code>131</code> for Java 1.3.1</li>
> > +     * <li><code>160</code> for Java 1.6.0_20</li>
> >       * </ul>
> >       *
> > -     * <p>Patch releases are not reported.
> > -     * Zero is returned if {@link #JAVA_VERSION_TRIMMED} is
> > <code>null</code>.</p>
> > +     * <p>
> > +     * Patch releases are not reported.
> > +     * </p>
> >       *
> > -     * @return the version, for example 131 for JDK 1.3.1
> > +     * @return the version, for example 131 for Java 1.3.1
> >       */
> >      private static int getJavaVersionAsInt() {
> > -        if (JAVA_VERSION_TRIMMED == null) {
> > -            return 0;
> > -        }
> > -        String str = JAVA_VERSION_TRIMMED.substring(0, 1);
> > -        str = str + JAVA_VERSION_TRIMMED.substring(2, 3);
> > -        if (JAVA_VERSION_TRIMMED.length() >= 5) {
> > -            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
> > -        } else {
> > -            str = str + "0";
> > -        }
> > -        try {
> > -            return Integer.parseInt(str);
> > -        } catch (Exception ex) {
> > -            return 0;
> > -        }
> > +        return toVersionInt(toJavaVersionIntArray(SystemUtils.JAVA_VERSION,
> > JAVA_VERSION_TRIM_SIZE));
> > +    }
> > +
> > +    /**
> > +     * <p>
> > +     * Decides if the Java version matches.
> > +     * </p>
> > +     *
> > +     * @param versionPrefix
> > +     *            the prefix for the java version
> > +     * @return true if matches, or false if not or can't determine
> > +     */
> > +    private static boolean getJavaVersionMatches(String versionPrefix) {
> > +        return isJavaVersionMatch(JAVA_VERSION_TRIMMED, versionPrefix);
> >      }
> >
> >      /**
> > @@ -1195,54 +1419,42 @@ public class SystemUtils {
> >      }
> >
> >      /**
> > -     * <p>Decides if the java version matches.</p>
> > +     * Decides if the operating system matches.
> >       *
> > -     * @param versionPrefix  the prefix for the java version
> > +     * @param osNamePrefix
> > +     *            the prefix for the os name
> > +     * @param osVersionPrefix
> > +     *            the prefix for the version
> >       * @return true if matches, or false if not or can't determine
> >       */
> > -    private static boolean getJavaVersionMatches(String versionPrefix) {
> > -        if (JAVA_VERSION_TRIMMED == null) {
> > -            return false;
> > -        }
> > -        return JAVA_VERSION_TRIMMED.startsWith(versionPrefix);
> > -    }
> > -
> > -    /**
> > -     * <p>Decides if the operating system matches.</p>
> > -     *
> > -     * @param osNamePrefix  the prefix for the os name
> > -     * @return true if matches, or false if not or can't determine
> > -     */
> > -    private static boolean getOSMatches(String osNamePrefix) {
> > -        if (OS_NAME == null) {
> > -            return false;
> > -        }
> > -        return OS_NAME.startsWith(osNamePrefix);
> > -    }
> > +    private static boolean getOSMatches(String osNamePrefix, String
> > osVersionPrefix) {
> > +        return isOSMatch(OS_NAME, OS_VERSION, osNamePrefix,
> > osVersionPrefix);
> > +    }
> >
> >      /**
> > -     * <p>Decides if the operating system matches.</p>
> > +     * Decides if the operating system matches.
> >       *
> > -     * @param osNamePrefix  the prefix for the os name
> > -     * @param osVersionPrefix  the prefix for the version
> > +     * @param osNamePrefix
> > +     *            the prefix for the os name
> >       * @return true if matches, or false if not or can't determine
> >       */
> > -    private static boolean getOSMatches(String osNamePrefix, String
> > osVersionPrefix) {
> > -        if (OS_NAME == null || OS_VERSION == null) {
> > -            return false;
> > -        }
> > -        return OS_NAME.startsWith(osNamePrefix) &&
> > OS_VERSION.startsWith(osVersionPrefix);
> > -    }
> > +    private static boolean getOSMatchesName(String osNamePrefix) {
> > +        return isOSNameMatch(OS_NAME, osNamePrefix);
> > +    }
> >
> > -
> > //-----------------------------------------------------------------------
> > +    //
> > -----------------------------------------------------------------------
> >      /**
> > -     * <p>Gets a System property, defaulting to <code>null</code> if the
> > property
> > -     * cannot be read.</p>
> > -     *
> > -     * <p>If a <code>SecurityException</code> is caught, the return
> > -     * value is <code>null</code> and a message is written to
> > <code>System.err</code>.</p>
> > +     * <p>
> > +     * Gets a System property, defaulting to <code>null</code> if the
> > property cannot be read.
> > +     * </p>
> >       *
> > -     * @param property the system property name
> > +     * <p>
> > +     * If a <code>SecurityException</code> is caught, the return value is
> > <code>null</code> and a message is written to
> > +     * <code>System.err</code>.
> > +     * </p>
> > +     *
> > +     * @param property
> > +     *            the system property name
> >       * @return the system property value or <code>null</code> if a security
> > problem occurs
> >       */
> >      private static String getSystemProperty(String property) {
> > @@ -1250,43 +1462,94 @@ public class SystemUtils {
> >              return System.getProperty(property);
> >          } catch (SecurityException ex) {
> >              // we are not allowed to look at this property
> > -            System.err.println(
> > -                "Caught a SecurityException reading the system property '"
> > + property
> > -                + "'; the SystemUtils property value will default to null."
> > -            );
> > +            System.err.println("Caught a SecurityException reading the
> > system property '" + property
> > +                    + "'; the SystemUtils property value will default to
> > null.");
> >              return null;
> >          }
> >      }
> > -
> > +
> > +    /**
> > +     * <p>
> > +     * Gets the user directory as a <code>File</code>.
> > +     * </p>
> > +     *
> > +     * @return a directory
> > +     * @throws SecurityException
> > +     *             if a security manager exists and its
> > <code>checkPropertyAccess</code> method doesn't allow access to the
> > specified system
> > +     *             property.
> > +     * @see System#getProperty(String)
> > +     * @since 2.1
> > +     */
> > +    public static File getUserDir() {
> > +        return new File(System.getProperty(USER_DIR_KEY));
> > +    }
> > +
> >      /**
> > -     * <p>Is the Java version at least the requested version.</p>
> > -     *
> > -     * <p>Example input:</p>
> > +     * <p>
> > +     * Gets the user home directory as a <code>File</code>.
> > +     * </p>
> > +     *
> > +     * @return a directory
> > +     * @throws SecurityException
> > +     *             if a security manager exists and its
> > <code>checkPropertyAccess</code> method doesn't allow access to the
> > specified system
> > +     *             property.
> > +     * @see System#getProperty(String)
> > +     * @since 2.1
> > +     */
> > +    public static File getUserHome() {
> > +        return new File(System.getProperty(USER_HOME_KEY));
> > +    }
> > +
> > +    /**
> > +     * Returns whether the {@link #JAVA_AWT_HEADLESS} value is
> > <code>true</code>.
> > +     *
> > +     * @return <code>true</code> if <code>JAVA_AWT_HEADLESS</code> is
> > <code>"true"</code>, <code>false</code> otherwise.
> > +     *
> > +     * @see #JAVA_AWT_HEADLESS
> > +     * @since 2.1
> > +     * @since Java 1.4
> > +     */
> > +    public static boolean isJavaAwtHeadless() {
> > +        return JAVA_AWT_HEADLESS != null ?
> > JAVA_AWT_HEADLESS.equals(Boolean.TRUE.toString()) : false;
> > +    }
> > +
> > +    /**
> > +     * <p>
> > +     * Is the Java version at least the requested version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example input:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>1.2f</code> to test for JDK 1.2</li>
> > -     *  <li><code>1.31f</code> to test for JDK 1.3.1</li>
> > +     * <li><code>1.2f</code> to test for Java 1.2</li>
> > +     * <li><code>1.31f</code> to test for Java 1.3.1</li>
> >       * </ul>
> >       *
> > -     * @param requiredVersion  the required version, for example 1.31f
> > -     * @return <code>true</code> if the actual version is equal or greater
> > -     *  than the required version
> > +     * @param requiredVersion
> > +     *            the required version, for example 1.31f
> > +     * @return <code>true</code> if the actual version is equal or greater
> > than the required version
> >       */
> >      public static boolean isJavaVersionAtLeast(float requiredVersion) {
> >          return JAVA_VERSION_FLOAT >= requiredVersion;
> >      }
> > -
> > +
> >      /**
> > -     * <p>Is the Java version at least the requested version.</p>
> > -     *
> > -     * <p>Example input:</p>
> > +     * <p>
> > +     * Is the Java version at least the requested version.
> > +     * </p>
> > +     *
> > +     * <p>
> > +     * Example input:
> > +     * </p>
> >       * <ul>
> > -     *  <li><code>120</code> to test for JDK 1.2 or greater</li>
> > -     *  <li><code>131</code> to test for JDK 1.3.1 or greater</li>
> > +     * <li><code>120</code> to test for Java 1.2 or greater</li>
> > +     * <li><code>131</code> to test for Java 1.3.1 or greater</li>
> >       * </ul>
> >       *
> > -     * @param requiredVersion  the required version, for example 131
> >
> > [... 323 lines stripped ...]
> >
> >
> > --------------- Weitergeleitete Nachricht (Ende)
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org

Mime
View raw message