| 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>"\n"</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; |
| } |
| } |
| } |