← Back to team overview

slub.team team mailing list archive

[Merge] lp:~ralf-claussnitzer/goobi-production/bug-927561 into lp:goobi-production

 

Ralf Claussnitzer has proposed merging lp:~ralf-claussnitzer/goobi-production/bug-927561 into lp:goobi-production.

Requested reviews:
  Ralf Claussnitzer (ralf-claussnitzer)
Related bugs:
  Bug #927561 in Goobi.Production: "missing localMessage config crashes application"
  https://bugs.launchpad.net/goobi-production/+bug/927561

For more details, see:
https://code.launchpad.net/~ralf-claussnitzer/goobi-production/bug-927561/+merge/93147
-- 
https://code.launchpad.net/~ralf-claussnitzer/goobi-production/bug-927561/+merge/93147
Your team Saxon State Library Team is subscribed to branch lp:goobi-production.
=== modified file 'src/messages/Messages.java'
--- src/messages/Messages.java	2011-12-20 08:07:09 +0000
+++ src/messages/Messages.java	2012-02-15 07:02:17 +0000
@@ -31,47 +31,66 @@
 
 import de.sub.goobi.config.ConfigMain;
 
+import org.apache.log4j.Logger;
+
 public class Messages {
 	private static final String BUNDLE_NAME = "messages.intmessages"; //$NON-NLS-1$
 
 	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
-	 static  ResourceBundle localBundle;
+	static  ResourceBundle localBundle;
+
+	private static final Logger myLogger = Logger.getLogger(Messages.class);
 
 	private Messages() {
 	}
 
 	public static String getString(String key) {
-		File file = new File(ConfigMain.getParameter("localMessages"));
-		if (file.exists()) {
-			// Load local message bundle from file system only if file exists; if value not exists in bundle, use default bundle from classpath
-
-			try {
-				URL resourceURL = file.toURI().toURL();
-				URLClassLoader urlLoader = new URLClassLoader(new URL[] { resourceURL });
-				localBundle = ResourceBundle.getBundle("messages", FacesContext.getCurrentInstance().getViewRoot().getLocale(), urlLoader);
-			} catch (Exception e) {
-			}
-			
-		}
-
-		// Load local message bundle from classpath
-		try {
-			if (localBundle != null) {
-				if (localBundle.containsKey(key)) {
-					String trans = localBundle.getString(key);
-					return trans;
-				}
-				if (localBundle.containsKey(key.toLowerCase())) {
-					return localBundle.getString(key.toLowerCase());
-				}
-			}
-		} catch (RuntimeException e) {
-		}
-		try {
+		// load local message bundle if not yet loaded
+		if (localBundle == null) {
+			localBundle = loadLocalMessageBundleIfAvailable();
+		}
+		
+		// do local translation
+		if (localBundle != null) {
+			if (localBundle.containsKey(key)) {
+				String trans = localBundle.getString(key);
+				return trans;
+			}
+			if (localBundle.containsKey(key.toLowerCase())) {
+				return localBundle.getString(key.toLowerCase());
+			}
+		}
+
+		// fallback to default resource bundle
+		if (RESOURCE_BUNDLE.containsKey(key)) {
 			String msg = RESOURCE_BUNDLE.getString(key);
 			return msg;
-		} catch (RuntimeException e) {
+		} else {
 			return key;
 		}
 	}
+
+	/**
+	  * Load local message bundle from file system only if file exists.
+	  *
+	  * @return Resource bundle for local messages. Returns NULL if no local message bundle could be found.
+	  */
+	private static ResourceBundle loadLocalMessageBundleIfAvailable() {
+		String localMessages = ConfigMain.getParameter("localMessages");
+		if (localMessages != null) {
+			File file = new File(localMessages);
+			if (file.exists()) {
+				myLogger.info("Local message bundle found: " + localMessages);
+				try {
+					URL resourceURL = file.toURI().toURL();
+					URLClassLoader urlLoader = new URLClassLoader(new URL[] { resourceURL });
+					return ResourceBundle.getBundle("messages", FacesContext.getCurrentInstance().getViewRoot().getLocale(), urlLoader);
+				} catch (java.net.MalformedURLException muex) {
+					myLogger.error("Error reading local message bundle", muex);
+				}
+			}
+		}
+		return null;
+	}
+
 }


Follow ups