X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fresources%2FBundle.java;h=fe3ac1a3be4eb2c66580f855ea9df1ee206085dc;hp=0c57bf992b495d8777b40753e850f9b827e47c39;hb=abfeadcc2c0da88e32dd49291e8163880fe270f1;hpb=5584adbbbf5444c0039fed2b35dc7d5bb57b71b1 diff --git a/src/be/nikiroo/utils/resources/Bundle.java b/src/be/nikiroo/utils/resources/Bundle.java index 0c57bf9..fe3ac1a 100644 --- a/src/be/nikiroo/utils/resources/Bundle.java +++ b/src/be/nikiroo/utils/resources/Bundle.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; @@ -95,8 +96,8 @@ public class Bundle> { * @param name * the id of the setting to check * @param includeDefaultValue - * TRUE to only return false when the setting is not set AND - * there is no default value + * TRUE to only return false when the setting is explicitly set + * to NULL (and not just "no set") in the change maps * * @return TRUE if the setting is set */ @@ -133,8 +134,8 @@ public class Bundle> { * @param def * the default value when it is not present in the config file * - * @return the associated value, or NULL if not found (not present in the - * resource file) + * @return the associated value, or def if not found (not present + * in the resource file) */ public String getString(E id, String def) { return getString(id, def, -1); @@ -154,22 +155,17 @@ public class Bundle> { * the item number to get for an array of values, or -1 for * non-arrays * - * @return the associated value, or NULL if not found (not present in the - * resource file) + * @return the associated value, def if not found (not present in + * the resource file) or NULL if the item is specified (not -1) and + * does not exist */ public String getString(E id, String def, int item) { String rep = getString(id.name(), null); if (rep == null) { - try { - Meta meta = type.getDeclaredField(id.name()).getAnnotation( - Meta.class); - rep = meta.def(); - } catch (NoSuchFieldException e) { - } catch (SecurityException e) { - } + rep = getMetaDef(id.name()); } - if (rep == null || rep.isEmpty()) { + if (rep.isEmpty()) { return def; } @@ -279,8 +275,9 @@ public class Bundle> { * the item number to get for an array of values, or -1 for * non-arrays * - * @return the associated value, or NULL if not found (not present in the - * resource file) + * @return the associated value, def if not found (not present in + * the resource file), NULL if the item is specified (not -1) but + * does not exist and NULL if bad key */ public String getStringX(E id, String suffix, String def, int item) { String key = id.name() @@ -937,9 +934,35 @@ public class Bundle> { return changeMap.containsKey(key) || map.containsKey(key); } + /** + * The default {@link Meta#def()} value for the given enumeration name. + * + * @param id + * the enumeration name (the "id") + * + * @return the def value in the {@link MetaInfo} or "" if none (never NULL) + */ + protected String getMetaDef(String id) { + String rep = ""; + try { + Meta meta = type.getDeclaredField(id).getAnnotation(Meta.class); + rep = meta.def(); + } catch (NoSuchFieldException e) { + } catch (SecurityException e) { + } + + if (rep == null) { + rep = ""; + } + + return rep; + } + /** * Get the value for the given key if it exists in the internal map, or * def if not. + *

+ * DO NOT get the default meta value (MetaInfo.def()). * * @param key * the key to check for @@ -1146,13 +1169,21 @@ public class Bundle> { boolean found = false; if (!resetToDefault && dir != null) { - // Look into Bundles.getDirectory() for .properties files try { + // Look into Bundles.getDirectory() for .properties files File file = getPropertyFile(dir, name.name(), locale); if (file != null) { - Reader reader = new InputStreamReader(new FileInputStream( - file), "UTF-8"); - resetMap(new PropertyResourceBundle(reader)); + InputStream in = new FileInputStream(file); + try { + Reader reader = new InputStreamReader(in, "UTF-8"); + try { + resetMap(new PropertyResourceBundle(reader)); + } finally { + reader.close(); + } + } finally { + in.close(); + } found = true; } } catch (IOException e) { @@ -1189,22 +1220,18 @@ public class Bundle> { */ protected void resetMap(ResourceBundle bundle) { this.map.clear(); - for (Field field : type.getDeclaredFields()) { - try { - Meta meta = field.getAnnotation(Meta.class); - if (meta != null) { - E id = Enum.valueOf(type, field.getName()); - - String value; - if (bundle != null) { - value = bundle.getString(id.name()); - } else { - value = null; + if (bundle != null) { + for (Field field : type.getDeclaredFields()) { + try { + Meta meta = field.getAnnotation(Meta.class); + if (meta != null) { + E id = Enum.valueOf(type, field.getName()); + String value = bundle.getString(id.name()); + this.map.put(id.name(), + value == null ? null : value.trim()); } - - this.map.put(id.name(), value == null ? null : value.trim()); + } catch (MissingResourceException e) { } - } catch (MissingResourceException e) { } } }