You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2007/01/19 23:48:14 UTC

svn commit: r497988 - /velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java

Author: nbubna
Date: Fri Jan 19 14:48:13 2007
New Revision: 497988

URL: http://svn.apache.org/viewvc?view=rev&rev=497988
Log:
add Locale parsing methods
change last resort of getStrings() to try splitting the single value on a delimiter (e.g. CSV)

Modified:
    velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java

Modified: velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java?view=diff&rev=497988&r1=497987&r2=497988
==============================================================================
--- velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java (original)
+++ velocity/tools/trunk/src/java/org/apache/velocity/tools/generic/ValueParser.java Fri Jan 19 14:48:13 2007
@@ -20,9 +20,12 @@
  */
 
 import java.lang.reflect.Array;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.Locale;
 
 /**
  * <p>Utility class for easy parsing of String values held in a Map.</p>
@@ -49,6 +52,7 @@
 public class ValueParser
 {
     private Map source = null;
+    private String delimiter = ",";
 
     public ValueParser() {}
 
@@ -71,6 +75,30 @@
         return this.source;
     }
 
+    /**
+     * Sets the delimiter used for separating values in a single String value.
+     * The default delimiter is a comma.
+     *
+     * @since VelocityTools 1.3
+     * @see #parseStringList
+     */
+    protected final void setStringsDelimiter(String delimiter)
+    {
+        this.delimiter = delimiter;
+    }
+
+    /**
+     * Returns the delimiter used for separating values in a single String value.
+     * The default delimiter is a comma.
+     *
+     * @since VelocityTools 1.3
+     * @see #parseStringList
+     */
+    protected final String getStringsDelimiter()
+    {
+        return this.delimiter;
+    }
+
     // ----------------- public parsing methods --------------------------
 
     /**
@@ -270,6 +298,21 @@
 
     /**
      * @param key the desired parameter's key
+     * @return a {@link Locale} for the specified key or
+     *         <code>null</code> if no matching parameter is found
+     */
+    public Locale getLocale(String key)
+    {
+        String s = getString(key);
+        if (s == null || s.length() == 0)
+        {
+            return null;
+        }
+        return parseLocale(s);
+    }
+
+    /**
+     * @param key the desired parameter's key
      * @param alternate The alternate Number
      * @return a Number for the specified key or the specified
      *         alternate if no matching parameter is found
@@ -304,6 +347,18 @@
         return (n != null) ? n.doubleValue() : alternate;
     }
 
+    /**
+     * @param key the desired parameter's key
+     * @param alternate The alternate Locale
+     * @return a Locale for the specified key or the specified
+     *         alternate if no matching parameter is found
+     */
+    public Locale getLocale(String key, Locale alternate)
+    {
+        Locale l = getLocale(key);
+        return (l != null) ? l : alternate;
+    }
+
 
     /**
      * @param key the key for the desired parameter
@@ -343,7 +398,7 @@
         }
         else
         {
-            strings = new String[] { String.valueOf(value) };
+            strings = parseStringList(String.valueOf(value));
         }
         return strings;
     }
@@ -465,6 +520,30 @@
         return doubles;
     }
 
+    /**
+     * @param key the key for the desired parameter
+     * @return an array of Locale objects associated with the given key,
+     *         or <code>null</code> if Locales are not associated with it.
+     */
+    public Locale[] getLocales(String key)
+    {
+        String[] strings = getStrings(key);
+        if (strings == null)
+        {
+            return null;
+        }
+
+        Locale[] locs = new Locale[strings.length];
+        for (int i=0; i<locs.length; i++)
+        {
+            if (strings[i] != null && strings[i].length() > 0)
+            {
+                locs[i] = parseLocale(strings[i]);
+            }
+        }
+        return locs;
+    }
+
 
     // --------------------------- protected methods ------------------
 
@@ -497,6 +576,49 @@
     protected Boolean parseBoolean(String value)
     {
         return Boolean.valueOf(value);
+    }
+
+    /**
+     * Converts a single String value into an array of Strings by splitting
+     * it on the tool's set delimiter.  The default delimiter is a comma.
+     *
+     * @since VelocityTools 1.3
+     */
+    protected String[] parseStringList(String value)
+    {
+        if (value.indexOf(this.delimiter) < 0)
+        {
+            return new String[] { value };
+        }
+        return value.split(this.delimiter);
+    }
+
+    /**
+     * Converts a String value into a Locale.
+     *
+     * @since VelocityTools 1.3
+     */
+    protected Locale parseLocale(String value)
+    {
+        if (value.indexOf("_") < 0)
+        {
+            return new Locale(value);
+        }
+
+        String[] params = value.split("_");
+        if (params.length == 2)
+        {
+            return new Locale(params[0], params[1]);
+        }
+        else if (params.length == 3)
+        {
+            return new Locale(params[0], params[1], params[2]);
+        }
+        else
+        {
+            // there's only 3 possible params, so this must be invalid
+            return null;
+        }
     }
 
 }