Coverage Report - liquibase.util.SystemUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
SystemUtils
0%
0/118
0%
0/34
2.625
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
 3  
  * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
 4  
  * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 5  
  * License. You may obtain a copy of the License at
 6  
  * 
 7  
  * http://www.apache.org/licenses/LICENSE-2.0
 8  
  * 
 9  
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 10  
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 11  
  * specific language governing permissions and limitations under the License.
 12  
  */
 13  
 package liquibase.util;
 14  
 
 15  
 import java.io.File;
 16  
 
 17  
 /**
 18  
  * Code taken from <a href="http://commons.apache.org/lang">Commons lang utils</a>
 19  
  * <p>
 20  
  * Helpers for <code>java.lang.System</code>.
 21  
  * </p>
 22  
  * 
 23  
  * <p>
 24  
  * If a system property cannot be read due to security restrictions, the corresponding field in this class will be set
 25  
  * to <code>null</code> and a message will be written to <code>System.err</code>.
 26  
  * </p>
 27  
  * 
 28  
  * @author Apache Software Foundation
 29  
  * @author Based on code from Avalon Excalibur
 30  
  * @author Based on code from Lucene
 31  
  * @author <a href="mailto:sdowney@panix.com">Steve Downey</a>
 32  
  * @author Gary Gregory
 33  
  * @author Michael Becke
 34  
  * @author Tetsuya Kaneuchi
 35  
  * @author Rafal Krupinski
 36  
  * @author Jason Gritman
 37  
  * @since 1.0
 38  
  * @version $Id: SystemUtils.java 905707 2010-02-02 16:59:59Z niallp $
 39  
  */
 40  
 public class SystemUtils {
 41  
 
 42  
     /**
 43  
      * The prefix String for all Windows OS.
 44  
      */
 45  
     private static final String OS_NAME_WINDOWS_PREFIX = "Windows";
 46  
 
 47  
     // System property constants
 48  
     // -----------------------------------------------------------------------
 49  
     // These MUST be declared first. Other constants depend on this.
 50  
 
 51  
     /**
 52  
      * The System property key for the user home directory.
 53  
      */
 54  
     private static final String USER_HOME_KEY = "user.home";
 55  
 
 56  
     /**
 57  
      * The System property key for the user directory.
 58  
      */
 59  
     private static final String USER_DIR_KEY = "user.dir";
 60  
 
 61  
     /**
 62  
      * The System property key for the Java IO temporary directory.
 63  
      */
 64  
     private static final String JAVA_IO_TMPDIR_KEY = "java.io.tmpdir";
 65  
 
 66  
     /**
 67  
      * The System property key for the Java home directory.
 68  
      */
 69  
     private static final String JAVA_HOME_KEY = "java.home";
 70  
 
 71  
     /**
 72  
      * <p>
 73  
      * The <code>awt.toolkit</code> System Property.
 74  
      * </p>
 75  
      * <p>
 76  
      * Holds a class name, on Windows XP this is <code>sun.awt.windows.WToolkit</code>.
 77  
      * </p>
 78  
      * <p>
 79  
      * <b>On platforms without a GUI, this value is <code>null</code>.</b>
 80  
      * </p>
 81  
      * 
 82  
      * <p>
 83  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 84  
      * does not exist.
 85  
      * </p>
 86  
      * 
 87  
      * <p>
 88  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 89  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 90  
      * sync with that System property.
 91  
      * </p>
 92  
      * 
 93  
      * @since 2.1
 94  
      */
 95  0
     public static final String AWT_TOOLKIT = getSystemProperty("awt.toolkit");
 96  
 
 97  
     /**
 98  
      * <p>
 99  
      * The <code>file.encoding</code> System Property.
 100  
      * </p>
 101  
      * <p>
 102  
      * File encoding, such as <code>Cp1252</code>.
 103  
      * </p>
 104  
      * 
 105  
      * <p>
 106  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 107  
      * does not exist.
 108  
      * </p>
 109  
      * 
 110  
      * <p>
 111  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 112  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 113  
      * sync with that System property.
 114  
      * </p>
 115  
      * 
 116  
      * @since 2.0
 117  
      * @since Java 1.2
 118  
      */
 119  0
     public static final String FILE_ENCODING = getSystemProperty("file.encoding");
 120  
 
 121  
     /**
 122  
      * <p>
 123  
      * The <code>file.separator</code> System Property. File separator (<code>&quot;/&quot;</code> on UNIX).
 124  
      * </p>
 125  
      * 
 126  
      * <p>
 127  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 128  
      * does not exist.
 129  
      * </p>
 130  
      * 
 131  
      * <p>
 132  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 133  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 134  
      * sync with that System property.
 135  
      * </p>
 136  
      * 
 137  
      * @since Java 1.1
 138  
      */
 139  0
     public static final String FILE_SEPARATOR = getSystemProperty("file.separator");
 140  
 
 141  
     /**
 142  
      * <p>
 143  
      * The <code>java.awt.fonts</code> System Property.
 144  
      * </p>
 145  
      * 
 146  
      * <p>
 147  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 148  
      * does not exist.
 149  
      * </p>
 150  
      * 
 151  
      * <p>
 152  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 153  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 154  
      * sync with that System property.
 155  
      * </p>
 156  
      * 
 157  
      * @since 2.1
 158  
      */
 159  0
     public static final String JAVA_AWT_FONTS = getSystemProperty("java.awt.fonts");
 160  
 
 161  
     /**
 162  
      * <p>
 163  
      * The <code>java.awt.graphicsenv</code> System Property.
 164  
      * </p>
 165  
      * 
 166  
      * <p>
 167  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 168  
      * does not exist.
 169  
      * </p>
 170  
      * 
 171  
      * <p>
 172  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 173  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 174  
      * sync with that System property.
 175  
      * </p>
 176  
      * 
 177  
      * @since 2.1
 178  
      */
 179  0
     public static final String JAVA_AWT_GRAPHICSENV = getSystemProperty("java.awt.graphicsenv");
 180  
 
 181  
     /**
 182  
      * <p>
 183  
      * The <code>java.awt.headless</code> System Property. The value of this property is the String <code>"true"</code>
 184  
      * or <code>"false"</code>.
 185  
      * </p>
 186  
      * 
 187  
      * <p>
 188  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 189  
      * does not exist.
 190  
      * </p>
 191  
      * 
 192  
      * <p>
 193  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 194  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 195  
      * sync with that System property.
 196  
      * </p>
 197  
      * 
 198  
      * @see #isJavaAwtHeadless()
 199  
      * @since 2.1
 200  
      * @since Java 1.4
 201  
      */
 202  0
     public static final String JAVA_AWT_HEADLESS = getSystemProperty("java.awt.headless");
 203  
 
 204  
     /**
 205  
      * <p>
 206  
      * The <code>java.awt.printerjob</code> System Property.
 207  
      * </p>
 208  
      * 
 209  
      * <p>
 210  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 211  
      * does not exist.
 212  
      * </p>
 213  
      * 
 214  
      * <p>
 215  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 216  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 217  
      * sync with that System property.
 218  
      * </p>
 219  
      * 
 220  
      * @since 2.1
 221  
      */
 222  0
     public static final String JAVA_AWT_PRINTERJOB = getSystemProperty("java.awt.printerjob");
 223  
 
 224  
     /**
 225  
      * <p>
 226  
      * The <code>java.class.path</code> System Property. Java class path.
 227  
      * </p>
 228  
      * 
 229  
      * <p>
 230  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 231  
      * does not exist.
 232  
      * </p>
 233  
      * 
 234  
      * <p>
 235  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 236  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 237  
      * sync with that System property.
 238  
      * </p>
 239  
      * 
 240  
      * @since Java 1.1
 241  
      */
 242  0
     public static final String JAVA_CLASS_PATH = getSystemProperty("java.class.path");
 243  
 
 244  
     /**
 245  
      * <p>
 246  
      * The <code>java.class.version</code> System Property. Java class format version number.
 247  
      * </p>
 248  
      * 
 249  
      * <p>
 250  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 251  
      * does not exist.
 252  
      * </p>
 253  
      * 
 254  
      * <p>
 255  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 256  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 257  
      * sync with that System property.
 258  
      * </p>
 259  
      * 
 260  
      * @since Java 1.1
 261  
      */
 262  0
     public static final String JAVA_CLASS_VERSION = getSystemProperty("java.class.version");
 263  
 
 264  
     /**
 265  
      * <p>
 266  
      * The <code>java.compiler</code> System Property. Name of JIT compiler to use. First in JDK version 1.2. Not used
 267  
      * in Sun JDKs after 1.2.
 268  
      * </p>
 269  
      * 
 270  
      * <p>
 271  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 272  
      * does not exist.
 273  
      * </p>
 274  
      * 
 275  
      * <p>
 276  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 277  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 278  
      * sync with that System property.
 279  
      * </p>
 280  
      * 
 281  
      * @since Java 1.2. Not used in Sun versions after 1.2.
 282  
      */
 283  0
     public static final String JAVA_COMPILER = getSystemProperty("java.compiler");
 284  
 
 285  
     /**
 286  
      * <p>
 287  
      * The <code>java.endorsed.dirs</code> System Property. Path of endorsed directory or directories.
 288  
      * </p>
 289  
      * 
 290  
      * <p>
 291  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 292  
      * does not exist.
 293  
      * </p>
 294  
      * 
 295  
      * <p>
 296  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 297  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 298  
      * sync with that System property.
 299  
      * </p>
 300  
      * 
 301  
      * @since Java 1.4
 302  
      */
 303  0
     public static final String JAVA_ENDORSED_DIRS = getSystemProperty("java.endorsed.dirs");
 304  
 
 305  
     /**
 306  
      * <p>
 307  
      * The <code>java.ext.dirs</code> System Property. Path of extension directory or directories.
 308  
      * </p>
 309  
      * 
 310  
      * <p>
 311  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 312  
      * does not exist.
 313  
      * </p>
 314  
      * 
 315  
      * <p>
 316  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 317  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 318  
      * sync with that System property.
 319  
      * </p>
 320  
      * 
 321  
      * @since Java 1.3
 322  
      */
 323  0
     public static final String JAVA_EXT_DIRS = getSystemProperty("java.ext.dirs");
 324  
 
 325  
     /**
 326  
      * <p>
 327  
      * The <code>java.home</code> System Property. Java installation directory.
 328  
      * </p>
 329  
      * 
 330  
      * <p>
 331  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 332  
      * does not exist.
 333  
      * </p>
 334  
      * 
 335  
      * <p>
 336  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 337  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 338  
      * sync with that System property.
 339  
      * </p>
 340  
      * 
 341  
      * @since Java 1.1
 342  
      */
 343  0
     public static final String JAVA_HOME = getSystemProperty(JAVA_HOME_KEY);
 344  
 
 345  
     /**
 346  
      * <p>
 347  
      * The <code>java.io.tmpdir</code> System Property. Default temp file path.
 348  
      * </p>
 349  
      * 
 350  
      * <p>
 351  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 352  
      * does not exist.
 353  
      * </p>
 354  
      * 
 355  
      * <p>
 356  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 357  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 358  
      * sync with that System property.
 359  
      * </p>
 360  
      * 
 361  
      * @since Java 1.2
 362  
      */
 363  0
     public static final String JAVA_IO_TMPDIR = getSystemProperty(JAVA_IO_TMPDIR_KEY);
 364  
 
 365  
     /**
 366  
      * <p>
 367  
      * The <code>java.library.path</code> System Property. List of paths to search when loading libraries.
 368  
      * </p>
 369  
      * 
 370  
      * <p>
 371  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 372  
      * does not exist.
 373  
      * </p>
 374  
      * 
 375  
      * <p>
 376  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 377  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 378  
      * sync with that System property.
 379  
      * </p>
 380  
      * 
 381  
      * @since Java 1.2
 382  
      */
 383  0
     public static final String JAVA_LIBRARY_PATH = getSystemProperty("java.library.path");
 384  
 
 385  
     /**
 386  
      * <p>
 387  
      * The <code>java.runtime.name</code> System Property. Java Runtime Environment name.
 388  
      * </p>
 389  
      * 
 390  
      * <p>
 391  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 392  
      * does not exist.
 393  
      * </p>
 394  
      * 
 395  
      * <p>
 396  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 397  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 398  
      * sync with that System property.
 399  
      * </p>
 400  
      * 
 401  
      * @since 2.0
 402  
      * @since Java 1.3
 403  
      */
 404  0
     public static final String JAVA_RUNTIME_NAME = getSystemProperty("java.runtime.name");
 405  
 
 406  
     /**
 407  
      * <p>
 408  
      * The <code>java.runtime.version</code> System Property. Java Runtime Environment version.
 409  
      * </p>
 410  
      * 
 411  
      * <p>
 412  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 413  
      * does not exist.
 414  
      * </p>
 415  
      * 
 416  
      * <p>
 417  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 418  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 419  
      * sync with that System property.
 420  
      * </p>
 421  
      * 
 422  
      * @since 2.0
 423  
      * @since Java 1.3
 424  
      */
 425  0
     public static final String JAVA_RUNTIME_VERSION = getSystemProperty("java.runtime.version");
 426  
 
 427  
     /**
 428  
      * <p>
 429  
      * The <code>java.specification.name</code> System Property. Java Runtime Environment specification name.
 430  
      * </p>
 431  
      * 
 432  
      * <p>
 433  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 434  
      * does not exist.
 435  
      * </p>
 436  
      * 
 437  
      * <p>
 438  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 439  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 440  
      * sync with that System property.
 441  
      * </p>
 442  
      * 
 443  
      * @since Java 1.2
 444  
      */
 445  0
     public static final String JAVA_SPECIFICATION_NAME = getSystemProperty("java.specification.name");
 446  
 
 447  
     /**
 448  
      * <p>
 449  
      * The <code>java.specification.vendor</code> System Property. Java Runtime Environment specification vendor.
 450  
      * </p>
 451  
      * 
 452  
      * <p>
 453  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 454  
      * does not exist.
 455  
      * </p>
 456  
      * 
 457  
      * <p>
 458  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 459  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 460  
      * sync with that System property.
 461  
      * </p>
 462  
      * 
 463  
      * @since Java 1.2
 464  
      */
 465  0
     public static final String JAVA_SPECIFICATION_VENDOR = getSystemProperty("java.specification.vendor");
 466  
 
 467  
     /**
 468  
      * <p>
 469  
      * The <code>java.specification.version</code> System Property. Java Runtime Environment specification version.
 470  
      * </p>
 471  
      * 
 472  
      * <p>
 473  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 474  
      * does not exist.
 475  
      * </p>
 476  
      * 
 477  
      * <p>
 478  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 479  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 480  
      * sync with that System property.
 481  
      * </p>
 482  
      * 
 483  
      * @since Java 1.3
 484  
      */
 485  0
     public static final String JAVA_SPECIFICATION_VERSION = getSystemProperty("java.specification.version");
 486  
 
 487  
     /**
 488  
      * <p>
 489  
      * The <code>java.util.prefs.PreferencesFactory</code> System Property. A class name.
 490  
      * </p>
 491  
      * 
 492  
      * <p>
 493  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 494  
      * does not exist.
 495  
      * </p>
 496  
      * 
 497  
      * <p>
 498  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 499  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 500  
      * sync with that System property.
 501  
      * </p>
 502  
      * 
 503  
      * @since 2.1
 504  
      * @since Java 1.4
 505  
      */
 506  0
     public static final String JAVA_UTIL_PREFS_PREFERENCES_FACTORY = getSystemProperty("java.util.prefs.PreferencesFactory");
 507  
 
 508  
     /**
 509  
      * <p>
 510  
      * The <code>java.vendor</code> System Property. Java vendor-specific string.
 511  
      * </p>
 512  
      * 
 513  
      * <p>
 514  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 515  
      * does not exist.
 516  
      * </p>
 517  
      * 
 518  
      * <p>
 519  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 520  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 521  
      * sync with that System property.
 522  
      * </p>
 523  
      * 
 524  
      * @since Java 1.1
 525  
      */
 526  0
     public static final String JAVA_VENDOR = getSystemProperty("java.vendor");
 527  
 
 528  
     /**
 529  
      * <p>
 530  
      * The <code>java.vendor.url</code> System Property. Java vendor URL.
 531  
      * </p>
 532  
      * 
 533  
      * <p>
 534  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 535  
      * does not exist.
 536  
      * </p>
 537  
      * 
 538  
      * <p>
 539  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 540  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 541  
      * sync with that System property.
 542  
      * </p>
 543  
      * 
 544  
      * @since Java 1.1
 545  
      */
 546  0
     public static final String JAVA_VENDOR_URL = getSystemProperty("java.vendor.url");
 547  
 
 548  
     /**
 549  
      * <p>
 550  
      * The <code>java.version</code> System Property. Java version number.
 551  
      * </p>
 552  
      * 
 553  
      * <p>
 554  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 555  
      * does not exist.
 556  
      * </p>
 557  
      * 
 558  
      * <p>
 559  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 560  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 561  
      * sync with that System property.
 562  
      * </p>
 563  
      * 
 564  
      * @since Java 1.1
 565  
      */
 566  0
     public static final String JAVA_VERSION = getSystemProperty("java.version");
 567  
 
 568  
     /**
 569  
      * <p>
 570  
      * The <code>java.vm.info</code> System Property. Java Virtual Machine implementation info.
 571  
      * </p>
 572  
      * 
 573  
      * <p>
 574  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 575  
      * does not exist.
 576  
      * </p>
 577  
      * 
 578  
      * <p>
 579  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 580  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 581  
      * sync with that System property.
 582  
      * </p>
 583  
      * 
 584  
      * @since 2.0
 585  
      * @since Java 1.2
 586  
      */
 587  0
     public static final String JAVA_VM_INFO = getSystemProperty("java.vm.info");
 588  
 
 589  
     /**
 590  
      * <p>
 591  
      * The <code>java.vm.name</code> System Property. Java Virtual Machine implementation name.
 592  
      * </p>
 593  
      * 
 594  
      * <p>
 595  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 596  
      * does not exist.
 597  
      * </p>
 598  
      * 
 599  
      * <p>
 600  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 601  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 602  
      * sync with that System property.
 603  
      * </p>
 604  
      * 
 605  
      * @since Java 1.2
 606  
      */
 607  0
     public static final String JAVA_VM_NAME = getSystemProperty("java.vm.name");
 608  
 
 609  
     /**
 610  
      * <p>
 611  
      * The <code>java.vm.specification.name</code> System Property. Java Virtual Machine specification name.
 612  
      * </p>
 613  
      * 
 614  
      * <p>
 615  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 616  
      * does not exist.
 617  
      * </p>
 618  
      * 
 619  
      * <p>
 620  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 621  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 622  
      * sync with that System property.
 623  
      * </p>
 624  
      * 
 625  
      * @since Java 1.2
 626  
      */
 627  0
     public static final String JAVA_VM_SPECIFICATION_NAME = getSystemProperty("java.vm.specification.name");
 628  
 
 629  
     /**
 630  
      * <p>
 631  
      * The <code>java.vm.specification.vendor</code> System Property. Java Virtual Machine specification vendor.
 632  
      * </p>
 633  
      * 
 634  
      * <p>
 635  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 636  
      * does not exist.
 637  
      * </p>
 638  
      * 
 639  
      * <p>
 640  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 641  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 642  
      * sync with that System property.
 643  
      * </p>
 644  
      * 
 645  
      * @since Java 1.2
 646  
      */
 647  0
     public static final String JAVA_VM_SPECIFICATION_VENDOR = getSystemProperty("java.vm.specification.vendor");
 648  
 
 649  
     /**
 650  
      * <p>
 651  
      * The <code>java.vm.specification.version</code> System Property. Java Virtual Machine specification version.
 652  
      * </p>
 653  
      * 
 654  
      * <p>
 655  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 656  
      * does not exist.
 657  
      * </p>
 658  
      * 
 659  
      * <p>
 660  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 661  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 662  
      * sync with that System property.
 663  
      * </p>
 664  
      * 
 665  
      * @since Java 1.2
 666  
      */
 667  0
     public static final String JAVA_VM_SPECIFICATION_VERSION = getSystemProperty("java.vm.specification.version");
 668  
 
 669  
     /**
 670  
      * <p>
 671  
      * The <code>java.vm.vendor</code> System Property. Java Virtual Machine implementation vendor.
 672  
      * </p>
 673  
      * 
 674  
      * <p>
 675  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 676  
      * does not exist.
 677  
      * </p>
 678  
      * 
 679  
      * <p>
 680  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 681  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 682  
      * sync with that System property.
 683  
      * </p>
 684  
      * 
 685  
      * @since Java 1.2
 686  
      */
 687  0
     public static final String JAVA_VM_VENDOR = getSystemProperty("java.vm.vendor");
 688  
 
 689  
     /**
 690  
      * <p>
 691  
      * The <code>java.vm.version</code> System Property. Java Virtual Machine implementation version.
 692  
      * </p>
 693  
      * 
 694  
      * <p>
 695  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 696  
      * does not exist.
 697  
      * </p>
 698  
      * 
 699  
      * <p>
 700  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 701  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 702  
      * sync with that System property.
 703  
      * </p>
 704  
      * 
 705  
      * @since Java 1.2
 706  
      */
 707  0
     public static final String JAVA_VM_VERSION = getSystemProperty("java.vm.version");
 708  
 
 709  
     /**
 710  
      * <p>
 711  
      * The <code>line.separator</code> System Property. Line separator (<code>&quot;\n&quot;</code> on UNIX).
 712  
      * </p>
 713  
      * 
 714  
      * <p>
 715  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 716  
      * does not exist.
 717  
      * </p>
 718  
      * 
 719  
      * <p>
 720  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 721  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 722  
      * sync with that System property.
 723  
      * </p>
 724  
      * 
 725  
      * @since Java 1.1
 726  
      */
 727  0
     public static final String LINE_SEPARATOR = getSystemProperty("line.separator");
 728  
 
 729  
     /**
 730  
      * <p>
 731  
      * The <code>os.arch</code> System Property. Operating system architecture.
 732  
      * </p>
 733  
      * 
 734  
      * <p>
 735  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 736  
      * does not exist.
 737  
      * </p>
 738  
      * 
 739  
      * <p>
 740  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 741  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 742  
      * sync with that System property.
 743  
      * </p>
 744  
      * 
 745  
      * @since Java 1.1
 746  
      */
 747  0
     public static final String OS_ARCH = getSystemProperty("os.arch");
 748  
 
 749  
     /**
 750  
      * <p>
 751  
      * The <code>os.name</code> System Property. Operating system name.
 752  
      * </p>
 753  
      * 
 754  
      * <p>
 755  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 756  
      * does not exist.
 757  
      * </p>
 758  
      * 
 759  
      * <p>
 760  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 761  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 762  
      * sync with that System property.
 763  
      * </p>
 764  
      * 
 765  
      * @since Java 1.1
 766  
      */
 767  0
     public static final String OS_NAME = getSystemProperty("os.name");
 768  
 
 769  
     /**
 770  
      * <p>
 771  
      * The <code>os.version</code> System Property. Operating system version.
 772  
      * </p>
 773  
      * 
 774  
      * <p>
 775  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 776  
      * does not exist.
 777  
      * </p>
 778  
      * 
 779  
      * <p>
 780  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 781  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 782  
      * sync with that System property.
 783  
      * </p>
 784  
      * 
 785  
      * @since Java 1.1
 786  
      */
 787  0
     public static final String OS_VERSION = getSystemProperty("os.version");
 788  
 
 789  
     /**
 790  
      * <p>
 791  
      * The <code>path.separator</code> System Property. Path separator (<code>&quot;:&quot;</code> on UNIX).
 792  
      * </p>
 793  
      * 
 794  
      * <p>
 795  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 796  
      * does not exist.
 797  
      * </p>
 798  
      * 
 799  
      * <p>
 800  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 801  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 802  
      * sync with that System property.
 803  
      * </p>
 804  
      * 
 805  
      * @since Java 1.1
 806  
      */
 807  0
     public static final String PATH_SEPARATOR = getSystemProperty("path.separator");
 808  
 
 809  
     /**
 810  
      * <p>
 811  
      * The <code>user.country</code> or <code>user.region</code> System Property. User's country code, such as
 812  
      * <code>GB</code>. First in JDK version 1.2 as <code>user.region</code>. Renamed to <code>user.country</code> in
 813  
      * 1.4
 814  
      * </p>
 815  
      * 
 816  
      * <p>
 817  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 818  
      * does not exist.
 819  
      * </p>
 820  
      * 
 821  
      * <p>
 822  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 823  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 824  
      * sync with that System property.
 825  
      * </p>
 826  
      * 
 827  
      * @since 2.0
 828  
      * @since Java 1.2
 829  
      */
 830  0
     public static final String USER_COUNTRY = getSystemProperty("user.country") == null ? getSystemProperty("user.region")
 831  
             : getSystemProperty("user.country");
 832  
 
 833  
     /**
 834  
      * <p>
 835  
      * The <code>user.dir</code> System Property. User's current working directory.
 836  
      * </p>
 837  
      * 
 838  
      * <p>
 839  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 840  
      * does not exist.
 841  
      * </p>
 842  
      * 
 843  
      * <p>
 844  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 845  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 846  
      * sync with that System property.
 847  
      * </p>
 848  
      * 
 849  
      * @since Java 1.1
 850  
      */
 851  0
     public static final String USER_DIR = getSystemProperty(USER_DIR_KEY);
 852  
 
 853  
     /**
 854  
      * <p>
 855  
      * The <code>user.home</code> System Property. User's home directory.
 856  
      * </p>
 857  
      * 
 858  
      * <p>
 859  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 860  
      * does not exist.
 861  
      * </p>
 862  
      * 
 863  
      * <p>
 864  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 865  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 866  
      * sync with that System property.
 867  
      * </p>
 868  
      * 
 869  
      * @since Java 1.1
 870  
      */
 871  0
     public static final String USER_HOME = getSystemProperty(USER_HOME_KEY);
 872  
 
 873  
     /**
 874  
      * <p>
 875  
      * The <code>user.language</code> System Property. User's language code, such as <code>"en"</code>.
 876  
      * </p>
 877  
      * 
 878  
      * <p>
 879  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 880  
      * does not exist.
 881  
      * </p>
 882  
      * 
 883  
      * <p>
 884  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 885  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 886  
      * sync with that System property.
 887  
      * </p>
 888  
      * 
 889  
      * @since 2.0
 890  
      * @since Java 1.2
 891  
      */
 892  0
     public static final String USER_LANGUAGE = getSystemProperty("user.language");
 893  
 
 894  
     /**
 895  
      * <p>
 896  
      * The <code>user.name</code> System Property. User's account name.
 897  
      * </p>
 898  
      * 
 899  
      * <p>
 900  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 901  
      * does not exist.
 902  
      * </p>
 903  
      * 
 904  
      * <p>
 905  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 906  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 907  
      * sync with that System property.
 908  
      * </p>
 909  
      * 
 910  
      * @since Java 1.1
 911  
      */
 912  0
     public static final String USER_NAME = getSystemProperty("user.name");
 913  
 
 914  
     /**
 915  
      * <p>
 916  
      * The <code>user.timezone</code> System Property. For example: <code>"America/Los_Angeles"</code>.
 917  
      * </p>
 918  
      * 
 919  
      * <p>
 920  
      * Defaults to <code>null</code> if the runtime does not have security access to read this property or the property
 921  
      * does not exist.
 922  
      * </p>
 923  
      * 
 924  
      * <p>
 925  
      * This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
 926  
      * {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
 927  
      * sync with that System property.
 928  
      * </p>
 929  
      * 
 930  
      * @since 2.1
 931  
      */
 932  0
     public static final String USER_TIMEZONE = getSystemProperty("user.timezone");
 933  
 
 934  
     // Java version
 935  
     // -----------------------------------------------------------------------
 936  
     // This MUST be declared after those above as it depends on the
 937  
     // values being set up
 938  
 
 939  
     /**
 940  
      * <p>
 941  
      * Gets the Java version as a <code>String</code> trimming leading letters.
 942  
      * </p>
 943  
      * 
 944  
      * <p>
 945  
      * The field will return <code>null</code> if {@link #JAVA_VERSION} is <code>null</code>.
 946  
      * </p>
 947  
      * 
 948  
      * @since 2.1
 949  
      */
 950  0
     public static final String JAVA_VERSION_TRIMMED = getJavaVersionTrimmed();
 951  
 
 952  
     // Java version values
 953  
     // -----------------------------------------------------------------------
 954  
     // These MUST be declared after the trim above as they depend on the
 955  
     // value being set up
 956  
 
 957  
     /**
 958  
      * <p>
 959  
      * Gets the Java version as a <code>float</code>.
 960  
      * </p>
 961  
      * 
 962  
      * <p>
 963  
      * Example return values:
 964  
      * </p>
 965  
      * <ul>
 966  
      * <li><code>1.2f</code> for JDK 1.2
 967  
      * <li><code>1.31f</code> for JDK 1.3.1
 968  
      * </ul>
 969  
      * 
 970  
      * <p>
 971  
      * The field will return zero if {@link #JAVA_VERSION} is <code>null</code>.
 972  
      * </p>
 973  
      * 
 974  
      * @since 2.0
 975  
      */
 976  0
     public static final float JAVA_VERSION_FLOAT = getJavaVersionAsFloat();
 977  
 
 978  
     /**
 979  
      * <p>
 980  
      * Gets the Java version as an <code>int</code>.
 981  
      * </p>
 982  
      * 
 983  
      * <p>
 984  
      * Example return values:
 985  
      * </p>
 986  
      * <ul>
 987  
      * <li><code>120</code> for JDK 1.2
 988  
      * <li><code>131</code> for JDK 1.3.1
 989  
      * </ul>
 990  
      * 
 991  
      * <p>
 992  
      * The field will return zero if {@link #JAVA_VERSION} is <code>null</code>.
 993  
      * </p>
 994  
      * 
 995  
      * @since 2.0
 996  
      */
 997  0
     public static final int JAVA_VERSION_INT = getJavaVersionAsInt();
 998  
 
 999  
     // Java version checks
 1000  
     // -----------------------------------------------------------------------
 1001  
     // These MUST be declared after those above as they depend on the
 1002  
     // values being set up
 1003  
 
 1004  
     /**
 1005  
      * <p>
 1006  
      * Is <code>true</code> if this is Java version 1.1 (also 1.1.x versions).
 1007  
      * </p>
 1008  
      * 
 1009  
      * <p>
 1010  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1011  
      * </p>
 1012  
      */
 1013  0
     public static final boolean IS_JAVA_1_1 = getJavaVersionMatches("1.1");
 1014  
 
 1015  
     /**
 1016  
      * <p>
 1017  
      * Is <code>true</code> if this is Java version 1.2 (also 1.2.x versions).
 1018  
      * </p>
 1019  
      * 
 1020  
      * <p>
 1021  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1022  
      * </p>
 1023  
      */
 1024  0
     public static final boolean IS_JAVA_1_2 = getJavaVersionMatches("1.2");
 1025  
 
 1026  
     /**
 1027  
      * <p>
 1028  
      * Is <code>true</code> if this is Java version 1.3 (also 1.3.x versions).
 1029  
      * </p>
 1030  
      * 
 1031  
      * <p>
 1032  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1033  
      * </p>
 1034  
      */
 1035  0
     public static final boolean IS_JAVA_1_3 = getJavaVersionMatches("1.3");
 1036  
 
 1037  
     /**
 1038  
      * <p>
 1039  
      * Is <code>true</code> if this is Java version 1.4 (also 1.4.x versions).
 1040  
      * </p>
 1041  
      * 
 1042  
      * <p>
 1043  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1044  
      * </p>
 1045  
      */
 1046  0
     public static final boolean IS_JAVA_1_4 = getJavaVersionMatches("1.4");
 1047  
 
 1048  
     /**
 1049  
      * <p>
 1050  
      * Is <code>true</code> if this is Java version 1.5 (also 1.5.x versions).
 1051  
      * </p>
 1052  
      * 
 1053  
      * <p>
 1054  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1055  
      * </p>
 1056  
      */
 1057  0
     public static final boolean IS_JAVA_1_5 = getJavaVersionMatches("1.5");
 1058  
 
 1059  
     /**
 1060  
      * <p>
 1061  
      * Is <code>true</code> if this is Java version 1.6 (also 1.6.x versions).
 1062  
      * </p>
 1063  
      * 
 1064  
      * <p>
 1065  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1066  
      * </p>
 1067  
      */
 1068  0
     public static final boolean IS_JAVA_1_6 = getJavaVersionMatches("1.6");
 1069  
 
 1070  
     /**
 1071  
      * <p>
 1072  
      * Is <code>true</code> if this is Java version 1.7 (also 1.7.x versions).
 1073  
      * </p>
 1074  
      * 
 1075  
      * <p>
 1076  
      * The field will return <code>false</code> if {@link #JAVA_VERSION} is <code>null</code>.
 1077  
      * </p>
 1078  
      * 
 1079  
      * @since 2.5
 1080  
      */
 1081  0
     public static final boolean IS_JAVA_1_7 = getJavaVersionMatches("1.7");
 1082  
 
 1083  
     // Operating system checks
 1084  
     // -----------------------------------------------------------------------
 1085  
     // These MUST be declared after those above as they depend on the
 1086  
     // values being set up
 1087  
     // OS names from http://www.vamphq.com/os.html
 1088  
     // Selected ones included - please advise dev@commons.apache.org
 1089  
     // if you want another added or a mistake corrected
 1090  
 
 1091  
     /**
 1092  
      * <p>
 1093  
      * Is <code>true</code> if this is AIX.
 1094  
      * </p>
 1095  
      * 
 1096  
      * <p>
 1097  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1098  
      * </p>
 1099  
      * 
 1100  
      * @since 2.0
 1101  
      */
 1102  0
     public static final boolean IS_OS_AIX = getOSMatches("AIX");
 1103  
 
 1104  
     /**
 1105  
      * <p>
 1106  
      * Is <code>true</code> if this is HP-UX.
 1107  
      * </p>
 1108  
      * 
 1109  
      * <p>
 1110  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1111  
      * </p>
 1112  
      * 
 1113  
      * @since 2.0
 1114  
      */
 1115  0
     public static final boolean IS_OS_HP_UX = getOSMatches("HP-UX");
 1116  
 
 1117  
     /**
 1118  
      * <p>
 1119  
      * Is <code>true</code> if this is Irix.
 1120  
      * </p>
 1121  
      * 
 1122  
      * <p>
 1123  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1124  
      * </p>
 1125  
      * 
 1126  
      * @since 2.0
 1127  
      */
 1128  0
     public static final boolean IS_OS_IRIX = getOSMatches("Irix");
 1129  
 
 1130  
     /**
 1131  
      * <p>
 1132  
      * Is <code>true</code> if this is Linux.
 1133  
      * </p>
 1134  
      * 
 1135  
      * <p>
 1136  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1137  
      * </p>
 1138  
      * 
 1139  
      * @since 2.0
 1140  
      */
 1141  0
     public static final boolean IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX");
 1142  
 
 1143  
     /**
 1144  
      * <p>
 1145  
      * Is <code>true</code> if this is Mac.
 1146  
      * </p>
 1147  
      * 
 1148  
      * <p>
 1149  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1150  
      * </p>
 1151  
      * 
 1152  
      * @since 2.0
 1153  
      */
 1154  0
     public static final boolean IS_OS_MAC = getOSMatches("Mac");
 1155  
 
 1156  
     /**
 1157  
      * <p>
 1158  
      * Is <code>true</code> if this is Mac.
 1159  
      * </p>
 1160  
      * 
 1161  
      * <p>
 1162  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1163  
      * </p>
 1164  
      * 
 1165  
      * @since 2.0
 1166  
      */
 1167  0
     public static final boolean IS_OS_MAC_OSX = getOSMatches("Mac OS X");
 1168  
 
 1169  
     /**
 1170  
      * <p>
 1171  
      * Is <code>true</code> if this is OS/2.
 1172  
      * </p>
 1173  
      * 
 1174  
      * <p>
 1175  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1176  
      * </p>
 1177  
      * 
 1178  
      * @since 2.0
 1179  
      */
 1180  0
     public static final boolean IS_OS_OS2 = getOSMatches("OS/2");
 1181  
 
 1182  
     /**
 1183  
      * <p>
 1184  
      * Is <code>true</code> if this is Solaris.
 1185  
      * </p>
 1186  
      * 
 1187  
      * <p>
 1188  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1189  
      * </p>
 1190  
      * 
 1191  
      * @since 2.0
 1192  
      */
 1193  0
     public static final boolean IS_OS_SOLARIS = getOSMatches("Solaris");
 1194  
 
 1195  
     /**
 1196  
      * <p>
 1197  
      * Is <code>true</code> if this is SunOS.
 1198  
      * </p>
 1199  
      * 
 1200  
      * <p>
 1201  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1202  
      * </p>
 1203  
      * 
 1204  
      * @since 2.0
 1205  
      */
 1206  0
     public static final boolean IS_OS_SUN_OS = getOSMatches("SunOS");
 1207  
 
 1208  
     /**
 1209  
      * <p>
 1210  
      * Is <code>true</code> if this is a POSIX compilant system, as in any of AIX, HP-UX, Irix, Linux, MacOSX, Solaris
 1211  
      * or SUN OS.
 1212  
      * </p>
 1213  
      * 
 1214  
      * <p>
 1215  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1216  
      * </p>
 1217  
      * 
 1218  
      * @since 2.1
 1219  
      */
 1220  0
     public static final boolean IS_OS_UNIX = IS_OS_AIX || IS_OS_HP_UX || IS_OS_IRIX || IS_OS_LINUX || IS_OS_MAC_OSX
 1221  
             || IS_OS_SOLARIS || IS_OS_SUN_OS;
 1222  
 
 1223  
     /**
 1224  
      * <p>
 1225  
      * Is <code>true</code> if this is Windows.
 1226  
      * </p>
 1227  
      * 
 1228  
      * <p>
 1229  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1230  
      * </p>
 1231  
      * 
 1232  
      * @since 2.0
 1233  
      */
 1234  0
     public static final boolean IS_OS_WINDOWS = getOSMatches(OS_NAME_WINDOWS_PREFIX);
 1235  
 
 1236  
     /**
 1237  
      * <p>
 1238  
      * Is <code>true</code> if this is Windows 2000.
 1239  
      * </p>
 1240  
      * 
 1241  
      * <p>
 1242  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1243  
      * </p>
 1244  
      * 
 1245  
      * @since 2.0
 1246  
      */
 1247  0
     public static final boolean IS_OS_WINDOWS_2000 = getOSMatches(OS_NAME_WINDOWS_PREFIX, "5.0");
 1248  
 
 1249  
     /**
 1250  
      * <p>
 1251  
      * Is <code>true</code> if this is Windows 95.
 1252  
      * </p>
 1253  
      * 
 1254  
      * <p>
 1255  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1256  
      * </p>
 1257  
      * 
 1258  
      * @since 2.0
 1259  
      */
 1260  0
     public static final boolean IS_OS_WINDOWS_95 = getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.0");
 1261  
     // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above
 1262  
 
 1263  
     /**
 1264  
      * <p>
 1265  
      * Is <code>true</code> if this is Windows 98.
 1266  
      * </p>
 1267  
      * 
 1268  
      * <p>
 1269  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1270  
      * </p>
 1271  
      * 
 1272  
      * @since 2.0
 1273  
      */
 1274  0
     public static final boolean IS_OS_WINDOWS_98 = getOSMatches(OS_NAME_WINDOWS_PREFIX + " 9", "4.1");
 1275  
     // JDK 1.2 running on Windows98 returns 'Windows 95', hence the above
 1276  
 
 1277  
     /**
 1278  
      * <p>
 1279  
      * Is <code>true</code> if this is Windows ME.
 1280  
      * </p>
 1281  
      * 
 1282  
      * <p>
 1283  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1284  
      * </p>
 1285  
      * 
 1286  
      * @since 2.0
 1287  
      */
 1288  0
     public static final boolean IS_OS_WINDOWS_ME = getOSMatches(OS_NAME_WINDOWS_PREFIX, "4.9");
 1289  
     // JDK 1.2 running on WindowsME may return 'Windows 95', hence the above
 1290  
 
 1291  
     /**
 1292  
      * <p>
 1293  
      * Is <code>true</code> if this is Windows NT.
 1294  
      * </p>
 1295  
      * 
 1296  
      * <p>
 1297  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1298  
      * </p>
 1299  
      * 
 1300  
      * @since 2.0
 1301  
      */
 1302  0
     public static final boolean IS_OS_WINDOWS_NT = getOSMatches(OS_NAME_WINDOWS_PREFIX + " NT");
 1303  
     // Windows 2000 returns 'Windows 2000' but may suffer from same JDK1.2 problem
 1304  
 
 1305  
     /**
 1306  
      * <p>
 1307  
      * Is <code>true</code> if this is Windows XP.
 1308  
      * </p>
 1309  
      * 
 1310  
      * <p>
 1311  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1312  
      * </p>
 1313  
      * 
 1314  
      * @since 2.0
 1315  
      */
 1316  0
     public static final boolean IS_OS_WINDOWS_XP = getOSMatches(OS_NAME_WINDOWS_PREFIX, "5.1");
 1317  
 
 1318  
     // -----------------------------------------------------------------------
 1319  
     /**
 1320  
      * <p>
 1321  
      * Is <code>true</code> if this is Windows Vista.
 1322  
      * </p>
 1323  
      * 
 1324  
      * <p>
 1325  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1326  
      * </p>
 1327  
      * 
 1328  
      * @since 2.4
 1329  
      */
 1330  0
     public static final boolean IS_OS_WINDOWS_VISTA = getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.0");
 1331  
 
 1332  
     /**
 1333  
      * <p>
 1334  
      * Is <code>true</code> if this is Windows 7.
 1335  
      * </p>
 1336  
      * 
 1337  
      * <p>
 1338  
      * The field will return <code>false</code> if <code>OS_NAME</code> is <code>null</code>.
 1339  
      * </p>
 1340  
      * 
 1341  
      * @since 2.5
 1342  
      */
 1343  0
     public static final boolean IS_OS_WINDOWS_7 = getOSMatches(OS_NAME_WINDOWS_PREFIX, "6.1");
 1344  
 
 1345  
     // -----------------------------------------------------------------------
 1346  
     /**
 1347  
      * <p>
 1348  
      * SystemUtils instances should NOT be constructed in standard programming. Instead, the class should be used as
 1349  
      * <code>SystemUtils.FILE_SEPARATOR</code>.
 1350  
      * </p>
 1351  
      * 
 1352  
      * <p>
 1353  
      * This constructor is public to permit tools that require a JavaBean instance to operate.
 1354  
      * </p>
 1355  
      */
 1356  
     public SystemUtils() {
 1357  0
         super();
 1358  0
     }
 1359  
 
 1360  
     // -----------------------------------------------------------------------
 1361  
     /**
 1362  
      * <p>
 1363  
      * Gets the Java version number as a <code>float</code>.
 1364  
      * </p>
 1365  
      * 
 1366  
      * <p>
 1367  
      * Example return values:
 1368  
      * </p>
 1369  
      * <ul>
 1370  
      * <li><code>1.2f</code> for JDK 1.2
 1371  
      * <li><code>1.31f</code> for JDK 1.3.1
 1372  
      * </ul>
 1373  
      * 
 1374  
      * @return the version, for example 1.31f for JDK 1.3.1
 1375  
      * @deprecated Use {@link #JAVA_VERSION_FLOAT} instead. Method will be removed in Commons Lang 3.0.
 1376  
      */
 1377  
     @Deprecated
 1378  
     public static float getJavaVersion() {
 1379  0
         return JAVA_VERSION_FLOAT;
 1380  
     }
 1381  
 
 1382  
     /**
 1383  
      * <p>
 1384  
      * Gets the Java version number as a <code>float</code>.
 1385  
      * </p>
 1386  
      * 
 1387  
      * <p>
 1388  
      * Example return values:
 1389  
      * </p>
 1390  
      * <ul>
 1391  
      * <li><code>1.2f</code> for JDK 1.2
 1392  
      * <li><code>1.31f</code> for JDK 1.3.1
 1393  
      * </ul>
 1394  
      * 
 1395  
      * <p>
 1396  
      * Patch releases are not reported. Zero is returned if {@link #JAVA_VERSION_TRIMMED} is <code>null</code>.
 1397  
      * </p>
 1398  
      * 
 1399  
      * @return the version, for example 1.31f for JDK 1.3.1
 1400  
      */
 1401  
     private static float getJavaVersionAsFloat() {
 1402  0
         if (JAVA_VERSION_TRIMMED == null) {
 1403  0
             return 0f;
 1404  
         }
 1405  0
         String str = JAVA_VERSION_TRIMMED.substring(0, 3);
 1406  0
         if (JAVA_VERSION_TRIMMED.length() >= 5) {
 1407  0
             str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
 1408  
         }
 1409  
         try {
 1410  0
             return Float.parseFloat(str);
 1411  0
         } catch (Exception ex) {
 1412  0
             return 0;
 1413  
         }
 1414  
     }
 1415  
 
 1416  
     /**
 1417  
      * <p>
 1418  
      * Gets the Java version number as an <code>int</code>.
 1419  
      * </p>
 1420  
      * 
 1421  
      * <p>
 1422  
      * Example return values:
 1423  
      * </p>
 1424  
      * <ul>
 1425  
      * <li><code>120</code> for JDK 1.2
 1426  
      * <li><code>131</code> for JDK 1.3.1
 1427  
      * </ul>
 1428  
      * 
 1429  
      * <p>
 1430  
      * Patch releases are not reported. Zero is returned if {@link #JAVA_VERSION_TRIMMED} is <code>null</code>.
 1431  
      * </p>
 1432  
      * 
 1433  
      * @return the version, for example 131 for JDK 1.3.1
 1434  
      */
 1435  
     private static int getJavaVersionAsInt() {
 1436  0
         if (JAVA_VERSION_TRIMMED == null) {
 1437  0
             return 0;
 1438  
         }
 1439  0
         String str = JAVA_VERSION_TRIMMED.substring(0, 1);
 1440  0
         str = str + JAVA_VERSION_TRIMMED.substring(2, 3);
 1441  0
         if (JAVA_VERSION_TRIMMED.length() >= 5) {
 1442  0
             str = str + JAVA_VERSION_TRIMMED.substring(4, 5);
 1443  
         } else {
 1444  0
             str = str + "0";
 1445  
         }
 1446  
         try {
 1447  0
             return Integer.parseInt(str);
 1448  0
         } catch (Exception ex) {
 1449  0
             return 0;
 1450  
         }
 1451  
     }
 1452  
 
 1453  
     /**
 1454  
      * Trims the text of the java version to start with numbers.
 1455  
      * 
 1456  
      * @return the trimmed java version
 1457  
      */
 1458  
     private static String getJavaVersionTrimmed() {
 1459  0
         if (JAVA_VERSION != null) {
 1460  0
             for (int i = 0; i < JAVA_VERSION.length(); i++) {
 1461  0
                 char ch = JAVA_VERSION.charAt(i);
 1462  0
                 if (ch >= '0' && ch <= '9') {
 1463  0
                     return JAVA_VERSION.substring(i);
 1464  
                 }
 1465  
             }
 1466  
         }
 1467  0
         return null;
 1468  
     }
 1469  
 
 1470  
     /**
 1471  
      * <p>
 1472  
      * Decides if the java version matches.
 1473  
      * </p>
 1474  
      * 
 1475  
      * @param versionPrefix
 1476  
      *            the prefix for the java version
 1477  
      * @return true if matches, or false if not or can't determine
 1478  
      */
 1479  
     private static boolean getJavaVersionMatches(String versionPrefix) {
 1480  0
         if (JAVA_VERSION_TRIMMED == null) {
 1481  0
             return false;
 1482  
         }
 1483  0
         return JAVA_VERSION_TRIMMED.startsWith(versionPrefix);
 1484  
     }
 1485  
 
 1486  
     /**
 1487  
      * <p>
 1488  
      * Decides if the operating system matches.
 1489  
      * </p>
 1490  
      * 
 1491  
      * @param osNamePrefix
 1492  
      *            the prefix for the os name
 1493  
      * @return true if matches, or false if not or can't determine
 1494  
      */
 1495  
     private static boolean getOSMatches(String osNamePrefix) {
 1496  0
         if (OS_NAME == null) {
 1497  0
             return false;
 1498  
         }
 1499  0
         return OS_NAME.startsWith(osNamePrefix);
 1500  
     }
 1501  
 
 1502  
     /**
 1503  
      * <p>
 1504  
      * Decides if the operating system matches.
 1505  
      * </p>
 1506  
      * 
 1507  
      * @param osNamePrefix
 1508  
      *            the prefix for the os name
 1509  
      * @param osVersionPrefix
 1510  
      *            the prefix for the version
 1511  
      * @return true if matches, or false if not or can't determine
 1512  
      */
 1513  
     private static boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
 1514  0
         if (OS_NAME == null || OS_VERSION == null) {
 1515  0
             return false;
 1516  
         }
 1517  0
         return OS_NAME.startsWith(osNamePrefix) && OS_VERSION.startsWith(osVersionPrefix);
 1518  
     }
 1519  
 
 1520  
     // -----------------------------------------------------------------------
 1521  
     /**
 1522  
      * <p>
 1523  
      * Gets a System property, defaulting to <code>null</code> if the property cannot be read.
 1524  
      * </p>
 1525  
      * 
 1526  
      * <p>
 1527  
      * If a <code>SecurityException</code> is caught, the return value is <code>null</code> and a message is written to
 1528  
      * <code>System.err</code>.
 1529  
      * </p>
 1530  
      * 
 1531  
      * @param property
 1532  
      *            the system property name
 1533  
      * @return the system property value or <code>null</code> if a security problem occurs
 1534  
      */
 1535  
     private static String getSystemProperty(String property) {
 1536  
         try {
 1537  0
             return System.getProperty(property);
 1538  0
         } catch (SecurityException ex) {
 1539  
             // we are not allowed to look at this property
 1540  0
             System.err.println("Caught a SecurityException reading the system property '" + property
 1541  
                     + "'; the SystemUtils property value will default to null.");
 1542  0
             return null;
 1543  
         }
 1544  
     }
 1545  
 
 1546  
     /**
 1547  
      * <p>
 1548  
      * Is the Java version at least the requested version.
 1549  
      * </p>
 1550  
      * 
 1551  
      * <p>
 1552  
      * Example input:
 1553  
      * </p>
 1554  
      * <ul>
 1555  
      * <li><code>1.2f</code> to test for JDK 1.2</li>
 1556  
      * <li><code>1.31f</code> to test for JDK 1.3.1</li>
 1557  
      * </ul>
 1558  
      * 
 1559  
      * @param requiredVersion
 1560  
      *            the required version, for example 1.31f
 1561  
      * @return <code>true</code> if the actual version is equal or greater than the required version
 1562  
      */
 1563  
     public static boolean isJavaVersionAtLeast(float requiredVersion) {
 1564  0
         return JAVA_VERSION_FLOAT >= requiredVersion;
 1565  
     }
 1566  
 
 1567  
     /**
 1568  
      * <p>
 1569  
      * Is the Java version at least the requested version.
 1570  
      * </p>
 1571  
      * 
 1572  
      * <p>
 1573  
      * Example input:
 1574  
      * </p>
 1575  
      * <ul>
 1576  
      * <li><code>120</code> to test for JDK 1.2 or greater</li>
 1577  
      * <li><code>131</code> to test for JDK 1.3.1 or greater</li>
 1578  
      * </ul>
 1579  
      * 
 1580  
      * @param requiredVersion
 1581  
      *            the required version, for example 131
 1582  
      * @return <code>true</code> if the actual version is equal or greater than the required version
 1583  
      * @since 2.0
 1584  
      */
 1585  
     public static boolean isJavaVersionAtLeast(int requiredVersion) {
 1586  0
         return JAVA_VERSION_INT >= requiredVersion;
 1587  
     }
 1588  
 
 1589  
     /**
 1590  
      * Returns whether the {@link #JAVA_AWT_HEADLESS} value is <code>true</code>.
 1591  
      * 
 1592  
      * @return <code>true</code> if <code>JAVA_AWT_HEADLESS</code> is <code>"true"</code>, <code>false</code> otherwise.
 1593  
      * 
 1594  
      * @see #JAVA_AWT_HEADLESS
 1595  
      * @since 2.1
 1596  
      * @since Java 1.4
 1597  
      */
 1598  
     public static boolean isJavaAwtHeadless() {
 1599  0
         return JAVA_AWT_HEADLESS != null ? JAVA_AWT_HEADLESS.equals(Boolean.TRUE.toString()) : false;
 1600  
     }
 1601  
 
 1602  
     /**
 1603  
      * <p>
 1604  
      * Gets the Java home directory as a <code>File</code>.
 1605  
      * </p>
 1606  
      * 
 1607  
      * @return a directory
 1608  
      * @throws SecurityException
 1609  
      *             if a security manager exists and its <code>checkPropertyAccess</code> method doesn't allow access to
 1610  
      *             the specified system property.
 1611  
      * @see System#getProperty(String)
 1612  
      * @since 2.1
 1613  
      */
 1614  
     public static File getJavaHome() {
 1615  0
         return new File(System.getProperty(JAVA_HOME_KEY));
 1616  
     }
 1617  
 
 1618  
     /**
 1619  
      * <p>
 1620  
      * Gets the Java IO temporary directory as a <code>File</code>.
 1621  
      * </p>
 1622  
      * 
 1623  
      * @return a directory
 1624  
      * @throws SecurityException
 1625  
      *             if a security manager exists and its <code>checkPropertyAccess</code> method doesn't allow access to
 1626  
      *             the specified system property.
 1627  
      * @see System#getProperty(String)
 1628  
      * @since 2.1
 1629  
      */
 1630  
     public static File getJavaIoTmpDir() {
 1631  0
         return new File(System.getProperty(JAVA_IO_TMPDIR_KEY));
 1632  
     }
 1633  
 
 1634  
     /**
 1635  
      * <p>
 1636  
      * Gets the user directory as a <code>File</code>.
 1637  
      * </p>
 1638  
      * 
 1639  
      * @return a directory
 1640  
      * @throws SecurityException
 1641  
      *             if a security manager exists and its <code>checkPropertyAccess</code> method doesn't allow access to
 1642  
      *             the specified system property.
 1643  
      * @see System#getProperty(String)
 1644  
      * @since 2.1
 1645  
      */
 1646  
     public static File getUserDir() {
 1647  0
         return new File(System.getProperty(USER_DIR_KEY));
 1648  
     }
 1649  
 
 1650  
     /**
 1651  
      * <p>
 1652  
      * Gets the user home directory as a <code>File</code>.
 1653  
      * </p>
 1654  
      * 
 1655  
      * @return a directory
 1656  
      * @throws SecurityException
 1657  
      *             if a security manager exists and its <code>checkPropertyAccess</code> method doesn't allow access to
 1658  
      *             the specified system property.
 1659  
      * @see System#getProperty(String)
 1660  
      * @since 2.1
 1661  
      */
 1662  
     public static File getUserHome() {
 1663  0
         return new File(System.getProperty(USER_HOME_KEY));
 1664  
     }
 1665  
 
 1666  
 }