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() {