001 package org.trails.i18n;
002
003 import java.util.Locale;
004
005 import org.trails.descriptor.IClassDescriptor;
006 import org.trails.descriptor.IDescriptor;
007 import org.trails.descriptor.IPropertyDescriptor;
008
009 public abstract class AbstractMessageSource implements TrailsMessageSource
010 {
011
012 public String getMessageWithDefaultValue(String key, String defaultMessage)
013 {
014 return getMessageOrDefaultValue(getMessage(key), defaultMessage);
015 }
016
017 public String getMessageWithDefaultValue(String key, Object[] args, String defaultMessage)
018 {
019 return getMessageOrDefaultValue(getMessage(key, args), defaultMessage);
020 }
021
022 public String getMessageWithDefaultValue(String key, Locale locale, String defaultMessage)
023 {
024 return getMessageOrDefaultValue(getMessage(key, locale), defaultMessage);
025 }
026
027 public String getMessageWithDefaultValue(String key, Object[] args, Locale locale, String defaultMessage)
028 {
029 return getMessageOrDefaultValue(getMessage(key, args, locale), defaultMessage);
030 }
031
032 private String getMessageOrDefaultValue(String message, String defaultMessage)
033 {
034 return (message != null) ? message : defaultMessage;
035 }
036
037 public String getDisplayName(IDescriptor descriptor, String defaultMessage)
038 {
039 String fullName;
040 String shortName;
041 if (descriptor instanceof IPropertyDescriptor)
042 {
043 IPropertyDescriptor property = (IPropertyDescriptor) descriptor;
044 fullName = property.getBeanType().getName() + "." + property.getName();
045 shortName = property.getName();
046 } else if (descriptor instanceof IClassDescriptor)
047 {
048 IClassDescriptor clazz = (IClassDescriptor) descriptor;
049 fullName = clazz.getType().getName();
050 shortName = clazz.getType().getSimpleName();
051 } else
052 {
053 return defaultMessage;
054 }
055
056 return selectDisplayName(fullName, shortName, defaultMessage);
057 }
058
059 public String getPluralDislayName(IClassDescriptor clazz, String defaultMessage)
060 {
061 String fullName = clazz.getType().getName() + "__plural";
062 String shortName = clazz.getType().getSimpleName() + "__plural";
063
064 return selectDisplayName(fullName, shortName, defaultMessage);
065 }
066
067 /**
068 * Select a locale message, given two keys and a default value in case no message is found.
069 */
070 private String selectDisplayName(String firstKey, String secondKey, String defValue)
071 {
072 String message;
073
074 message = getMessage(firstKey);
075 if (message == null)
076 {
077 message = getMessage(secondKey);
078 if (message == null)
079 {
080 message = defValue;
081 }
082 }
083 return message;
084 }
085 }