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 ) );