1 19 package org.java.plugin.util; 20 21 import java.util.Collection ; 22 import java.util.Collections ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 import java.util.Locale ; 26 import java.util.Map ; 27 import java.util.MissingResourceException ; 28 import java.util.ResourceBundle ; 29 30 42 public final class ResourceManager { 43 private static final Object FAKE_BUNDLE = new Object (); 44 private static final Map bundles = 45 Collections.synchronizedMap(new HashMap ()); 46 47 53 public static String getMessage(final String packageName, 54 final String messageKey) { 55 return getMessage(packageName, messageKey, Locale.getDefault(), null); 56 } 57 58 67 public static String getMessage(final String packageName, 68 final String messageKey, final Object data) { 69 return getMessage(packageName, messageKey, Locale.getDefault(), data); 70 } 71 72 79 public static String getMessage(final String packageName, 80 final String messageKey, final Locale locale) { 81 return getMessage(packageName, messageKey, locale, null); 82 } 83 84 94 public static String getMessage(final String packageName, 95 final String messageKey, final Locale locale, final Object data) { 96 Object obj = bundles.get(packageName + '|' + locale); 97 if (obj == null) { 98 try { 99 obj = ResourceBundle.getBundle(packageName + ".Resources", locale); 101 } catch (MissingResourceException mre) { 102 obj = FAKE_BUNDLE; 103 } 104 bundles.put(packageName + '|' + locale, obj); 105 } 106 if (obj == FAKE_BUNDLE) { 107 return "resource " + packageName + '.' + messageKey + " not found for locale " + locale; } 110 try { 111 String result = ((ResourceBundle ) obj).getString(messageKey); 112 return (data == null) ? result : processParams(result, data); 113 } catch (MissingResourceException mre) { 114 return "resource " + packageName + '.' + messageKey + " not found for locale " + locale; } 117 } 118 119 private static String processParams(final String str, final Object data) { 120 String result = str; 121 if ((data != null) && data.getClass().isArray()) { 122 Object [] params = (Object [])data; 123 for (int i = 0; i < params.length; i++) { 124 result = replaceAll(result, "{" + i + "}", "" + params[i]); } 126 } else if (data instanceof Collection ) { 127 int i = 0; 128 for (Iterator it = ((Collection )data).iterator(); it.hasNext(); 129 i++) { 130 result = replaceAll(result, "{" + i + "}", "" + it.next()); } 132 } else { 133 result = replaceAll(result, "{0}", "" + data); } 135 return result; 136 } 137 138 private static String replaceAll(final String str, final String from, 139 final String to) { 140 String result = str; 141 int p = 0; 142 while (true) { 143 p = result.indexOf(from, p); 144 if (p == -1) { 145 break; 146 } 147 result = result.substring(0, p) + to 148 + result.substring(p + from.length()); 149 p += to.length(); 150 } 151 return result; 152 } 153 154 private ResourceManager() { 155 } 157 158 } 159 | Popular Tags |