X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fresources%2FBundle.java;h=85abfe73da7ae5c3139c20acc98e103abf0a4e7b;hb=d18e136e69f03efe5fd6b8e6536cf8ad9033da1a;hp=3c448efacf8f3bce0ef62341f0d6368e54d64e05;hpb=805005449dacb1e7b825db63836bf100e472ddd0;p=fanfix.git diff --git a/src/be/nikiroo/utils/resources/Bundle.java b/src/be/nikiroo/utils/resources/Bundle.java index 3c448ef..85abfe7 100644 --- a/src/be/nikiroo/utils/resources/Bundle.java +++ b/src/be/nikiroo/utils/resources/Bundle.java @@ -89,7 +89,7 @@ public class Bundle> { * Set the value associated to the given id as a {@link String}. * * @param id - * the id of the value to get + * the id of the value to set * @param value * the value * @@ -133,7 +133,7 @@ public class Bundle> { * Will only accept suffixes that form an existing id. * * @param id - * the id of the value to get + * the id of the value to set * @param suffix * the runtime suffix * @param value @@ -161,17 +161,7 @@ public class Bundle> { */ public Boolean getBoolean(E id) { String str = getString(id); - if (str != null && str.length() > 0) { - if (str.equalsIgnoreCase("true") || str.equalsIgnoreCase("on") - || str.equalsIgnoreCase("yes")) - return true; - if (str.equalsIgnoreCase("false") || str.equalsIgnoreCase("off") - || str.equalsIgnoreCase("no")) - return false; - - } - - return null; + return BundleHelper.parseBoolean(str); } /** @@ -193,6 +183,19 @@ public class Bundle> { return def; } + /** + * Set the value associated to the given id as a {@link Boolean}. + * + * @param id + * the id of the value to set + * @param value + * the value + * + */ + public void setBoolean(E id, boolean value) { + setString(id.name(), BundleHelper.fromBoolean(value)); + } + /** * Return the value associated to the given id as an {@link Integer}. * @@ -202,12 +205,7 @@ public class Bundle> { * @return the associated value */ public Integer getInteger(E id) { - try { - return Integer.parseInt(getString(id)); - } catch (Exception e) { - } - - return null; + return BundleHelper.parseInteger(getString(id)); } /** @@ -229,6 +227,19 @@ public class Bundle> { return def; } + /** + * Set the value associated to the given id as a {@link Integer}. + * + * @param id + * the id of the value to set + * @param value + * the value + * + */ + public void setInteger(E id, int value) { + setString(id.name(), BundleHelper.fromInteger(value)); + } + /** * Return the value associated to the given id as a {@link Character}. * @@ -238,12 +249,7 @@ public class Bundle> { * @return the associated value */ public Character getCharacter(E id) { - String s = getString(id).trim(); - if (s.length() > 0) { - return s.charAt(0); - } - - return null; + return BundleHelper.parseCharacter(getString(id)); } /** @@ -258,10 +264,9 @@ public class Bundle> { * @return the associated value */ public char getCharacter(E id, char def) { - String s = getString(id).trim(); - if (s.length() > 0) { - return s.charAt(0); - } + Character car = getCharacter(id); + if (car != null) + return car; return def; } @@ -278,92 +283,13 @@ public class Bundle> { * @return the associated value */ public Integer getColor(E id) { - Integer rep = null; - - String bg = getString(id).trim(); - - int r = 0, g = 0, b = 0, a = -1; - if (bg.startsWith("#") && (bg.length() == 7 || bg.length() == 9)) { - try { - r = Integer.parseInt(bg.substring(1, 3), 16); - g = Integer.parseInt(bg.substring(3, 5), 16); - b = Integer.parseInt(bg.substring(5, 7), 16); - if (bg.length() == 9) { - a = Integer.parseInt(bg.substring(7, 9), 16); - } else { - a = 255; - } - - } catch (NumberFormatException e) { - // no changes - } - } - - // Try by name if still not found - if (a == -1) { - if ("black".equalsIgnoreCase(bg)) { - a = 255; - r = 0; - g = 0; - b = 0; - } else if ("white".equalsIgnoreCase(bg)) { - a = 255; - r = 255; - g = 255; - b = 255; - } else if ("red".equalsIgnoreCase(bg)) { - a = 255; - r = 255; - g = 0; - b = 0; - } else if ("green".equalsIgnoreCase(bg)) { - a = 255; - r = 0; - g = 255; - b = 0; - } else if ("blue".equalsIgnoreCase(bg)) { - a = 255; - r = 0; - g = 0; - b = 255; - } else if ("grey".equalsIgnoreCase(bg) - || "gray".equalsIgnoreCase(bg)) { - a = 255; - r = 128; - g = 128; - b = 128; - } else if ("cyan".equalsIgnoreCase(bg)) { - a = 255; - r = 0; - g = 255; - b = 255; - } else if ("magenta".equalsIgnoreCase(bg)) { - a = 255; - r = 255; - g = 0; - b = 255; - } else if ("yellow".equalsIgnoreCase(bg)) { - a = 255; - r = 255; - g = 255; - b = 0; - } - } - - if (a != -1) { - rep = ((a & 0xFF) << 24) // - | ((r & 0xFF) << 16) // - | ((g & 0xFF) << 8) // - | ((b & 0xFF) << 0); - } - - return rep; + return BundleHelper.parseColor(getString(id)); } /** * Set the value associated to the given id as a colour. *

- * The value is an BGRA value. + * The value is a BGRA value. * * @param id * the id of the value to set @@ -371,20 +297,33 @@ public class Bundle> { * the new colour */ public void setColor(E id, Integer color) { - int a = (color >> 24) & 0xFF; - int r = (color >> 16) & 0xFF; - int g = (color >> 8) & 0xFF; - int b = (color >> 0) & 0xFF; - - String rs = Integer.toString(r, 16); - String gs = Integer.toString(g, 16); - String bs = Integer.toString(b, 16); - String as = ""; - if (a < 255) { - as = Integer.toString(a, 16); - } + setString(id, BundleHelper.fromColor(color)); + } + + /** + * Return the value associated to the given id as a list of values if it is + * found and can be parsed. + * + * @param id + * the id of the value to get + * + * @return the associated list, empty if the value is empty, NULL if it is + * not found or cannot be parsed as a list + */ + public List getList(E id) { + return BundleHelper.parseList(getString(id)); + } - setString(id, "#" + rs + gs + bs + as); + /** + * Set the value associated to the given id as a list of values. + * + * @param id + * the id of the value to set + * @param list + * the new list of values + */ + public void setList(E id, List list) { + setString(id, BundleHelper.fromList(list)); } /** @@ -446,6 +385,40 @@ public class Bundle> { writer.close(); } + /** + * Delete 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). + *

+ * Will delete the files in {@link Bundles#getDirectory()}; it MUST + * be set. + * + * @return TRUE if the file was deleted + */ + public boolean deleteFile() { + return deleteFile(Bundles.getDirectory()); + } + + /** + * Delete 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). + * + * @param path + * the path where the .properties files are, MUST NOT be + * NULL + * + * @return TRUE if the file was deleted + */ + public boolean deleteFile(String path) { + File file = getUpdateFile(path); + return file.delete(); + } + /** * The description {@link TransBundle}, that is, a {@link TransBundle} * dedicated to the description of the values of the given {@link Bundle} @@ -530,11 +503,11 @@ public class Bundle> { Meta.Format format = meta.format(); String[] list = meta.list(); boolean nullable = meta.nullable(); - String info = meta.info(); + String def = meta.def(); boolean array = meta.array(); // Default, empty values -> NULL - if (desc.length() + list.length + info.length() == 0 && !group + if (desc.length() + list.length + def.length() == 0 && !group && nullable && format == Meta.Format.STRING) { return null; } @@ -550,7 +523,7 @@ public class Bundle> { } else { builder.append(" (FORMAT: ").append(format) .append(nullable ? "" : " (required)"); - builder.append(") ").append(info); + builder.append(") "); if (list.length > 0) { builder.append("\n# ALLOWED VALUES:"); @@ -667,9 +640,11 @@ public class Bundle> { protected void setBundle(Enum name, Locale locale, boolean resetToDefault) { changeMap.clear(); String dir = Bundles.getDirectory(); + String bname = type.getPackage().getName() + "." + name.name(); boolean found = false; if (!resetToDefault && dir != null) { + // Look into Bundles.getDirectory() for .properties files try { File file = getPropertyFile(dir, name.name(), locale); if (file != null) { @@ -684,37 +659,50 @@ public class Bundle> { } if (!found) { - String bname = type.getPackage().getName() + "." + name.name(); + // Look into the package itself for resources try { resetMap(ResourceBundle .getBundle(bname, locale, type.getClassLoader(), new FixedResourceBundleControl())); + found = true; + } catch (MissingResourceException e) { } catch (Exception e) { - // We have no bundle for this Bundle - System.err.println("No bundle found for: " + bname); - resetMap(null); + e.printStackTrace(); } } + + if (!found) { + // We have no bundle for this Bundle + System.err.println("No bundle found for: " + bname); + resetMap(null); + } } /** - * Reset the backing map to the content of the given bundle, or empty if - * bundle is NULL. + * Reset the backing map to the content of the given bundle, or with default + * valiues if bundle is NULL. * * @param bundle * the bundle to copy */ protected void resetMap(ResourceBundle bundle) { this.map.clear(); - - if (bundle != null) { - for (E field : type.getEnumConstants()) { - try { - String value = bundle.getString(field.name()); - this.map.put(field.name(), - value == null ? null : value.trim()); - } catch (MissingResourceException e) { + 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 = meta.def(); + } + + this.map.put(id.name(), value == null ? null : value.trim()); } + } catch (MissingResourceException e) { } } }