Bundles/TransBundles: fix for def values
authorNiki Roo <niki@nikiroo.be>
Wed, 30 Oct 2019 07:39:15 +0000 (08:39 +0100)
committerNiki Roo <niki@nikiroo.be>
Wed, 30 Oct 2019 07:39:15 +0000 (08:39 +0100)
src/be/nikiroo/utils/resources/Bundle.java
src/be/nikiroo/utils/resources/MetaInfo.java
src/be/nikiroo/utils/resources/TransBundle.java

index 0c57bf992b495d8777b40753e850f9b827e47c39..c757e2b1d705dc005b52ac425f7a9a89a14deabd 100644 (file)
@@ -95,8 +95,8 @@ public class Bundle<E extends Enum<E>> {
         * @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
         */
@@ -160,13 +160,7 @@ public class Bundle<E extends Enum<E>> {
        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()) {
@@ -937,9 +931,35 @@ public class Bundle<E extends Enum<E>> {
                return changeMap.containsKey(key) || map.containsKey(key);
        }
 
+       /**
+        * The default {@link MetaInfo.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
         * <tt>def</tt> if not.
+        * <p>
+        * DO NOT get the default meta value (MetaInfo.def()).
         * 
         * @param key
         *            the key to check for
index f7598f190c2f9a5d491fd2b56b9644e06c104d1f..917c21001c14482bc9292be0eaede3cd1c707bd5 100644 (file)
@@ -649,6 +649,15 @@ public class MetaInfo<E extends Enum<E>> implements Iterable<MetaInfo<E>> {
                return children;
        }
 
+       /**
+        * The number of sub-items, if any.
+        * 
+        * @return the number or 0
+        */
+       public int size() {
+               return children.size();
+       }
+
        @Override
        public Iterator<MetaInfo<E>> iterator() {
                return children.iterator();
index 28fa2802e215eab074ff51405d7488b733f84459..7b2edb1ca919b4bc9f31e85d968ca8ee771d538f 100644 (file)
@@ -138,6 +138,9 @@ public class TransBundle<E extends Enum<E>> extends Bundle<E> {
                        result = "[" + key.toLowerCase() + "]";
                } else if (containsKey(key)) {
                        result = getString(key, null);
+                       if (result == null) {
+                               result = getMetaDef(id.name());
+                       }
                } else {
                        result = null;
                }
@@ -326,6 +329,9 @@ public class TransBundle<E extends Enum<E>> extends Bundle<E> {
                String name = id.name() + "_NOUTF";
                if (containsKey(name)) {
                        String value = getString(name, null);
+                       if (value == null) {
+                               value = getMetaDef(id.name());
+                       }
                        boolean set = isSet(id, false);
                        writeValue(writer, name, value, set);
                }