You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2003/01/14 15:03:06 UTC
cvs commit: jakarta-tapestry/framework/src/net/sf/tapestry Tapestry.java
hlship 2003/01/14 06:03:06
Modified: framework/src/net/sf/tapestry Tag: hship-2-3 Tapestry.java
Log:
Update Tapestry.coerceToIterator() to handle all types of scalar arrays.
Revision Changes Path
No revision
No revision
1.9.2.6 +202 -40 jakarta-tapestry/framework/src/net/sf/tapestry/Tapestry.java
Index: Tapestry.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/net/sf/tapestry/Tapestry.java,v
retrieving revision 1.9.2.5
retrieving revision 1.9.2.6
diff -u -r1.9.2.5 -r1.9.2.6
--- Tapestry.java 31 Dec 2002 13:10:32 -0000 1.9.2.5
+++ Tapestry.java 14 Jan 2003 14:03:06 -0000 1.9.2.6
@@ -3,6 +3,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -186,35 +187,206 @@
abstract public Iterator coerce(Object value);
}
- static {
- _iteratorAdaptors.register(Iterator.class, new IteratorAdaptor()
+ private static class DefaultIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
{
- public Iterator coerce(Object value)
- {
- return (Iterator) value;
- }
- });
+ return (Iterator) value;
+ }
+
+ }
- _iteratorAdaptors.register(Collection.class, new IteratorAdaptor()
+ private static class CollectionIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
{
- public Iterator coerce(Object value)
- {
- Collection c = (Collection) value;
+ Collection c = (Collection) value;
- if (c.size() == 0)
- return null;
+ if (c.size() == 0)
+ return null;
- return c.iterator();
- }
- });
+ return c.iterator();
+ }
+ }
- _iteratorAdaptors.register(Object.class, new IteratorAdaptor()
+ private static class ObjectIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
{
- public Iterator coerce(Object value)
- {
- return Collections.singleton(value).iterator();
- }
- });
+ return Collections.singleton(value).iterator();
+ }
+ }
+
+ private static class ObjectArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ Object[] array = (Object[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ return Arrays.asList(array).iterator();
+ }
+ }
+
+ private static class BooleanArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ boolean[] array = (boolean[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(array[i] ? Boolean.TRUE : Boolean.FALSE);
+
+ return l.iterator();
+ }
+ }
+
+ private static class ByteArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ byte[] array = (byte[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Byte(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class CharArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ char[] array = (char[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Character(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class ShortArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ short[] array = (short[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Short(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class IntArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ int[] array = (int[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Integer(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class LongArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ long[] array = (long[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Long(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class FloatArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ float[] array = (float[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Float(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ private static class DoubleArrayIteratorAdaptor extends IteratorAdaptor
+ {
+ public Iterator coerce(Object value)
+ {
+ double[] array = (double[]) value;
+
+ if (array.length == 0)
+ return null;
+
+ List l = new ArrayList(array.length);
+
+ for (int i = 0; i < array.length; i++)
+ l.add(new Double(array[i]));
+
+ return l.iterator();
+ }
+ }
+
+ static {
+ _iteratorAdaptors.register(Iterator.class, new DefaultIteratorAdaptor());
+ _iteratorAdaptors.register(Collection.class, new CollectionIteratorAdaptor());
+ _iteratorAdaptors.register(Object.class, new ObjectIteratorAdaptor());
+ _iteratorAdaptors.register(Object[].class, new ObjectArrayIteratorAdaptor());
+ _iteratorAdaptors.register(boolean[].class, new BooleanArrayIteratorAdaptor());
+ _iteratorAdaptors.register(byte[].class, new ByteArrayIteratorAdaptor());
+ _iteratorAdaptors.register(char[].class, new CharArrayIteratorAdaptor());
+ _iteratorAdaptors.register(short[].class, new ShortArrayIteratorAdaptor());
+ _iteratorAdaptors.register(int[].class, new IntArrayIteratorAdaptor());
+ _iteratorAdaptors.register(long[].class, new LongArrayIteratorAdaptor());
+ _iteratorAdaptors.register(float[].class, new FloatArrayIteratorAdaptor());
+ _iteratorAdaptors.register(double[].class, new DoubleArrayIteratorAdaptor());
}
/**
@@ -322,12 +494,14 @@
*
* <table border=1>
* <tr><th>Input Class</th> <th>Result</th> </tr>
- * <tr><td>Object array</td> <td>Converted to a {@link List} and iterator returned.
- * null returned if the array is empty.</td>
+ * <tr><td>array</td> <td>Converted to a {@link List} and iterator returned.
+ * null returned if the array is empty. This works with both object arrays and
+ * arrays of scalars. </td>
* </tr>
* <tr><td>{@link Iterator}</td> <td>Returned as-is.</td>
* <tr><td>{@link Collection}</td> <td>Iterator returned, or null
* if the Collection is empty</td> </tr>
+
* <tr><td>Any other</td> <td>{@link Iterator} for singleton collection returned</td> </tr>
* <tr><td>null</td> <td>null returned</td> </tr>
* </table>
@@ -339,20 +513,7 @@
if (value == null)
return null;
- Class valueClass = value.getClass();
- if (valueClass.isArray())
- {
- Object[] array = (Object[]) value;
-
- if (array.length == 0)
- return null;
-
- List l = Arrays.asList(array);
-
- return l.iterator();
- }
-
- IteratorAdaptor adaptor = (IteratorAdaptor) _iteratorAdaptors.getAdaptor(valueClass);
+ IteratorAdaptor adaptor = (IteratorAdaptor) _iteratorAdaptors.getAdaptor(value.getClass());
return adaptor.coerce(value);
}
@@ -398,7 +559,8 @@
default :
- throw new IllegalArgumentException("Unable to convert '" + s + "' to a Locale.");
+ throw new IllegalArgumentException(
+ "Unable to convert '" + s + "' to a Locale.");
}
synchronized (_localeMap)