org.springframework.context.support
Class AbstractMessageSource

java.lang.Object
  extended byorg.springframework.context.support.AbstractMessageSource
All Implemented Interfaces:
HierarchicalMessageSource, MessageSource
Direct Known Subclasses:
ReloadableResourceBundleMessageSource, ResourceBundleMessageSource, StaticMessageSource

public abstract class AbstractMessageSource
extends java.lang.Object
implements HierarchicalMessageSource

Abstract implementation of HierarchicalMessageSource interface, making it easy to implement a custom MessageSource. Subclasses must implement the abstract resolveCode method.

Supports not only MessageSourceResolvables as primary messages but also resolution of message arguments that are in turn MessageSourceResolvables themselves.

This class does not implement caching, thus subclasses can dynamically change messages over time.

Author:
Rod Johnson, Juergen Hoeller, Seth Ladd
See Also:
resolveCode(java.lang.String, java.util.Locale)

Field Summary
protected  org.apache.commons.logging.Log logger
           
 
Constructor Summary
AbstractMessageSource()
           
 
Method Summary
 java.lang.String getMessage(MessageSourceResolvable resolvable, java.util.Locale locale)
          Try to resolve the message using all the attributes contained within the MessageSourceResolvable argument that was passed in.
 java.lang.String getMessage(java.lang.String code, java.lang.Object[] args, java.util.Locale locale)
          Try to resolve the message.
 java.lang.String getMessage(java.lang.String code, java.lang.Object[] args, java.lang.String defaultMessage, java.util.Locale locale)
          Try to resolve the message.
protected  java.lang.String getMessageInternal(java.lang.String code, java.lang.Object[] args, java.util.Locale locale)
          Resolve the given code and arguments as message in the given Locale, throwing a NoSuchMessageException if not found.
 MessageSource getParentMessageSource()
          Return the parent of this MessageSource, or null if none.
protected abstract  java.text.MessageFormat resolveCode(java.lang.String code, java.util.Locale locale)
          Subclasses must implement this method to resolve a message.
 void setParentMessageSource(MessageSource parent)
          Set the parent that will be used to try to resolve messages that this object can't resolve.
 void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
          Set whether to use the message code as default message instead of throwing a NoSuchMessageException.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected final org.apache.commons.logging.Log logger
Constructor Detail

AbstractMessageSource

public AbstractMessageSource()
Method Detail

setParentMessageSource

public void setParentMessageSource(MessageSource parent)
Description copied from interface: HierarchicalMessageSource
Set the parent that will be used to try to resolve messages that this object can't resolve.

Specified by:
setParentMessageSource in interface HierarchicalMessageSource
Parameters:
parent - parent MessageSource that will be used to resolve messages that this object can't resolve. May be null, in which case no further resolution is possible.

getParentMessageSource

public MessageSource getParentMessageSource()
Description copied from interface: HierarchicalMessageSource
Return the parent of this MessageSource, or null if none.

Specified by:
getParentMessageSource in interface HierarchicalMessageSource

setUseCodeAsDefaultMessage

public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
Set whether to use the message code as default message instead of throwing a NoSuchMessageException. Useful for development and debugging. Default is false.

See Also:
getMessage(String, Object[], Locale)

getMessage

public final java.lang.String getMessage(java.lang.String code,
                                         java.lang.Object[] args,
                                         java.lang.String defaultMessage,
                                         java.util.Locale locale)
Description copied from interface: MessageSource
Try to resolve the message. Return default message if no message was found.

Specified by:
getMessage in interface MessageSource
Parameters:
code - code to lookup up, such as 'calculator.noRateSet'. Users of this class are encouraged to base message names on the relevant fully qualified class name, thus avoiding conflict and ensuring maximum clarity.
args - array of arguments that will be filled in for params within the message (params look like "{0}", "{1,date}", "{2,time}" within a message), or null if none.
locale - the Locale in which to do lookup
defaultMessage - String to return if the lookup fails
Returns:
the resolved message if the lookup is successful; otherwise the default message passed as a parameter
See Also:
java.text.MessageFormat

getMessage

public final java.lang.String getMessage(java.lang.String code,
                                         java.lang.Object[] args,
                                         java.util.Locale locale)
                                  throws NoSuchMessageException
Description copied from interface: MessageSource
Try to resolve the message. Treat as an error if the message can't be found.

Specified by:
getMessage in interface MessageSource
Parameters:
code - code to lookup up, such as 'calculator.noRateSet'
args - Array of arguments that will be filled in for params within the message (params look like "{0}", "{1,date}", "{2,time}" within a message), or null if none.
locale - Locale in which to do lookup
Returns:
the resolved message
Throws:
NoSuchMessageException - if not found in any locale
See Also:
java.text.MessageFormat

getMessage

public final java.lang.String getMessage(MessageSourceResolvable resolvable,
                                         java.util.Locale locale)
                                  throws NoSuchMessageException
Description copied from interface: MessageSource
Try to resolve the message using all the attributes contained within the MessageSourceResolvable argument that was passed in.

NOTE: We must throw a NoSuchMessageException on this method since at the time of calling this method we aren't able to determine if the defaultMessage property of the resolvable is null or not.

Specified by:
getMessage in interface MessageSource
Parameters:
resolvable - value object storing attributes required to properly resolve a message
locale - Locale to be used as the "driver" to figuring out what message to return
Returns:
the resolved message
Throws:
NoSuchMessageException - if not found in any locale
See Also:
java.text.MessageFormat

getMessageInternal

protected java.lang.String getMessageInternal(java.lang.String code,
                                              java.lang.Object[] args,
                                              java.util.Locale locale)
                                       throws NoSuchMessageException
Resolve the given code and arguments as message in the given Locale, throwing a NoSuchMessageException if not found. Does not fall back to the code as default message. Invoked by getMessage methods.

Throws:
NoSuchMessageException
See Also:
getMessage(String, Object[], Locale), getMessage(MessageSourceResolvable, Locale), setUseCodeAsDefaultMessage(boolean)

resolveCode

protected abstract java.text.MessageFormat resolveCode(java.lang.String code,
                                                       java.util.Locale locale)
Subclasses must implement this method to resolve a message.

Returns a MessageFormat instance rather than a message String, to allow for appropriate caching of MessageFormats in subclasses.

Parameters:
code - the code of the message to resolve
locale - the Locale to resolve the code for (subclasses are encouraged to support internationalization)
Returns:
the MessageFormat for the message, or null if not found


Copyright (C) 2003-2004 The Spring Framework Project.