You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ad...@apache.org on 2002/08/20 09:42:46 UTC

cvs commit: jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/util Os.java OsFamily.java

adammurdoch    2002/08/20 00:42:46

  Modified:    vfs/src/java/org/apache/commons/vfs/provider/local
                        DefaultLocalFileSystemProvider.java
  Added:       vfs/src/java/org/apache/commons/vfs/util Os.java
                        OsFamily.java
  Removed:     vfs/src/java/org/apache/commons/vfs/nativelib Os.java
                        OsFamily.java
  Log:
  Renamed vfs.nativelib as vfs.util.
  
  Revision  Changes    Path
  1.3       +1 -1      jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileSystemProvider.java
  
  Index: DefaultLocalFileSystemProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileSystemProvider.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultLocalFileSystemProvider.java	17 Jul 2002 10:23:42 -0000	1.2
  +++ DefaultLocalFileSystemProvider.java	20 Aug 2002 07:42:46 -0000	1.3
  @@ -10,7 +10,7 @@
   import java.io.File;
   import org.apache.commons.vfs.FileObject;
   import org.apache.commons.vfs.FileSystemException;
  -import org.apache.commons.vfs.nativelib.Os;
  +import org.apache.commons.vfs.util.Os;
   import org.apache.commons.vfs.provider.AbstractFileSystemProvider;
   import org.apache.commons.vfs.provider.DefaultFileName;
   import org.apache.commons.vfs.provider.FileSystem;
  
  
  
  1.1                  jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/util/Os.java
  
  Index: Os.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.vfs.util;
  
  import java.util.ArrayList;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Locale;
  import java.util.Set;
  import org.apache.commons.vfs.util.OsFamily;
  
  /**
   * Class to help determining the OS.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   */
  public final class Os
  {
      private static final String OS_NAME =
          System.getProperty( "os.name" ).toLowerCase( Locale.US );
      private static final String OS_ARCH =
          System.getProperty( "os.arch" ).toLowerCase( Locale.US );
      private static final String OS_VERSION =
          System.getProperty( "os.version" ).toLowerCase( Locale.US );
      private static final String PATH_SEP =
          System.getProperty( "path.separator" );
      private static final OsFamily OS_FAMILY;
      private static final OsFamily[] OS_ALL_FAMILIES;
  
      /** All Windows based OSes. */
      public static final OsFamily OS_FAMILY_WINDOWS = new OsFamily( "windows" );
  
      /** All DOS based OSes. */
      public static final OsFamily OS_FAMILY_DOS = new OsFamily( "dos" );
  
      /** All Windows NT based OSes. */
      public static final OsFamily OS_FAMILY_WINNT =
          new OsFamily( "nt", new OsFamily[]{OS_FAMILY_WINDOWS} );
  
      /** All Windows 9x based OSes. */
      public static final OsFamily OS_FAMILY_WIN9X =
          new OsFamily( "win9x", new OsFamily[]{OS_FAMILY_WINDOWS, OS_FAMILY_DOS} );
  
      /** OS/2 */
      public static final OsFamily OS_FAMILY_OS2 =
          new OsFamily( "os/2", new OsFamily[]{OS_FAMILY_DOS} );
  
      /** Netware */
      public static final OsFamily OS_FAMILY_NETWARE =
          new OsFamily( "netware" );
  
      /** All UNIX based OSes. */
      public static final OsFamily OS_FAMILY_UNIX = new OsFamily( "unix" );
  
      /** All Mac based OSes. */
      public static final OsFamily OS_FAMILY_MAC = new OsFamily( "mac" );
  
      /** OSX */
      public static final OsFamily OS_FAMILY_OSX =
          new OsFamily( "osx", new OsFamily[]{OS_FAMILY_UNIX, OS_FAMILY_MAC} );
  
      private static final OsFamily[] ALL_FAMILIES = new OsFamily[]
      {
          OS_FAMILY_DOS,
          OS_FAMILY_MAC,
          OS_FAMILY_NETWARE,
          OS_FAMILY_OS2,
          OS_FAMILY_OSX,
          OS_FAMILY_UNIX,
          OS_FAMILY_WINDOWS,
          OS_FAMILY_WINNT,
          OS_FAMILY_WIN9X
      };
  
      static
      {
          OS_FAMILY = determineOsFamily();
          OS_ALL_FAMILIES = determineAllFamilies();
      }
  
      /**
       * Private constructor to block instantiation.
       */
      private Os()
      {
      }
  
      /**
       * Determines if the OS on which Ant is executing matches the given OS
       * version.
       */
      public static boolean isVersion( final String version )
      {
          return isOs( (OsFamily)null, null, null, version );
      }
  
      /**
       * Determines if the OS on which Ant is executing matches the given OS
       * architecture.
       */
      public static boolean isArch( final String arch )
      {
          return isOs( (OsFamily)null, null, arch, null );
      }
  
      /**
       * Determines if the OS on which Ant is executing matches the given OS
       * family.
       */
      public static boolean isFamily( final String family )
      {
          return isOs( family, null, null, null );
      }
  
      /**
       * Determines if the OS on which Ant is executing matches the given OS
       * family.
       */
      public static boolean isFamily( final OsFamily family )
      {
          return isOs( family, null, null, null );
      }
  
      /**
       * Determines if the OS on which Ant is executing matches the given OS name.
       *
       * @param name Description of Parameter
       * @return The Name value
       * @since 1.7
       */
      public static boolean isName( final String name )
      {
          return isOs( (OsFamily)null, name, null, null );
      }
  
      /**
       * 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 The Os value
       */
      public static boolean isOs( final String family,
                                  final String name,
                                  final String arch,
                                  final String version )
      {
          return isOs( getFamily( family ), name, arch, 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 The Os value
       */
      public static boolean isOs( final OsFamily family,
                                  final String name,
                                  final String arch,
                                  final String version )
      {
          if( family != null || name != null || arch != null || version != null )
          {
              final boolean isFamily = familyMatches( family );
              final boolean isName = nameMatches( name );
              final boolean isArch = archMatches( arch );
              final boolean isVersion = versionMatches( version );
  
              return isFamily && isName && isArch && isVersion;
          }
          else
          {
              return false;
          }
      }
  
      /**
       * Locates an OsFamily by name (case-insensitive).
       *
       * @return the OS family, or null if not found.
       */
      public static OsFamily getFamily( final String name )
      {
          for( int i = 0; i < ALL_FAMILIES.length; i++ )
          {
              final OsFamily osFamily = ALL_FAMILIES[ i ];
              if( osFamily.getName().equalsIgnoreCase( name ) )
              {
                  return osFamily;
              }
          }
  
          return null;
      }
  
      private static boolean versionMatches( final String version )
      {
          boolean isVersion = true;
          if( version != null )
          {
              isVersion = version.equalsIgnoreCase( OS_VERSION );
          }
          return isVersion;
      }
  
      private static boolean archMatches( final String arch )
      {
          boolean isArch = true;
          if( arch != null )
          {
              isArch = arch.equalsIgnoreCase( OS_ARCH );
          }
          return isArch;
      }
  
      private static boolean nameMatches( final String name )
      {
          boolean isName = true;
          if( name != null )
          {
              isName = name.equalsIgnoreCase( OS_NAME );
          }
          return isName;
      }
  
      private static boolean familyMatches( final OsFamily family )
      {
          if( family == null )
          {
              return false;
          }
          for( int i = 0; i < OS_ALL_FAMILIES.length; i++ )
          {
              final OsFamily osFamily = OS_ALL_FAMILIES[ i ];
              if( family == osFamily )
              {
                  return true;
              }
          }
          return false;
      }
  
      private static OsFamily[] determineAllFamilies()
      {
          // Determine all families the current OS belongs to
          Set allFamilies = new HashSet();
          if( OS_FAMILY != null )
          {
              List queue = new ArrayList();
              queue.add( OS_FAMILY );
              while( queue.size() > 0 )
              {
                  final OsFamily family = (OsFamily)queue.remove( 0 );
                  allFamilies.add( family );
                  final OsFamily[] families = family.getFamilies();
                  for( int i = 0; i < families.length; i++ )
                  {
                      OsFamily parent = families[ i ];
                      queue.add( parent );
                  }
              }
          }
          return (OsFamily[])allFamilies.toArray( new OsFamily[ allFamilies.size() ] );
      }
  
      private static OsFamily determineOsFamily()
      {
          // Determine the most specific OS family
          if( OS_NAME.indexOf( "windows" ) > -1 )
          {
              if( OS_NAME.indexOf( "xp" ) > -1 ||
                  OS_NAME.indexOf( "2000" ) > -1 ||
                  OS_NAME.indexOf( "nt" ) > -1 )
              {
                  return OS_FAMILY_WINNT;
              }
              else
              {
                  return OS_FAMILY_WIN9X;
              }
          }
          else if( OS_NAME.indexOf( "os/2" ) > -1 )
          {
              return OS_FAMILY_OS2;
          }
          else if( OS_NAME.indexOf( "netware" ) > -1 )
          {
              return OS_FAMILY_NETWARE;
          }
          else if( OS_NAME.indexOf( "mac" ) > -1 )
          {
              if( OS_NAME.endsWith( "x" ) )
              {
                  return OS_FAMILY_OSX;
              }
              else
              {
                  return OS_FAMILY_MAC;
              }
          }
          else if( PATH_SEP.equals( ":" ) )
          {
              return OS_FAMILY_UNIX;
          }
          else
          {
              return null;
          }
      }
  }
  
  
  
  1.1                  jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/util/OsFamily.java
  
  Index: OsFamily.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included  with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.vfs.util;
  
  /**
   * An enumerated type, which represents an OS family.
   *
   * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
   * @version $Revision: 1.1 $ $Date: 2002/08/20 07:42:46 $
   */
  public final class OsFamily
  {
      private final String m_name;
      private final OsFamily[] m_families;
  
      OsFamily( final String name )
      {
          m_name = name;
          m_families = new OsFamily[ 0 ];
      }
  
      OsFamily( final String name, final OsFamily[] families )
      {
          m_name = name;
          m_families = families;
      }
  
      /**
       * Returns the name of this family.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Returns the OS families that this family belongs to.
       */
      public OsFamily[] getFamilies()
      {
          return m_families;
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>