/*
Copyright (C) 2001, 2006 United States Government
as represented by the Administrator of the
National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.util;
import gov.nasa.worldwind.Configuration;
import gov.nasa.worldwind.avlist.AVKey;
import java.text.MessageFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.*;
/**
* This class of static methods provides the interface to logging for World Wind components. Logging is performed via
* {@link java.util.logging}. The default logger name is <code>gov.nasa.worldwind</code>. The logger name is
* configurable via {@link gov.nasa.worldwind.Configuration}.
*
* @author tag
* @version $Id: Logging.java 3115 2007-09-27 19:09:05Z tgaskins $
* @see gov.nasa.worldwind.Configuration
* @see java.util.logging
*/
public class Logging
{
private static final String MESSAGE_BUNDLE_NAME = Logging.class.getPackage().getName() + ".MessageStrings";
private Logging()
{
} // Prevent instantiation
/**
* Returns the World Wind logger.
*
* @return The logger.
*/
public static Logger logger()
{
return Logger.getLogger(Configuration.getStringValue(AVKey.LOGGER_NAME, "gov.nasa.worldwind"),
MESSAGE_BUNDLE_NAME);
}
/**
* Returns a specific logger. Does not access {@link gov.nasa.worldwind.Configuration} to determine the configured
* World Wind logger.
* <p/>
* This is needed by {@link gov.nasa.worldwind.Configuration} to avoid calls back into itself when its singleton
* instance is not yet instantiated.
* @param loggerName the name of the logger to use.
* @return The logger.
*/
public static Logger logger(String loggerName)
{
return Logger.getLogger(loggerName != null ? loggerName : "", MESSAGE_BUNDLE_NAME);
}
/**
* Retrieves a message from the World Wind message resource bundle.
*
* @param property the property identifying which message to retrieve.
* @return The requested message.
*/
public static String getMessage(String property)
{
try
{
return (String) ResourceBundle.getBundle(MESSAGE_BUNDLE_NAME, Locale.getDefault()).getObject(property);
}
catch (Exception e)
{
String message = "Exception looking up message from bundle " + MESSAGE_BUNDLE_NAME;
logger().log(java.util.logging.Level.SEVERE, message, e);
return message;
}
}
/**
* Retrieves a message from the World Wind message resource bundle formatted with a single argument. The argument is
* inserted into the message via {@link java.text.MessageFormat}.
*
* @param property the property identifying which message to retrieve.
* @param arg the single argument referenced by the format string identified <code>property</code>.
* @return The requested string formatted with the argument.
* @see java.text.MessageFormat
*/
public static String getMessage(String property, String arg)
{
return arg != null ? getMessage(property, (Object) arg) : getMessage(property);
}
/**
* Retrieves a message from the World Wind message resource bundle formatted with specified arguments. The arguments
* are inserted into the message via {@link java.text.MessageFormat}.
*
* @param property the property identifying which message to retrieve.
* @param args the arguments referenced by the format string identified <code>property</code>.
* @return The requested string formatted with the arguments.
* @see java.text.MessageFormat
*/
public static String getMessage(String property, Object... args)
{
String message;
try
{
message = (String) ResourceBundle.getBundle(MESSAGE_BUNDLE_NAME, Locale.getDefault()).getObject(property);
}
catch (Exception e)
{
message = "Exception looking up message from bundle " + MESSAGE_BUNDLE_NAME;
logger().log(Level.SEVERE, message, e);
return message;
}
try
{
// TODO: This is no longer working with more than one arg in the message string, e.g., {1}
return args == null ? message : MessageFormat.format(message, args);
}
catch (IllegalArgumentException e)
{
message = "Message arguments do not match format string: " + property;
logger().log(Level.SEVERE, message, e);
return message;
}
}
}