branch, master, updated. v0.7-7-gff91eb1

The branch, master has been updated via ff91eb1c05510d41e19243a039a85f4864af0648 (commit) from c835e6c2babc39cd5c935b00a84d7d4bc796cce0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.qos.ch/gitweb/?p=cal10n.git;a=commit;h=ff91eb1c05510d41e19243a039... http://github.com/ceki/cal10n/commit/ff91eb1c05510d41e19243a039a85f4864af064... commit ff91eb1c05510d41e19243a039a85f4864af0648 Author: Ceki Gulcu <ceki@qos.ch> Date: Wed Oct 28 18:25:09 2009 +0100 - The bundle <code>lookup</code>() method in MessageConveyor now uses the class loader of the enum tpye instead of the class loader which loaded the MessageConveyor class. The fixes CAL-8. diff --git a/cal10n-api/src/main/java/ch/qos/cal10n/MessageConveyor.java b/cal10n-api/src/main/java/ch/qos/cal10n/MessageConveyor.java index 11395c9..ff9033e 100644 --- a/cal10n-api/src/main/java/ch/qos/cal10n/MessageConveyor.java +++ b/cal10n-api/src/main/java/ch/qos/cal10n/MessageConveyor.java @@ -42,86 +42,90 @@ import ch.qos.cal10n.util.CAL10NResourceBundleFinder; */ public class MessageConveyor implements IMessageConveyor { - final Locale locale; - - final Map<String, CAL10NResourceBundle> cache = new ConcurrentHashMap<String, CAL10NResourceBundle>(); - - /** - * The {@link Locale} associated with this instance. - * - * @param locale - */ - public MessageConveyor(Locale locale) { - this.locale = locale; - } - - /** - * Given an enum as key, find the corresponding resource bundle and return the - * corresponding internationalized. - * - * <p> - * The name of the resource bundle is defined via the {@link BaseName} - * annotation whereas the locale is specified in this MessageConveyor - * instance's constructor. - * - * @param key - * an enum instance used as message key - * - */ - public <E extends Enum<?>> String getMessage(E key, Object... args) - throws MessageConveyorException { - - String declararingClassName = key.getDeclaringClass().getName(); - CAL10NResourceBundle rb = cache.get(declararingClassName); - if (rb == null || rb.hasChanged()) { - rb = lookup(key); - cache.put(declararingClassName, rb); - } - - String keyAsStr = key.toString(); - String value = rb.getString(keyAsStr); - if (value == null) { - return "No key found for " + keyAsStr; - } else { - if (args == null || args.length == 0) { - return value; - } else { - return MessageFormat.format(value, args); - } - } - } - - private <E extends Enum<?>> CAL10NResourceBundle lookup(E key) - throws MessageConveyorException { - Class<?> declaringClass = key.getDeclaringClass(); - - String baseName = AnnotationExtractor.getBaseName(key.getDeclaringClass()); - if (baseName == null) { - throw new MessageConveyorException( - "Missing @BaseName annotation in enum type [" - + key.getClass().getName() + "]. See also " - + Cal10nConstants.MISSING_BN_ANNOTATION_URL); - } - - String charset = AnnotationExtractor.getCharset(declaringClass, locale); - CAL10NResourceBundle rb = CAL10NResourceBundleFinder.getBundle(this - .getClass().getClassLoader(), baseName, locale, charset); - - if (rb == null) { - throw new MessageConveyorException("Failed to locate resource bundle [" - + baseName + "] for locale [" + locale + "] for enum type [" - + key.getDeclaringClass().getName() + "]"); - } - return rb; - } - - public String getMessage(MessageParameterObj mpo) - throws MessageConveyorException { - if (mpo == null) { - throw new IllegalArgumentException( - "MessageParameterObj argumument cannot be null"); - } - return getMessage(mpo.getKey(), mpo.getArgs()); - } - + final Locale locale; + + final Map<String, CAL10NResourceBundle> cache = new ConcurrentHashMap<String, CAL10NResourceBundle>(); + + /** + * The {@link Locale} associated with this instance. + * + * @param locale + */ + public MessageConveyor(Locale locale) { + this.locale = locale; + } + + /** + * Given an enum as key, find the corresponding resource bundle and return + * the corresponding internationalized. + * + * <p> + * The name of the resource bundle is defined via the {@link BaseName} + * annotation whereas the locale is specified in this MessageConveyor + * instance's constructor. + * + * @param key + * an enum instance used as message key + * + */ + public <E extends Enum<?>> String getMessage(E key, Object... args) + throws MessageConveyorException { + + String declararingClassName = key.getDeclaringClass().getName(); + CAL10NResourceBundle rb = cache.get(declararingClassName); + if (rb == null || rb.hasChanged()) { + rb = lookup(key); + cache.put(declararingClassName, rb); + } + + String keyAsStr = key.toString(); + String value = rb.getString(keyAsStr); + if (value == null) { + return "No key found for " + keyAsStr; + } else { + if (args == null || args.length == 0) { + return value; + } else { + return MessageFormat.format(value, args); + } + } + } + + private <E extends Enum<?>> CAL10NResourceBundle lookup(E key) + throws MessageConveyorException { + Class<?> declaringClass = key.getDeclaringClass(); + + String baseName = AnnotationExtractor.getBaseName(key + .getDeclaringClass()); + if (baseName == null) { + throw new MessageConveyorException( + "Missing @BaseName annotation in enum type [" + + key.getClass().getName() + "]. See also " + + Cal10nConstants.MISSING_BN_ANNOTATION_URL); + } + + String charset = AnnotationExtractor.getCharset(declaringClass, locale); + // use the declaring class' loader instead of + // this.getClass().getClassLoader() + // see also http://jira.qos.ch/browse/CAL-8 + CAL10NResourceBundle rb = CAL10NResourceBundleFinder.getBundle( + declaringClass.getClassLoader(), baseName, locale, charset); + + if (rb == null) { + throw new MessageConveyorException( + "Failed to locate resource bundle [" + baseName + + "] for locale [" + locale + "] for enum type [" + + key.getDeclaringClass().getName() + "]"); + } + return rb; + } + + public String getMessage(MessageParameterObj mpo) + throws MessageConveyorException { + if (mpo == null) { + throw new IllegalArgumentException( + "MessageParameterObj argumument cannot be null"); + } + return getMessage(mpo.getKey(), mpo.getArgs()); + } } diff --git a/cal10n-site/src/site/pages/news.html b/cal10n-site/src/site/pages/news.html index 4dbfedb..53397c1 100644 --- a/cal10n-site/src/site/pages/news.html +++ b/cal10n-site/src/site/pages/news.html @@ -34,6 +34,14 @@ Muir in <a href="http://jira.qos.ch/browse/CAL-9">CAL-9</a>. </p> + <p>The bundle <code>lookup</code>() method in + <code>MessageConveyor</code> now uses the class loader of the enum + tpye instead of the class loader which loaded the + <code>MessageConveyor</code> class. The fixes <a + href="http://jira.qos.ch/browse/CAL-8">CAL-8</a> as reported by + Pete Muir. + </p> + <hr width="80%" align="center" /> <h3>4th of September 2009 - Release of CAL10N version 0.7</h3> ----------------------------------------------------------------------- Summary of changes: .../main/java/ch/qos/cal10n/MessageConveyor.java | 168 ++++++++++---------- cal10n-site/src/site/pages/news.html | 8 + 2 files changed, 94 insertions(+), 82 deletions(-) hooks/post-receive -- Compiler assisted localization library
participants (1)
-
git-noreply@pixie.qos.ch