X-Git-Url: http://git.nikiroo.be/?p=jvcard.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Fresources%2FBundles.java;fp=src%2Fbe%2Fnikiroo%2Fjvcard%2Fresources%2FBundles.java;h=0000000000000000000000000000000000000000;hp=04b6f707d1dcaeb1935d036d7fcd2f3cf5ff6597;hb=f06c81000632cfb5f525ca458f719338f55f9f66;hpb=a73a906356c971b080c36368e71a15d87e8b8d31 diff --git a/src/be/nikiroo/jvcard/resources/Bundles.java b/src/be/nikiroo/jvcard/resources/Bundles.java deleted file mode 100644 index 04b6f70..0000000 --- a/src/be/nikiroo/jvcard/resources/Bundles.java +++ /dev/null @@ -1,407 +0,0 @@ -package be.nikiroo.jvcard.resources; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.lang.reflect.Field; -import java.util.Locale; -import java.util.ResourceBundle; - -/** - * This class help you get UTF-8 bundles for this application. - * - * @author niki - * - */ -public class Bundles { - /** - * The configuration directory where we try to get the .properties - * in priority, or NULL to get the information from the compiled resources. - */ - static private String confDir = getConfDir(); - - /** - * The type of configuration information the associated {@link Bundle} will - * convey. - * - * @author niki - * - */ - public enum Target { - colors, display, jvcard, remote, resources - } - - /** - * Return the configuration directory where to try to find the - * .properties files in priority. - * - * @return the configuration directory - */ - static private String getConfDir() { - // Do not override user-supplied config directory (see --help) - if (Bundles.confDir != null) - return Bundles.confDir; - - try { - ResourceBundle bundle = ResourceBundle.getBundle(Bundles.class - .getPackage().getName() + "." + "jvcard", - Locale.getDefault(), new FixedResourceBundleControl(null)); - - String configDir = bundle.getString("CONFIG_DIR"); - if (configDir != null && configDir.trim().length() > 0) - return configDir; - } catch (Exception e) { - } - - return null; - } - - /** - * Set the primary configuration directory to look for .properties - * files in. - * - * All {@link ResourceBundle}s returned by this class after that point will - * respect this new directory. - * - * @param confDir - * the new directory - */ - static public void setDirectory(String confDir) { - Bundles.confDir = confDir; - } - - /** - * Get the primary configuration directory to look for .properties - * files in. - * - * @return the directory - */ - static public String getDirectory() { - return Bundles.confDir; - } - - /** - * This class encapsulate a {@link ResourceBundle} in UTF-8. It only allows - * to retrieve values associated to an enumeration, and allows some - * additional methods. - * - * @author niki - * - * @param - * the enum to use to get values out of this class - */ - public class Bundle> { - private Class type; - protected Target name; - protected ResourceBundle map; - - /** - * Create a new {@link Bundles} of the given name. - * - * @param type - * a runtime instance of the class of E - * - * @param name - * the name of the {@link Bundles} - */ - protected Bundle(Class type, Target name) { - this.type = type; - this.name = name; - this.map = getBundle(name); - } - - /** - * Return the value associated to the given id as a {@link String}. - * - * @param mame - * the id of the value to get - * - * @return the associated value - */ - public String getString(E id) { - if (map.containsKey(id.name())) { - return map.getString(id.name()).trim(); - } - - return ""; - } - - /** - * Return the value associated to the given id as a {@link Boolean}. - * - * @param mame - * the id of the value to get - * - * @return the associated value - */ - 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 the value associated to the given id as a {@link boolean}. - * - * @param mame - * the id of the value to get - * @param def - * the default value when it is not present in the config - * file or if it is not a boolean value - * - * @return the associated value - */ - public boolean getBoolean(E id, boolean def) { - Boolean b = getBoolean(id); - if (b != null) - return b; - - return def; - } - - /** - * Return the value associated to the given id as an {@link Integer}. - * - * @param mame - * the id of the value to get - * - * @return the associated value - */ - public Integer getInteger(E id) { - try { - return Integer.parseInt(getString(id)); - } catch (Exception e) { - } - - return null; - } - - /** - * Return the value associated to the given id as a {@link int}. - * - * @param mame - * the id of the value to get - * @param def - * the default value when it is not present in the config - * file or if it is not a int value - * - * @return the associated value - */ - public int getInteger(E id, int def) { - Integer i = getInteger(id); - if (i != null) - return i; - - return def; - } - - /** - * 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). - * - * @param path - * the path where the .properties files are - * - * @throws IOException - * in case of IO errors - */ - public void updateFile(String path) throws IOException { - File file = getUpdateFile(path); - - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(file), "UTF-8")); - - writeHeader(writer); - writer.write("\n"); - writer.write("\n"); - - for (Field field : type.getDeclaredFields()) { - Meta meta = field.getAnnotation(Meta.class); - if (meta != null) { - E id = E.valueOf(type, field.getName()); - String info = getMetaInfo(meta); - - if (info != null) { - writer.write(info); - writer.write("\n"); - } - - writeValue(writer, id); - } - } - - writer.close(); - } - - /** - * Return formated, display-able information from the {@link Meta} field - * given. Each line will always starts with a "#" character. - * - * @param meta - * the {@link Meta} field - * - * @return the information to display or NULL if none - */ - protected String getMetaInfo(Meta meta) { - String what = meta.what(); - String where = meta.where(); - String format = meta.format(); - String info = meta.info(); - - int opt = what.length() + where.length() + format.length(); - if (opt + info.length() == 0) - return null; - - StringBuilder builder = new StringBuilder(); - builder.append("# "); - - if (opt > 0) { - builder.append("("); - if (what.length() > 0) { - builder.append("WHAT: " + what); - if (where.length() + format.length() > 0) - builder.append(", "); - } - - if (where.length() > 0) { - builder.append("WHERE: " + where); - if (format.length() > 0) - builder.append(", "); - } - - if (format.length() > 0) { - builder.append("FORMAT: " + format); - } - - builder.append(")"); - if (info.length() > 0) { - builder.append("\n# "); - } - } - - builder.append(info); - - return builder.toString(); - } - - /** - * Write the header found in the configuration .properties file - * of this {@link Bundles}. - * - * @param writer - * the {@link Writer} to write the header in - * - * @throws IOException - * in case of IO error - */ - protected void writeHeader(Writer writer) throws IOException { - writer.write("# " + name + "\n"); - writer.write("#\n"); - } - - /** - * Write the given id to the config file, i.e., - * "MY_ID = my_curent_value" followed by a new line - * - * @param writer - * the {@link Writer} to write into - * @param id - * the id to write - * - * @throws IOException - * in case of IO error - */ - protected void writeValue(Writer writer, E id) throws IOException { - writeValue(writer, id.name(), getString(id)); - } - - /** - * Write the given data to the config file, i.e., - * "MY_ID = my_curent_value" followed by a new line - * - * @param writer - * the {@link Writer} to write into - * @param id - * the id to write - * @param value - * the id's value - * - * @throws IOException - * in case of IO error - */ - protected void writeValue(Writer writer, String id, String value) - throws IOException { - writer.write(id); - writer.write(" = "); - - 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) { - writer.write("\\n\\"); - } - writer.write("\n"); - } - } - - /** - * Return the non-localised bundle of the given name. - * - * @param name - * the name of the bundle to load - * - * @return the bundle - */ - protected ResourceBundle getBundle(Target name) { - return ResourceBundle.getBundle(Bundles.class.getPackage() - .getName() + "." + name.name(), - new FixedResourceBundleControl(confDir)); - } - - /** - * Return the localised bundle of the given name and {@link Locale}. - * - * @param name - * the name of the bundle to load - * @param locale - * the {@link Locale} to use - * - * @return the localised bundle - */ - protected ResourceBundle getBundle(Target name, Locale locale) { - return ResourceBundle.getBundle(Bundles.class.getPackage() - .getName() + "." + name.name(), locale, - new FixedResourceBundleControl(confDir)); - } - - /** - * Return the source file for this {@link Bundles} from the given path. - * - * @param path - * the path where the .properties files are - * - * @return the source {@link File} - * - * @throws IOException - * in case of IO errors - */ - protected File getUpdateFile(String path) { - return new File(path, name.name() + ".properties"); - } - } -}