Fix retrieval of Locale for an EPerson so that if the language isn't set, an NPE isn't thrown

git-svn-id: http://scm.dspace.org/svn/repo/trunk@2457 9c30dcfa-912a-0410-8fc2-9e0234be79fd
This commit is contained in:
Graham Triggs
2007-12-20 18:30:15 +00:00
parent ec864182d6
commit 4332d1e05b
4 changed files with 37 additions and 10 deletions

View File

@@ -37,6 +37,10 @@
package org.dspace.core; package org.dspace.core;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dspace.eperson.EPerson;
import java.io.File; import java.io.File;
import java.util.Locale; import java.util.Locale;
import java.util.MissingResourceException; import java.util.MissingResourceException;
@@ -62,6 +66,8 @@ import java.util.StringTokenizer;
public class I18nUtil public class I18nUtil
{ {
private static final Logger log = Logger.getLogger(I18nUtil.class);
// the default Locale of this DSpace Instance // the default Locale of this DSpace Instance
public static final Locale DEFAULTLOCALE = getDefaultLocale(); public static final Locale DEFAULTLOCALE = getDefaultLocale();
@@ -110,6 +116,32 @@ public class I18nUtil
return defaultLocale; return defaultLocale;
} }
/**
* Get the Locale for a specified EPerson. If the language is missing,
* return the default Locale for the repository.
*
* @param ep
* @return
*/
public static Locale getEPersonLocale(EPerson ep)
{
if (ep == null)
{
log.error("No EPerson specified, returning default locale");
return I18nUtil.getDefaultLocale();
}
String lang = ep.getLanguage();
if (StringUtils.isBlank(lang))
{
log.error("No language specified for EPerson " + ep.getID());
return I18nUtil.getDefaultLocale();
}
return I18nUtil.getSupportedLocale(new Locale(lang));
}
/** /**
* get the available Locales for the User Interface as defined in dspace.cfg * get the available Locales for the User Interface as defined in dspace.cfg
* returns an array of Locales or null * returns an array of Locales or null

View File

@@ -314,8 +314,7 @@ public class SubscriptionManager
ObjectIdentifier identifier = null; ObjectIdentifier identifier = null;
// Get a resource bundle according to the eperson language preferences // Get a resource bundle according to the eperson language preferences
Locale epersonLocale = new Locale(eperson.getLanguage()); Locale supportedLocale = I18nUtil.getEPersonLocale(eperson);
Locale supportedLocale = I18nUtil.getSupportedLocale(epersonLocale);
ResourceBundle labels = ResourceBundle.getBundle("Messages", supportedLocale); ResourceBundle labels = ResourceBundle.getBundle("Messages", supportedLocale);
// Get the start and end dates for yesterday // Get the start and end dates for yesterday

View File

@@ -629,8 +629,7 @@ public class WorkflowManager
// Get submitter // Get submitter
EPerson ep = i.getSubmitter(); EPerson ep = i.getSubmitter();
// Get the Locale // Get the Locale
Locale epLocale = new Locale(ep.getLanguage()); Locale supportedLocale = I18nUtil.getEPersonLocale(ep);
Locale supportedLocale = I18nUtil.getSupportedLocale(epLocale);
Email email = ConfigurationManager.getEmail( Email email = ConfigurationManager.getEmail(
I18nUtil.getEmailFilename(supportedLocale, I18nUtil.getEmailFilename(supportedLocale,
"submit_archive")); "submit_archive"));
@@ -812,8 +811,7 @@ public class WorkflowManager
for (int i = 0; i < epa.length; i++) for (int i = 0; i < epa.length; i++)
{ {
Locale epersonLocale = new Locale(epa[i].getLanguage()); Locale supportedLocale = I18nUtil.getEPersonLocale(epa[i]);
Locale supportedLocale = I18nUtil.getSupportedLocale(epersonLocale);
Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_task")); Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_task"));
email.addArgument(title); email.addArgument(title);
email.addArgument(coll.getMetadata("name")); email.addArgument(coll.getMetadata("name"));
@@ -893,8 +891,7 @@ public class WorkflowManager
// Get rejector's name // Get rejector's name
String rejector = getEPersonName(e); String rejector = getEPersonName(e);
Locale eLocale = new Locale(e.getLanguage()); Locale supportedLocale = I18nUtil.getEPersonLocale(e);
Locale supportedLocale = I18nUtil.getSupportedLocale(eLocale);
Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale,"submit_reject")); Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale,"submit_reject"));
email.addRecipient(getSubmitterEPerson(wi).getEmail()); email.addRecipient(getSubmitterEPerson(wi).getEmail());

View File

@@ -102,8 +102,7 @@ public class PasswordServlet extends DSpaceServlet
Authenticate.loggedIn(context, request, context.getCurrentUser()); Authenticate.loggedIn(context, request, context.getCurrentUser());
// Set the Locale according to user preferences // Set the Locale according to user preferences
String preferredLanguage = context.getCurrentUser().getLanguage(); Locale epersonLocale = I18nUtil.getEPersonLocale(context.getCurrentUser());
Locale epersonLocale = I18nUtil.getSupportedLocale(new Locale(preferredLanguage));
context.setCurrentLocale(epersonLocale); context.setCurrentLocale(epersonLocale);
Config.set(request.getSession(), Config.FMT_LOCALE, epersonLocale); Config.set(request.getSession(), Config.FMT_LOCALE, epersonLocale);