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)