Author: cbrisson Date: Wed Aug 9 14:52:18 2017 New Revision: 1804535 URL: http://svn.apache.org/viewvc?rev=1804535&view=rev Log: [tools] Add a ValueParser.getSubkeys() method for returning all possible subkeys
Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java?rev=1804535&r1=1804534&r2=1804535&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java (original) +++ velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java Wed Aug 9 14:52:18 2017 @@ -19,11 +19,12 @@ package org.apache.velocity.tools.generi * under the License. */ +import java.util.Collection; import java.util.HashMap; -import java.util.Map; import java.util.Locale; +import java.util.Map; import java.util.Set; -import java.util.Collection; +import java.util.TreeSet; import org.apache.velocity.tools.ConversionUtils; import org.apache.velocity.tools.Scope; @@ -610,7 +611,7 @@ public class ValueParser extends FormatC */ public boolean hasSubkeys() { - if (getSource() == null) + if (getSource() == null || !getAllowSubkeys()) { return false; } @@ -635,6 +636,31 @@ public class ValueParser extends FormatC } /** + * returns the set of all possible first-level subkeys, including complete keys without dots (or returns keySet() if allowSubKeys is false) + */ + public Set<String> getSubkeys() + { + Set<String> keys = keySet(); + if (getSource() == null || !getAllowSubkeys()) + { + return keys; + } + else + { + Set<String> result = new TreeSet<String>(); + for (String key: keys) + { + int dot = key.indexOf('.'); + if (dot > 0 && dot < key.length()) + { + result.add(key.substring(0, dot)); + } + } + return result; + } + } + + /** * subkey getter that returns a map <subkey#2> -> value * for every "subkey.subkey2" found entry * @@ -677,22 +703,22 @@ public class ValueParser extends FormatC public int size() { - return getSource().size(); + return getSource() == null ? 0 : getSource().size(); } public boolean isEmpty() { - return getSource().isEmpty(); + return getSource() == null || getSource().isEmpty(); } public boolean containsKey(Object key) { - return getSource().containsKey(key); + return getSource() == null ? false : getSource().containsKey(key); } public boolean containsValue(Object value) { - return getSource().containsValue(value); + return getSource() == null ? false : getSource().containsValue(value); } public Object get(Object key) @@ -745,11 +771,11 @@ public class ValueParser extends FormatC } public Set<String> keySet() { - return getSource().keySet(); + return getSource() == null ? null : getSource().keySet(); } public Collection values() { - return getSource().values(); + return getSource() == null ? null : getSource().values(); } public Set<Map.Entry<String,Object>> entrySet() {