blob: 84675b34537d3e3ee0814d353a77e36f3eaf983b [file] [log] [blame]
package org.apache.maven.plugins.javadoc;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.io.File;
/**
* Contains several OS-specific methods from Commons-Lang3's SystemUtils. We don't want to use that class because it
* uses enums for Java versions, which implies that with every new Java version a new commons-lang3 is required.
*
* @author Robert Scholte
* @since 3.0.1
*/
class SystemUtils
{
/**
* <p>
* The {@code os.name} System Property. Operating system name.
* </p>
* <p>
* Defaults to {@code null} if the runtime does not have security access to read this property or the property does
* not exist.
* </p>
* <p>
* This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
* {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
* sync with that System property.
* </p>
*
* @since Java 1.1
*/
public static final String OS_NAME = getSystemProperty( "os.name" );
/**
* The prefix String for all Windows OS.
*/
private static final String OS_NAME_WINDOWS_PREFIX = "Windows";
/**
* <p>
* Is {@code true} if this is AIX.
* </p>
* <p>
* The field will return {@code false} if {@code OS_NAME} is {@code null}.
* </p>
*/
public static final boolean IS_OS_AIX = getOSMatchesName( "AIX" );
/**
* <p>
* Is {@code true} if this is Mac.
* </p>
* <p>
* The field will return {@code false} if {@code OS_NAME} is {@code null}.
* </p>
*/
public static final boolean IS_OS_MAC_OSX = getOSMatchesName( "Mac OS X" );
/**
* <p>
* Is {@code true} if this is Windows.
* </p>
* <p>
* The field will return {@code false} if {@code OS_NAME} is {@code null}.
* </p>
*/
public static final boolean IS_OS_WINDOWS = getOSMatchesName( OS_NAME_WINDOWS_PREFIX );
/**
* The System property key for the Java home directory.
*/
private static final String JAVA_HOME_KEY = "java.home";
/**
* <p>
* The {@code line.separator} System Property. Line separator (<code>&quot;\n&quot;</code> on UNIX).
* </p>
* <p>
* Defaults to {@code null} if the runtime does not have security access to read this property or the property does
* not exist.
* </p>
* <p>
* This value is initialized when the class is loaded. If {@link System#setProperty(String,String)} or
* {@link System#setProperties(java.util.Properties)} is called after this class is loaded, the value will be out of
* sync with that System property.
* </p>
*
* @since Java 1.1
*/
public static final String LINE_SEPARATOR = getSystemProperty( "line.separator" );
/**
* Decides if the operating system matches.
*
* @param osNamePrefix the prefix for the os name
* @return true if matches, or false if not or can't determine
*/
private static boolean getOSMatchesName( final String osNamePrefix )
{
return isOSNameMatch( OS_NAME, osNamePrefix );
}
/**
* Decides if the operating system matches.
* <p>
* This method is package private instead of private to support unit test invocation.
* </p>
*
* @param osName the actual OS name
* @param osNamePrefix the prefix for the expected OS name
* @return true if matches, or false if not or can't determine
*/
static boolean isOSNameMatch( final String osName, final String osNamePrefix )
{
if ( osName == null )
{
return false;
}
return osName.startsWith( osNamePrefix );
}
/**
* <p>
* Gets the Java home directory as a {@code File}.
* </p>
*
* @return a directory
* @throws SecurityException if a security manager exists and its {@code checkPropertyAccess} method doesn't allow
* access to the specified system property.
* @see System#getProperty(String)
* @since 2.1
*/
public static File getJavaHome()
{
return new File( System.getProperty( JAVA_HOME_KEY ) );
}
/**
* <p>
* Gets a System property, defaulting to {@code null} if the property cannot be read.
* </p>
* <p>
* If a {@code SecurityException} is caught, the return value is {@code null} and a message is written to
* {@code System.err}.
* </p>
*
* @param property the system property name
* @return the system property value or {@code null} if a security problem occurs
*/
private static String getSystemProperty( final String property )
{
try
{
return System.getProperty( property );
}
catch ( final SecurityException ex )
{
// we are not allowed to look at this property
System.err.println( "Caught a SecurityException reading the system property '" + property
+ "'; the SystemUtils property value will default to null." );
return null;
}
}
}