This is definitely a desired update. It's often the case that you need to
access a list property as a string. The original list is the correct
behaviour, such a low level object as Configuration shouldn't have a right
to filter out information.
-- Ilkka
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of Daniel Rall
> Sent: Tuesday, May 01, 2001 10:12
> To: [EMAIL PROTECTED]
> Subject: [PATCH] Configuration
>
>
> I've noticed that it's often the case that getString(String key) gets
> called on a key whose associated value is a list (usually due to a
> misconfigured properties file). I was thinking that in such a case
> behavior other than a ClassCastException may be desirable. In ideal
> code, such a situation might be caught and handled gracefully.
> Unfortunately, ClassCastException is one of those Exceptions that can
> be thrown almost anywhere, so it often is dealt with as well as it
> could be.
>
> Two reasonable behaviors that come to mind include either returning
> the first item in the list, or returning the entire list as it was
> originally specified in the properties file. I've implemented the
> second possiblity, but want feedback on this change from others.
>
> Index: StringUtils.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-velocity/src/java/org/apache/velocity/util/Strin
> gUtils.java,v
> retrieving revision 1.9
> diff -u -u -r1.9 StringUtils.java
> --- StringUtils.java 2001/03/05 11:48:39 1.9
> +++ StringUtils.java 2001/05/01 06:58:09
> @@ -63,6 +63,7 @@
>
> import java.util.ArrayList;
> import java.util.Hashtable;
> +import java.util.List;
> import java.util.StringTokenizer;
> import java.util.Vector;
>
> @@ -171,6 +172,29 @@
> s[i] = (String) v.elementAt(i);
>
> return s;
> + }
> +
> + /**
> + * Bridges the elements in the specified list into a single piece
> + * of text using the provided delimeter.
> + *
> + * @param list The elements to remold.
> + * @param delim The glue.
> + * @return The reformed bits.
> + */
> + public static String join(List list, String delim)
> + {
> + StringBuffer buf = new StringBuffer();
> + int size = list.size();
> + for (int i = 0; i < size; i++)
> + {
> + if (i > 0)
> + {
> + buf.append(delim);
> + }
> + buf.append(list.get(i));
> + }
> + return buf.toString();
> }
>
> /**
> Index: Configuration.java
> ===================================================================
> RCS file:
> /home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/co
> nfiguration/Configuration.java,v
> retrieving revision 1.28
> diff -u -u -r1.28 Configuration.java
> --- Configuration.java 2001/05/01 07:05:39 1.28
> +++ Configuration.java 2001/05/01 07:06:27
> @@ -75,6 +75,8 @@
> import java.util.StringTokenizer;
> import java.util.Vector;
>
> +import org.apache.velocity.util.StringUtils;
> +
> /**
> * This class extends normal Java properties by adding the possibility
> * to use the same key many times concatenating the value strings
> @@ -951,6 +953,11 @@
> if (value instanceof String)
> {
> return (String) value;
> + }
> + else if (value instanceof Vector)
> + {
> + return StringUtils.join((Vector) value,
> + PropertiesTokenizer.DELIMETER);
> }
> else if (value == null)
> {