JAL-629 Added --structureimage code and formatting args/subvals. Added tests for...
[jalview.git] / src / jalview / util / MessageManager.java
index 2852364..e55bfab 100644 (file)
@@ -27,7 +27,7 @@ import java.util.ResourceBundle;
 import java.util.ResourceBundle.Control;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
+import jalview.bin.Console;
 
 /**
  * 
@@ -38,14 +38,8 @@ import org.apache.log4j.Logger;
  */
 public class MessageManager
 {
-
-  // BH 2018 switched to org.apache.llog4j.Logger
-
   private static ResourceBundle rb;
 
-  private static Logger log = Logger
-          .getLogger(MessageManager.class.getCanonicalName());
-
   private static Locale loc;
 
   private static Set<String> reportedMissing = new HashSet<>();
@@ -58,7 +52,7 @@ public class MessageManager
       loc = Locale.getDefault();
       // Locale.setDefault(loc);
       /* Getting messages for GV */
-      log.info("Getting messages for lang: " + loc);
+      Console.info("Getting messages for lang: " + loc);
       Control control = Control.getControl(Control.FORMAT_PROPERTIES);
       rb = ResourceBundle.getBundle("lang.Messages", loc, control);
       // if (log.isLoggable(Level.FINEST))
@@ -68,18 +62,25 @@ public class MessageManager
       // }
     } catch (Exception q)
     {
-      log.warn("Exception when initting Locale for i18n messages\n"
+      Console.warn("Exception when initting Locale for i18n messages\n"
               + q.getMessage());
       q.printStackTrace();
     } catch (Error v)
     {
-      log.warn("Error when initting Locale for i18n messages\n"
+      Console.warn("Error when initting Locale for i18n messages\n"
               + v.getMessage());
       v.printStackTrace();
     }
 
   }
 
+  /**
+   * Returns the resource bundle text for the given key, or if not found, the
+   * key prefixed by "[missing key]"
+   * 
+   * @param key
+   * @return
+   */
   public static String getString(String key)
   {
     String value = "[missing key] " + key;
@@ -89,7 +90,7 @@ public class MessageManager
     } catch (Exception e)
     {
       String msg = "I18N missing: " + loc + "\t" + key;
-         logWarning(key, msg);
+      logWarning(key, msg);
     }
     return value;
   }
@@ -99,21 +100,56 @@ public class MessageManager
     return loc;
   }
 
+  /**
+   * Returns the resource bundle text for the given key, with tokens {@code {0},
+   * {1} etc replaced by the supplied parameters. If the key is not found,
+   * returns the key and values prefixed by "[missing key]"
+   * 
+   * @param key
+   * 
+   * @return
+   */
   public static String formatMessage(String key, Object... params)
   {
-    return MessageFormat.format(getString(key), params);
+    try
+    {
+      return MessageFormat.format(rb.getString(key), params);
+    } catch (Exception e)
+    {
+      Console.warn("I18N missing: " + loc + "\t" + key);
+    }
+    String value = "[missing key] " + key + "";
+    for (Object p : params)
+    {
+      value += " '" + p.toString() + "'";
+    }
+    return value;
   }
 
+  /**
+   * Returns the resource bundle text for the given key, with tokens {@code {0},
+   * {1} etc replaced by the supplied parameters. If the key is not found,
+   * returns the key and values prefixed by "[missing key]"
+   * 
+   * @param key
+   * 
+   * @return
+   */
   public static String formatMessage(String key, String[] params)
   {
-    return MessageFormat.format(getString(key), (Object[]) params);
+    return formatMessage(key, (Object[]) params);
   }
 
   /**
-   * Looks up and returns a key given a root and a human-readable(ish) name that
-   * when combined might resolve to an i18n string. If the key doesn't resolve,
-   * then name is returned. Use this for programmatically constructed keys that
-   * have a human readable alternative used in the program (e.g. BLOSUM62 and
+   * Returns resource bundle text given a root and a human-readable(ish) name
+   * that when combined might resolve to an i18n string. {@code name} is forced
+   * to lower case, with any spaces removed, and concatenated to {@code keyroot}
+   * to form a lookup key.
+   * <p>
+   * If the key doesn't resolve, then {@code name} is returned.
+   * <p>
+   * Use this for programmatically constructed keys that might have a human
+   * readable alternative used in the program (e.g. BLOSUM62 and
    * label.score_blosum62).
    * 
    * @param keyroot
@@ -122,15 +158,16 @@ public class MessageManager
    */
   public static String getStringOrReturn(String keyroot, String name)
   {
-    String smkey = keyroot + name.toLowerCase().replaceAll(" ", "");
+    String smkey = keyroot
+            + name.toLowerCase(Locale.ROOT).replaceAll(" ", "");
     try
     {
       name = rb.getString(smkey);
     } catch (Exception x)
     {
-      String msg = "I18N missing key with root " + keyroot + ": " + loc + "\t"
-                         + smkey;
-         logWarning(smkey, msg);
+      String msg = "I18N missing key with root " + keyroot + ": " + loc
+              + "\t" + smkey;
+      logWarning(smkey, msg);
     }
     return name;
   }
@@ -141,12 +178,12 @@ public class MessageManager
    * @param key
    * @param msg
    */
-  private static void logWarning(String key, String msg) 
+  private static void logWarning(String key, String msg)
   {
-       if (!reportedMissing.contains(key))
-       {
+    if (!reportedMissing.contains(key))
+    {
       reportedMissing.add(key);
-         log.info(msg);
-       }
+      Console.info(msg);
+    }
   }
 }