Coverage Report - org.apache.maven.it.util.Os
 
Classes in this File Line Coverage Branch Coverage Complexity
Os
0%
0/60
0%
0/88
2.333
 
 1  
 /*
 2  
  * The Apache Software License, Version 1.1
 3  
  *
 4  
  * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
 5  
  * reserved.
 6  
  *
 7  
  * Redistribution and use in source and binary forms, with or without
 8  
  * modification, are permitted provided that the following conditions
 9  
  * are met:
 10  
  *
 11  
  * 1. Redistributions of source code must retain the above copyright
 12  
  *    notice, this list of conditions and the following disclaimer.
 13  
  *
 14  
  * 2. Redistributions in binary form must reproduce the above copyright
 15  
  *    notice, this list of conditions and the following disclaimer in
 16  
  *    the documentation and/or other materials provided with the
 17  
  *    distribution.
 18  
  *
 19  
  * 3. The end-user documentation included with the redistribution, if
 20  
  *    any, must include the following acknowlegement:
 21  
  *       "This product includes software developed by the
 22  
  *        Apache Software Foundation (http://www.apache.org/)."
 23  
  *    Alternately, this acknowlegement may appear in the software itself,
 24  
  *    if and wherever such third-party acknowlegements normally appear.
 25  
  *
 26  
  * 4. The names "Ant" and "Apache Software
 27  
  *    Foundation" must not be used to endorse or promote products derived
 28  
  *    from this software without prior written permission. For written
 29  
  *    permission, please contact apache@apache.org.
 30  
  *
 31  
  * 5. Products derived from this software may not be called "Apache"
 32  
  *    nor may "Apache" appear in their names without prior written
 33  
  *    permission of the Apache Group.
 34  
  *
 35  
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 36  
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 37  
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 38  
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 39  
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 40  
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 41  
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 42  
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 43  
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 44  
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 45  
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 46  
  * SUCH DAMAGE.
 47  
  * ====================================================================
 48  
  *
 49  
  * This software consists of voluntary contributions made by many
 50  
  * individuals on behalf of the Apache Software Foundation.  For more
 51  
  * information on the Apache Software Foundation, please see
 52  
  * <http://www.apache.org/>.
 53  
  */
 54  
 
 55  
 package org.apache.maven.it.util;
 56  
 
 57  
 import java.util.Locale;
 58  
 
 59  
 /**
 60  
  * Condition that tests the OS type.
 61  
  *
 62  
  * @author Stefan Bodewig
 63  
  * @author Magesh Umasankar
 64  
  * @author Brian Fox
 65  
  * @since 1.0
 66  
  * @version $Revision: 697419 $
 67  
  */
 68  
 public class Os
 69  
 {
 70  
     // define the families for easier reference
 71  
     public static final String FAMILY_DOS = "dos";
 72  
 
 73  
     public static final String FAMILY_MAC = "mac";
 74  
 
 75  
     public static final String FAMILY_NETWARE = "netware";
 76  
 
 77  
     public static final String FAMILY_OS2 = "os/2";
 78  
 
 79  
     public static final String FAMILY_TANDEM = "tandem";
 80  
 
 81  
     public static final String FAMILY_UNIX = "unix";
 82  
 
 83  
     public static final String FAMILY_WINDOWS = "windows";
 84  
 
 85  
     public static final String FAMILY_WIN9X = "win9x";
 86  
 
 87  
     public static final String FAMILY_ZOS = "z/os";
 88  
 
 89  
     public static final String FAMILY_OS400 = "os/400";
 90  
 
 91  
     public static final String FAMILY_OPENVMS = "openvms";
 92  
 
 93  
     // get the current info
 94  0
     private static final String PATH_SEP = System.getProperty( "path.separator" );
 95  
 
 96  0
     public static final String OS_NAME = System.getProperty( "os.name" ).toLowerCase( Locale.US );
 97  
 
 98  0
     public static final String OS_ARCH = System.getProperty( "os.arch" ).toLowerCase( Locale.US );
 99  
 
 100  0
     public static final String OS_VERSION = System.getProperty( "os.version" ).toLowerCase( Locale.US );
 101  
 
 102  
     private String family;
 103  
 
 104  
     private String name;
 105  
 
 106  
     private String version;
 107  
 
 108  
     private String arch;
 109  
 
 110  
     /**
 111  
      * Default constructor
 112  
      */
 113  
     public Os()
 114  0
     {
 115  0
     }
 116  
 
 117  
     /**
 118  
      * Constructor that sets the family attribute
 119  
      * 
 120  
      * @param family a String value
 121  
      */
 122  
     public Os( String family )
 123  0
     {
 124  0
         setFamily( family );
 125  0
     }
 126  
 
 127  
     /**
 128  
      * Sets the desired OS family type
 129  
      * 
 130  
      * @param f The OS family type desired<br />
 131  
      *            Possible values:<br />
 132  
      *            <ul>
 133  
      *            <li>dos</li>
 134  
      *            <li>mac</li>
 135  
      *            <li>netware</li>
 136  
      *            <li>os/2</li>
 137  
      *            <li>tandem</li>
 138  
      *            <li>unix</li>
 139  
      *            <li>windows</li>
 140  
      *            <li>win9x</li>
 141  
      *            <li>z/os</li>
 142  
      *            <li>os/400</li>
 143  
      *            <li>openvms</li>
 144  
      *            </ul>
 145  
      */
 146  
     public void setFamily( String f )
 147  
     {
 148  0
         family = f.toLowerCase( Locale.US );
 149  0
     }
 150  
 
 151  
     /**
 152  
      * Sets the desired OS name
 153  
      * 
 154  
      * @param name The OS name
 155  
      */
 156  
     public void setName( String name )
 157  
     {
 158  0
         this.name = name.toLowerCase( Locale.US );
 159  0
     }
 160  
 
 161  
     /**
 162  
      * Sets the desired OS architecture
 163  
      * 
 164  
      * @param arch The OS architecture
 165  
      */
 166  
     public void setArch( String arch )
 167  
     {
 168  0
         this.arch = arch.toLowerCase( Locale.US );
 169  0
     }
 170  
 
 171  
     /**
 172  
      * Sets the desired OS version
 173  
      * 
 174  
      * @param version The OS version
 175  
      */
 176  
     public void setVersion( String version )
 177  
     {
 178  0
         this.version = version.toLowerCase( Locale.US );
 179  0
     }
 180  
 
 181  
     /**
 182  
      * Determines if the current OS matches the type of that
 183  
      * set in setFamily.
 184  
      * 
 185  
      * @see Os#setFamily(String)
 186  
      */
 187  
     public boolean eval()
 188  
         throws Exception
 189  
     {
 190  0
         return isOs( family, name, arch, version );
 191  
     }
 192  
 
 193  
     /**
 194  
      * Determines if the current OS matches the given OS
 195  
      * family.
 196  
      * 
 197  
      * @param family the family to check for
 198  
      * @return true if the OS matches
 199  
      * @since 1.0
 200  
      */
 201  
     public static boolean isFamily( String family )
 202  
     {
 203  0
         return isOs( family, null, null, null );
 204  
     }
 205  
 
 206  
     /**
 207  
      * Determines if the current OS matches the given OS
 208  
      * name.
 209  
      * 
 210  
      * @param name the OS name to check for
 211  
      * @return true if the OS matches
 212  
      * @since 1.0
 213  
      */
 214  
     public static boolean isName( String name )
 215  
     {
 216  0
         return isOs( null, name, null, null );
 217  
     }
 218  
 
 219  
     /**
 220  
      * Determines if the current OS matches the given OS
 221  
      * architecture.
 222  
      * 
 223  
      * @param arch the OS architecture to check for
 224  
      * @return true if the OS matches
 225  
      * @since 1.0
 226  
      */
 227  
     public static boolean isArch( String arch )
 228  
     {
 229  0
         return isOs( null, null, arch, null );
 230  
     }
 231  
 
 232  
     /**
 233  
      * Determines if the current OS matches the given OS
 234  
      * version.
 235  
      * 
 236  
      * @param version the OS version to check for
 237  
      * @return true if the OS matches
 238  
      * @since 1.0
 239  
      */
 240  
     public static boolean isVersion( String version )
 241  
     {
 242  0
         return isOs( null, null, null, version );
 243  
     }
 244  
 
 245  
     /**
 246  
      * Determines if the current OS matches the given OS
 247  
      * family, name, architecture and version.
 248  
      * 
 249  
      * The name, archictecture and version are compared to
 250  
      * the System properties os.name, os.version and os.arch
 251  
      * in a case-independent way.
 252  
      * 
 253  
      * @param family The OS family
 254  
      * @param name The OS name
 255  
      * @param arch The OS architecture
 256  
      * @param version The OS version
 257  
      * @return true if the OS matches
 258  
      * @since 1.0
 259  
      */
 260  
     public static boolean isOs( String family, String name, String arch, String version )
 261  
     {
 262  0
         boolean retValue = false;
 263  
 
 264  0
         if ( family != null || name != null || arch != null || version != null )
 265  
         {
 266  
 
 267  0
             boolean isFamily = true;
 268  0
             boolean isName = true;
 269  0
             boolean isArch = true;
 270  0
             boolean isVersion = true;
 271  
 
 272  0
             if ( family != null )
 273  
             {
 274  0
                 if ( family.equalsIgnoreCase( FAMILY_WINDOWS ) )
 275  
                 {
 276  0
                     isFamily = OS_NAME.indexOf( FAMILY_WINDOWS ) > -1;
 277  
                 }
 278  0
                 else if ( family.equalsIgnoreCase( FAMILY_OS2 ) )
 279  
                 {
 280  0
                     isFamily = OS_NAME.indexOf( FAMILY_OS2 ) > -1;
 281  
                 }
 282  0
                 else if ( family.equalsIgnoreCase( FAMILY_NETWARE ) )
 283  
                 {
 284  0
                     isFamily = OS_NAME.indexOf( FAMILY_NETWARE ) > -1;
 285  
                 }
 286  0
                 else if ( family.equalsIgnoreCase( FAMILY_DOS ) )
 287  
                 {
 288  0
                     isFamily = PATH_SEP.equals( ";" ) && !isFamily( FAMILY_NETWARE );
 289  
                 }
 290  0
                 else if ( family.equalsIgnoreCase( FAMILY_MAC ) )
 291  
                 {
 292  0
                     isFamily = OS_NAME.indexOf( FAMILY_MAC ) > -1;
 293  
                 }
 294  0
                 else if ( family.equalsIgnoreCase( FAMILY_TANDEM ) )
 295  
                 {
 296  0
                     isFamily = OS_NAME.indexOf( "nonstop_kernel" ) > -1;
 297  
                 }
 298  0
                 else if ( family.equalsIgnoreCase( FAMILY_UNIX ) )
 299  
                 {
 300  0
                     isFamily = PATH_SEP.equals( ":" ) && !isFamily( FAMILY_OPENVMS )
 301  
                         && ( !isFamily( FAMILY_MAC ) || OS_NAME.endsWith( "x" ) );
 302  
                 }
 303  0
                 else if ( family.equalsIgnoreCase( FAMILY_WIN9X ) )
 304  
                 {
 305  0
                     isFamily = isFamily( FAMILY_WINDOWS )
 306  
                         && ( OS_NAME.indexOf( "95" ) >= 0 || OS_NAME.indexOf( "98" ) >= 0
 307  
                             || OS_NAME.indexOf( "me" ) >= 0 || OS_NAME.indexOf( "ce" ) >= 0 );
 308  
                 }
 309  0
                 else if ( family.equalsIgnoreCase( FAMILY_ZOS ) )
 310  
                 {
 311  0
                     isFamily = OS_NAME.indexOf( FAMILY_ZOS ) > -1 || OS_NAME.indexOf( "os/390" ) > -1;
 312  
                 }
 313  0
                 else if ( family.equalsIgnoreCase( FAMILY_OS400 ) )
 314  
                 {
 315  0
                     isFamily = OS_NAME.indexOf( FAMILY_OS400 ) > -1;
 316  
                 }
 317  0
                 else if ( family.equalsIgnoreCase( FAMILY_OPENVMS ) )
 318  
                 {
 319  0
                     isFamily = OS_NAME.indexOf( FAMILY_OPENVMS ) > -1;
 320  
                 }
 321  
                 else
 322  
                 {
 323  0
                     isFamily = OS_NAME.indexOf( family.toLowerCase( Locale.US ) ) > -1;
 324  
                 }
 325  
             }
 326  0
             if ( name != null )
 327  
             {
 328  0
                 isName = name.toLowerCase( Locale.US ).equals( OS_NAME );
 329  
             }
 330  0
             if ( arch != null )
 331  
             {
 332  0
                 isArch = arch.toLowerCase( Locale.US ).equals( OS_ARCH );
 333  
             }
 334  0
             if ( version != null )
 335  
             {
 336  0
                 isVersion = version.toLowerCase( Locale.US ).equals( OS_VERSION );
 337  
             }
 338  0
             retValue = isFamily && isName && isArch && isVersion;
 339  
         }
 340  0
         return retValue;
 341  
     }
 342  
 
 343  
 }