scolebourne    2004/11/11 16:48:41

  Modified:    lang/src/java/org/apache/commons/lang SystemUtils.java
               lang/src/test/org/apache/commons/lang SystemUtilsTest.java
               lang     project.xml
  Log:
  Handle Java version with text prefix, as found on HP-UX

  bug 32123, from Jason Gritman
  
  Revision  Changes    Path
  1.38      +48 -16    
jakarta-commons/lang/src/java/org/apache/commons/lang/SystemUtils.java
  
  Index: SystemUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/SystemUtils.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- SystemUtils.java  6 Nov 2004 01:27:59 -0000       1.37
  +++ SystemUtils.java  12 Nov 2004 00:48:41 -0000      1.38
  @@ -32,6 +32,7 @@
    * @author Michael Becke
    * @author Tetsuya Kaneuchi
    * @author Rafal Krupinski
  + * @author Jason Gritman
    * @since 1.0
    * @version $Id$
    */
  @@ -782,9 +783,23 @@
   
       // Java version
       //-----------------------------------------------------------------------
  -    // These MUST be declared after those above as they depend on the
  +    // 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 [EMAIL PROTECTED] 
#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>
        *
  @@ -1086,17 +1101,17 @@
        * </ul>
        * 
        * <p>Patch releases are not reported.
  -     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION} is 
<code>null</code>.</p>
  +     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION_TRIMMED} is 
<code>null</code>.</p>
        * 
        * @return the version, for example 1.31f for JDK 1.3.1
        */
       private static float getJavaVersionAsFloat() {
  -        if (JAVA_VERSION == null) {
  +        if (JAVA_VERSION_TRIMMED == null) {
               return 0f;
           }
  -        String str = JAVA_VERSION.substring(0, 3);
  -        if (JAVA_VERSION.length() >= 5) {
  -            str = str + JAVA_VERSION.substring(4, 5);
  +        String str = JAVA_VERSION_TRIMMED.substring(0, 3);
  +        if (JAVA_VERSION_TRIMMED.length() >= 5) {
  +            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
           }
           return Float.parseFloat(str);
       }
  @@ -1111,18 +1126,18 @@
        * </ul>
        * 
        * <p>Patch releases are not reported.
  -     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION} is 
<code>null</code>.</p>
  +     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION_TRIMMED} is 
<code>null</code>.</p>
        * 
        * @return the version, for example 131 for JDK 1.3.1
        */
       private static int getJavaVersionAsInt() {
  -        if (JAVA_VERSION == null) {
  +        if (JAVA_VERSION_TRIMMED == null) {
               return 0;
           }
  -        String str = JAVA_VERSION.substring(0, 1);
  -        str = str + JAVA_VERSION.substring(2, 3);
  -        if (JAVA_VERSION.length() >= 5) {
  -            str = str + JAVA_VERSION.substring(4, 5);
  +        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";
           }
  @@ -1130,16 +1145,33 @@
       }
   
       /**
  +     * Trims the text of the java version to start with numbers.
  +     * 
  +     * @return the trimmed java version
  +     */
  +    private static String getJavaVersionTrimmed() {
  +        if (JAVA_VERSION != null) {
  +            for (int i = 0; i < JAVA_VERSION.length(); i++) {
  +                char ch = JAVA_VERSION.charAt(i);
  +                if (ch >= '0' && ch <= '9') {
  +                    return JAVA_VERSION.substring(i);
  +                }
  +            }
  +        }
  +        return null;
  +    }
  +
  +    /**
        * <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) {
  -        if (JAVA_VERSION == null) {
  +        if (JAVA_VERSION_TRIMMED == null) {
               return false;
           }
  -        return JAVA_VERSION.startsWith(versionPrefix);
  +        return JAVA_VERSION_TRIMMED.startsWith(versionPrefix);
       }    
       
       /**
  
  
  
  1.11      +77 -35    
jakarta-commons/lang/src/test/org/apache/commons/lang/SystemUtilsTest.java
  
  Index: SystemUtilsTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/SystemUtilsTest.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SystemUtilsTest.java      25 Feb 2004 00:25:29 -0000      1.10
  +++ SystemUtilsTest.java      12 Nov 2004 00:48:41 -0000      1.11
  @@ -51,6 +51,8 @@
       //-----------------------------------------------------------------------
       private String JAVA_VERSION;
   
  +    private String JAVA_VERSION_TRIMMED;
  +
       private String OS_NAME;
   
       private String OS_VERSION;
  @@ -60,51 +62,41 @@
       }
   
       /**
  -     * <p>
  -     * Get the Java version number as a <code>float</code>.
  -     * </p>
  -     * 
  -     * <p>
  -     * Example output:
  -     * </p>
  +     * <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 JDK 1.2
  +     *  <li><code>1.31f</code> for JDK 1.3.1
        * </ul>
        * 
  -     * <p>
  -     * Patch releases are not reported. Zero is returned if JAVA_VERSION is 
<code>null</code>.
  -     * </p>
  +     * <p>Patch releases are not reported.
  +     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION_TRIMMED} is 
<code>null</code>.</p>
        * 
        * @return the version, for example 1.31f for JDK 1.3.1
        */
       private float getJavaVersionAsFloat() {
  -        if (JAVA_VERSION == null) {
  +        if (JAVA_VERSION_TRIMMED == null) {
               return 0f;
           }
  -        String str = JAVA_VERSION.substring(0, 3);
  -        if (JAVA_VERSION.length() >= 5) {
  -            str = str + JAVA_VERSION.substring(4, 5);
  +        String str = JAVA_VERSION_TRIMMED.substring(0, 3);
  +        if (JAVA_VERSION_TRIMMED.length() >= 5) {
  +            str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
           }
           return Float.parseFloat(str);
       }
   
       /**
  -     * <p>
  -     * Get the Java version number as an <code>int</code>.
  -     * </p>
  -     * 
  -     * <p>
  -     * Example output:
  -     * </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 JDK 1.2
  +     *  <li><code>131</code> for JDK 1.3.1
        * </ul>
        * 
  -     * <p>
  -     * Patch releases are not reported. Zero is returned if JAVA_VERSION is 
<code>null</code>.
  -     * </p>
  +     * <p>Patch releases are not reported.
  +     * Zero is returned if [EMAIL PROTECTED] #JAVA_VERSION_TRIMMED} is 
<code>null</code>.</p>
        * 
        * @return the version, for example 131 for JDK 1.3.1
        */
  @@ -112,10 +104,10 @@
           if (JAVA_VERSION == null) {
               return 0;
           }
  -        String str = JAVA_VERSION.substring(0, 1);
  -        str = str + JAVA_VERSION.substring(2, 3);
  -        if (JAVA_VERSION.length() >= 5) {
  -            str = str + JAVA_VERSION.substring(4, 5);
  +        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";
           }
  @@ -123,6 +115,23 @@
       }
   
       /**
  +     * Trims the text of the java version to start with numbers.
  +     * 
  +     * @return the trimmed java version
  +     */
  +    private String getJavaVersionTrimmed() {
  +        if (JAVA_VERSION != null) {
  +            for (int i = 0; i < JAVA_VERSION.length(); i++) {
  +                char ch = JAVA_VERSION.charAt(i);
  +                if (ch >= '0' && ch <= '9') {
  +                    return JAVA_VERSION.substring(i);
  +                }
  +            }
  +        }
  +        return null;
  +    }
  +
  +    /**
        * Decides if the java version matches.
        * 
        * @param versionPrefix
  @@ -130,10 +139,10 @@
        * @return true if matches, or false if not or can't determine
        */
       private boolean getJavaVersionMatches(String versionPrefix) {
  -        if (JAVA_VERSION == null) {
  +        if (JAVA_VERSION_TRIMMED == null) {
               return false;
           }
  -        return JAVA_VERSION.startsWith(versionPrefix);
  +        return JAVA_VERSION_TRIMMED.startsWith(versionPrefix);
       }
   
       /**
  @@ -286,44 +295,68 @@
   
       public void testJavaVersionAsFloat() {
           JAVA_VERSION = null;
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(0f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.1f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.2";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.2f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.3.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.3f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.3.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.31f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.4.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.4f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.4.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.41f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.5.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.5f, getJavaVersionAsFloat(), 0.000001f);
           JAVA_VERSION = "1.6.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(1.6f, getJavaVersionAsFloat(), 0.000001f);
  +        JAVA_VERSION = "JavaVM-1.3.1";  //HP-UX
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
  +        assertEquals(1.31f, getJavaVersionAsFloat(), 0.000001f);
       }
   
       public void testJavaVersionAsInt() {
           JAVA_VERSION = null;
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(0, getJavaVersionAsInt());
           JAVA_VERSION = "1.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(110, getJavaVersionAsInt());
           JAVA_VERSION = "1.2";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(120, getJavaVersionAsInt());
           JAVA_VERSION = "1.3.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(130, getJavaVersionAsInt());
           JAVA_VERSION = "1.3.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(131, getJavaVersionAsInt());
           JAVA_VERSION = "1.4.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(140, getJavaVersionAsInt());
           JAVA_VERSION = "1.4.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(141, getJavaVersionAsInt());
           JAVA_VERSION = "1.5.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(150, getJavaVersionAsInt());
           JAVA_VERSION = "1.6.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(160, getJavaVersionAsInt());
  +        JAVA_VERSION = "JavaVM-1.3.1";  //HP-UX
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
  +        assertEquals(131, getJavaVersionAsInt());
       }
   
       public void testJavaVersionAtLeastFloat() {
  @@ -347,54 +380,63 @@
       //-----------------------------------------------------------------------
       public void testJavaVersionMatches() {
           JAVA_VERSION = null;
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(true, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.2";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(true, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.3.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(true, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.3.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(true, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.4.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(true, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.4.1";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(true, getJavaVersionMatches("1.4"));
           assertEquals(false, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.5.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
           assertEquals(false, getJavaVersionMatches("1.4"));
           assertEquals(true, getJavaVersionMatches("1.5"));
           JAVA_VERSION = "1.6.0";
  +        JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
           assertEquals(false, getJavaVersionMatches("1.1"));
           assertEquals(false, getJavaVersionMatches("1.2"));
           assertEquals(false, getJavaVersionMatches("1.3"));
  
  
  
  1.37      +3 -0      jakarta-commons/lang/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/project.xml,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- project.xml       13 Jul 2004 12:46:02 -0000      1.36
  +++ project.xml       12 Nov 2004 00:48:41 -0000      1.37
  @@ -222,6 +222,9 @@
         <name>Pete Gieser</name>
       </contributor>
       <contributor>
  +      <name>Jason Gritman</name>
  +    </contributor>
  +    <contributor>
         <name>Matthew Hawthorne</name>
       </contributor>
       <contributor>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to