You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2017/08/09 14:52:18 UTC
svn commit: r1804535 -
/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/ValueParser.java
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() {