You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2011/08/12 16:43:14 UTC

svn commit: r1157129 - in /maven/sandbox/trunk/plexus-utils-commons-bridge: plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java

Author: struberg
Date: Fri Aug 12 14:43:13 2011
New Revision: 1157129

URL: http://svn.apache.org/viewvc?rev=1157129&view=rev
Log:
MSANDBOX-51 fork Os.java over from Apache ant.

We also needed to make a few static fields public 
due to compat reasons with the old plexus-utils.

Added:
    maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java   (with props)
Modified:
    maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java

Added: maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java?rev=1157129&view=auto
==============================================================================
--- maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java (added)
+++ maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java Fri Aug 12 14:43:13 2011
@@ -0,0 +1,448 @@
+package org.codehaus.plexus.util;
+
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+
+/**
+ * <p>Condition that tests the OS type.</p>
+ *
+ * <p>This class got copied over from Apache ANT.
+ * Even the 'original' version from plexus-utils was
+ * only an ANT fork!<br/>
+ * The last time it got copied was on 2011-08-12</p>
+ *
+ * <p>When merging changes please take care of the special
+ * OS_FAMILY handling in this version of Os.java!</p>
+ *
+ */
+public class Os
+{
+    public static final String OS_NAME =
+            System.getProperty( "os.name" ).toLowerCase( Locale.ENGLISH );
+    public static final String OS_ARCH =
+            System.getProperty( "os.arch" ).toLowerCase( Locale.ENGLISH );
+    public static final String OS_VERSION =
+            System.getProperty( "os.version" ).toLowerCase( Locale.ENGLISH );
+    public static final String PATH_SEP =
+            System.getProperty( "path.separator" );
+    public static final String OS_FAMILY =
+            getOsFamily();
+
+    // store the valid families
+    private static final Set validFamilies = getValidFamilies();
+
+
+    /**
+     * OS family to look for
+     */
+    private String family;
+    /**
+     * Name of OS
+     */
+    private String name;
+    /**
+     * version of OS
+     */
+    private String version;
+    /**
+     * OS architecture
+     */
+    private String arch;
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_WINDOWS = "windows";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_WIN9X = "win9x";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_NT = "winnt";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_OS2 = "os/2";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_NETWARE = "netware";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_DOS = "dos";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_MAC = "mac";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_TANDEM = "tandem";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_UNIX = "unix";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_OPENVMS = "openvms";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_ZOS = "z/os";
+    /**
+     * OS family that can be tested for. {@value}
+     */
+    public static final String FAMILY_OS400 = "os/400";
+
+    /**
+     * OpenJDK is reported to call MacOS X "Darwin"
+     *
+     * @see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=44889">bugzilla issue</a>
+     * @see <a href="https://issues.apache.org/jira/browse/HADOOP-3318">HADOOP-3318</a>
+     */
+    private static final String DARWIN = "darwin";
+
+
+    /**
+     * Initializes the set of valid families.
+     */
+    public static Set getValidFamilies()
+    {
+        if ( validFamilies != null )
+        {
+            return validFamilies;
+        }
+
+        Set valid = new HashSet();
+        valid.add( FAMILY_DOS );
+        valid.add( FAMILY_MAC );
+        valid.add( FAMILY_NETWARE );
+        valid.add( FAMILY_NT );
+        valid.add( FAMILY_OPENVMS );
+        valid.add( FAMILY_OS2 );
+        valid.add( FAMILY_OS400 );
+        valid.add( FAMILY_TANDEM );
+        valid.add( FAMILY_UNIX );
+        valid.add( FAMILY_WIN9X );
+        valid.add( FAMILY_WINDOWS );
+        valid.add( FAMILY_ZOS );
+
+        return Collections.unmodifiableSet( valid );
+    }
+
+    /**
+     * Default constructor
+     */
+    public Os()
+    {
+        //default
+    }
+
+    /**
+     * Constructor that sets the family attribute
+     *
+     * @param family a String value
+     */
+    public Os( String family )
+    {
+        setFamily( family );
+    }
+
+    /**
+     * Sets the desired OS family type
+     *
+     * @param f The OS family type desired<br />
+     *          Possible values:<br />
+     *          <ul>
+     *          <li>dos</li>
+     *          <li>mac</li>
+     *          <li>netware</li>
+     *          <li>os/2</li>
+     *          <li>tandem</li>
+     *          <li>unix</li>
+     *          <li>windows</li>
+     *          <li>win9x</li>
+     *          <li>z/os</li>
+     *          <li>os/400</li>
+     *          </ul>
+     */
+    public void setFamily( String f )
+    {
+        family = f.toLowerCase( Locale.ENGLISH );
+    }
+
+    /**
+     * Sets the desired OS name
+     *
+     * @param name The OS name
+     */
+    public void setName( String name )
+    {
+        this.name = name.toLowerCase( Locale.ENGLISH );
+    }
+
+    /**
+     * Sets the desired OS architecture
+     *
+     * @param arch The OS architecture
+     */
+    public void setArch( String arch )
+    {
+        this.arch = arch.toLowerCase( Locale.ENGLISH );
+    }
+
+    /**
+     * Sets the desired OS version
+     *
+     * @param version The OS version
+     */
+    public void setVersion( String version )
+    {
+        this.version = version.toLowerCase( Locale.ENGLISH );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the type of
+     * that set in setFamily.
+     *
+     * @return true if the os matches.
+     * @throws Exception if there is an error.
+     * @see Os#setFamily(String)
+     */
+    public boolean eval() throws Exception
+    {
+        return isOs( family, name, arch, version );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the
+     * given OS family.
+     *
+     * @param family the family to check for
+     * @return true if the OS matches
+     * @since 1.5
+     */
+    public static boolean isFamily( String family )
+    {
+        return isOs( family, null, null, null );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the
+     * given OS name.
+     *
+     * @param name the OS name to check for
+     * @return true if the OS matches
+     * @since 1.7
+     */
+    public static boolean isName( String name )
+    {
+        return isOs( null, name, null, null );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the
+     * given OS architecture.
+     *
+     * @param arch the OS architecture to check for
+     * @return true if the OS matches
+     * @since 1.7
+     */
+    public static boolean isArch( String arch )
+    {
+        return isOs( null, null, arch, null );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the
+     * given OS version.
+     *
+     * @param version the OS version to check for
+     * @return true if the OS matches
+     * @since 1.7
+     */
+    public static boolean isVersion( String version )
+    {
+        return isOs( null, null, null, version );
+    }
+
+    /**
+     * Determines if the OS on which Ant is executing matches the
+     * given OS family, name, architecture and version
+     *
+     * @param family  The OS family
+     * @param name    The OS name
+     * @param arch    The OS architecture
+     * @param version The OS version
+     * @return true if the OS matches
+     * @since 1.7
+     */
+    public static boolean isOs( String family, String name, String arch,
+                                String version )
+    {
+        boolean retValue = false;
+
+        if ( family != null || name != null || arch != null
+                || version != null )
+        {
+
+            boolean isFamily = true;
+            boolean isName = true;
+            boolean isArch = true;
+            boolean isVersion = true;
+
+            if ( family != null )
+            {
+
+                //windows probing logic relies on the word 'windows' in
+                //the OS
+                boolean isWindows = OS_NAME.indexOf( FAMILY_WINDOWS ) > -1;
+                boolean is9x = false;
+                boolean isNT = false;
+                if ( isWindows )
+                {
+                    //there are only four 9x platforms that we look for
+                    is9x = (OS_NAME.indexOf( "95" ) >= 0
+                            || OS_NAME.indexOf( "98" ) >= 0
+                            || OS_NAME.indexOf( "me" ) >= 0
+                            //wince isn't really 9x, but crippled enough to
+                            //be a muchness. Ant doesnt run on CE, anyway.
+                            || OS_NAME.indexOf( "ce" ) >= 0);
+                    isNT = !is9x;
+                }
+                if ( family.equals( FAMILY_WINDOWS ) )
+                {
+                    isFamily = isWindows;
+                }
+                else if ( family.equals( FAMILY_WIN9X ) )
+                {
+                    isFamily = isWindows && is9x;
+                }
+                else if ( family.equals( FAMILY_NT ) )
+                {
+                    isFamily = isWindows && isNT;
+                }
+                else if ( family.equals( FAMILY_OS2 ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_OS2 ) > -1;
+                }
+                else if ( family.equals( FAMILY_NETWARE ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_NETWARE ) > -1;
+                }
+                else if ( family.equals( FAMILY_DOS ) )
+                {
+                    isFamily = PATH_SEP.equals( ";" ) && !isFamily( FAMILY_NETWARE );
+                }
+                else if ( family.equals( FAMILY_MAC ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_MAC ) > -1
+                            || OS_NAME.indexOf( DARWIN ) > -1;
+                }
+                else if ( family.equals( FAMILY_TANDEM ) )
+                {
+                    isFamily = OS_NAME.indexOf( "nonstop_kernel" ) > -1;
+                }
+                else if ( family.equals( FAMILY_UNIX ) )
+                {
+                    isFamily = PATH_SEP.equals( ":" )
+                            && !isFamily( FAMILY_OPENVMS )
+                            && (!isFamily( FAMILY_MAC ) || OS_NAME.endsWith( "x" )
+                            || OS_NAME.indexOf( DARWIN ) > -1);
+                }
+                else if ( family.equals( FAMILY_ZOS ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_ZOS ) > -1
+                            || OS_NAME.indexOf( "os/390" ) > -1;
+                }
+                else if ( family.equals( FAMILY_OS400 ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_OS400 ) > -1;
+                }
+                else if ( family.equals( FAMILY_OPENVMS ) )
+                {
+                    isFamily = OS_NAME.indexOf( FAMILY_OPENVMS ) > -1;
+                }
+                else
+                {
+                    throw new RuntimeException(
+                            "Don\'t know how to detect os family \""
+                                    + family + "\"" );
+                }
+            }
+            if ( name != null )
+            {
+                isName = name.equals( OS_NAME );
+            }
+            if ( arch != null )
+            {
+                isArch = arch.equals( OS_ARCH );
+            }
+            if ( version != null )
+            {
+                isVersion = version.equals( OS_VERSION );
+            }
+            retValue = isFamily && isName && isArch && isVersion;
+        }
+        return retValue;
+    }
+
+    /**
+     * Helper method to determine the current OS family.
+     *
+     * @return name of current OS family.
+     */
+    private static String getOsFamily()
+    {
+        Set families = getValidFamilies();
+
+        Iterator iter = families.iterator();
+        while ( iter.hasNext() )
+        {
+            String fam = (String) iter.next();
+            if ( Os.isFamily( fam ) )
+            {
+                return fam;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Test if the given family String represents a valid Family
+     * @param family
+     * @return <code>true</code> if 'family' represents a valid OS-Familiy, <code>false</code> otherwise.
+     */
+    public static boolean isValidFamily( String family )
+    {
+        return validFamilies.contains( family );
+    }
+
+
+}

Propchange: maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-commons-bridge/src/main/java/org/codehaus/plexus/util/Os.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java?rev=1157129&r1=1157128&r2=1157129&view=diff
==============================================================================
--- maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java (original)
+++ maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/codehaus/plexus/util/OsTest.java Fri Aug 12 14:43:13 2011
@@ -26,7 +26,6 @@ import org.junit.Before;
 import org.junit.After;
 import org.junit.Assert;
 
-import javax.crypto.spec.OAEPParameterSpec;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.Set;
@@ -147,9 +146,8 @@ public class OsTest extends Assert
     {
         Set<String> osFamilies = Os.getValidFamilies();
 
-        assertThat( "OsFamilies Set size"
-                  , osFamilies.size()
-                  , is(11) );
+        assertTrue( "OsFamilies Set size"
+                  , osFamilies.size() >= 11 );
         
         assert( osFamilies.contains( Os.FAMILY_DOS ) );
         assert( osFamilies.contains( Os.FAMILY_MAC ) );