Add some tests
[nikiroo-utils.git] / src / be / nikiroo / utils / resources / Bundle.java
index 1c63d69f04f84276eeaf19ee3a29e028f52fae54..2039d578e3c581a98efabad7369dbd0c879ed626 100644 (file)
@@ -8,7 +8,6 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
-import java.io.UnsupportedEncodingException;
 import java.io.Writer;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -18,9 +17,6 @@ import java.util.MissingResourceException;
 import java.util.PropertyResourceBundle;
 import java.util.ResourceBundle;
 
-import be.nikiroo.utils.resources.Bundles;
-import be.nikiroo.utils.resources.Meta;
-
 /**
  * This class encapsulate a {@link ResourceBundle} in UTF-8. It only allows to
  * retrieve values associated to an enumeration, and allows some additional
@@ -61,7 +57,7 @@ public class Bundle<E extends Enum<E>> {
         *         resource file)
         */
        public String getString(E id) {
-               return getStringX(id, "");
+               return getStringX(id, null);
        }
 
        /**
@@ -78,8 +74,7 @@ public class Bundle<E extends Enum<E>> {
         */
        public String getStringX(E id, String suffix) {
                String key = id.name()
-                               + ((suffix == null || suffix.isEmpty()) ? "" : "_"
-                                               + suffix.toUpperCase());
+                               + (suffix == null ? "" : "_" + suffix.toUpperCase());
 
                if (containsKey(key)) {
                        return getString(key).trim();
@@ -184,10 +179,11 @@ public class Bundle<E extends Enum<E>> {
        }
 
        /**
-        * Create/update the .properties file. Will use the most likely candidate as
-        * base if the file does not already exists and this resource is
-        * translatable (for instance, "en_US" will use "en" as a base if the
-        * resource is a translation file).
+        * Create/update the .properties file.
+        * <p>
+        * Will use the most likely candidate as base if the file does not already
+        * exists and this resource is translatable (for instance, "en_US" will use
+        * "en" as a base if the resource is a translation file).
         * 
         * @param path
         *            the path where the .properties files are
@@ -223,6 +219,13 @@ public class Bundle<E extends Enum<E>> {
                writer.close();
        }
 
+       /**
+        * Reload the {@link Bundle} data files.
+        */
+       public void reload() {
+               setBundle(name, null);
+       }
+
        /**
         * Check if the internal map contains the given key.
         * 
@@ -241,26 +244,17 @@ public class Bundle<E extends Enum<E>> {
        }
 
        /**
-        * Get the value for the given key if it exists in the internal map.
+        * Get the value for the given key if it exists in the internal map, or NULL
+        * if not.
         * 
         * @param key
         *            the key to check for
         * 
-        * @return true if it does
+        * @return the value, or NULL
         */
        protected String getString(String key) {
                if (containsKey(key)) {
-                       try {
-                               // Note: it is also possible to fix the borked charset issue
-                               // with a custom ResourceBundle#Control class, but this one,
-                               // while a workaround, depend less upon the JRE classes, which
-                               // may change
-                               return new String(map.getString(key).getBytes("ISO-8859-1"),
-                                               "UTF-8");
-                       } catch (UnsupportedEncodingException e) {
-                               // Those 2 encodings are always supported
-                               e.printStackTrace();
-                       }
+                       return map.getString(key);
                }
 
                return null;
@@ -380,7 +374,7 @@ public class Bundle<E extends Enum<E>> {
                        value = "";
                }
 
-               String[] lines = value.replaceAll("\\\t", "\\\\\\t").split("\n");
+               String[] lines = value.replaceAll("\t", "\\t").split("\n");
                for (int i = 0; i < lines.length; i++) {
                        writer.write(lines[i]);
                        if (i < lines.length - 1) {
@@ -432,7 +426,7 @@ public class Bundle<E extends Enum<E>> {
 
                if (map == null) {
                        map = ResourceBundle.getBundle(type.getPackage().getName() + "."
-                                       + name.name(), locale);
+                                       + name.name(), locale, new FixedResourceBundleControl());
                }
        }