On 9/25/07, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:
> what if it returns something you can't iterate over?  Maybe check the
> return type first?

yeah, that's a problem.  thanks for catching this!

> geir
>
> On Sep 25, 2007, at 4:22 PM, Nathan Bubna wrote:
>
> > On 9/25/07, Will Glass-Husain <[EMAIL PROTECTED]> wrote:
> >> Wow, Nathan -- you are on a tear.  Nice work.
> >
> > well, i found a little time to work on some of these nagging little
> > things.  :)
> >
> >> WILL
> >>
> >> On 9/25/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> >>>
> >>> Author: nbubna
> >>> Date: Tue Sep 25 10:59:43 2007
> >>> New Revision: 579331
> >>>
> >>> URL: http://svn.apache.org/viewvc?rev=579331&view=rev
> >>> Log:
> >>> support any object with an iterator() method in #foreach
> >>> (VELOCITY-443)
> >>>
> >>> Modified:
> >>>
> >>>     velocity/engine/trunk/src/java/org/apache/velocity/util/
> >>> introspection/UberspectImpl.java
> >>>
> >>>     velocity/engine/trunk/src/test/org/apache/velocity/test/
> >>> ForeachTestCase.java
> >>>
> >>> Modified:
> >>> velocity/engine/trunk/src/java/org/apache/velocity/util/
> >>> introspection/UberspectImpl.java
> >>> URL:
> >>> http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/
> >>> apache/velocity/util/introspection/UberspectImpl.java?
> >>> rev=579331&r1=579330&r2=579331&view=diff
> >>>
> >>> ====================================================================
> >>> ==========
> >>> ---
> >>> velocity/engine/trunk/src/java/org/apache/velocity/util/
> >>> introspection/UberspectImpl.java
> >>> (original)
> >>> +++
> >>> velocity/engine/trunk/src/java/org/apache/velocity/util/
> >>> introspection/UberspectImpl.java
> >>> Tue Sep 25 10:59:43 2007
> >>> @@ -139,6 +139,22 @@
> >>>              }
> >>>              return new EnumerationIterator((Enumeration) obj);
> >>>          }
> >>> +        else
> >>> +        {
> >>> +            // look for an iterator() method to support the JDK5
> >>> Iterable
> >>> +            // interface or any user tools/DTOs that want to
> >>> work in
> >>> +            // foreach without implementing the Collection
> >>> interface
> >>> +            Class type = obj.getClass();
> >>> +            try
> >>> +            {
> >>> +                Method iter = type.getMethod("iterator", null);
> >>> +                return (Iterator)iter.invoke(obj, null);
> >>> +            }
> >>> +            catch (NoSuchMethodException nsme)
> >>> +            {
> >>> +                // eat this one, but let all other exceptions thru
> >>> +            }
> >>> +        }
> >>>
> >>>          /*  we have no clue what this is  */
> >>>          log.error("Could not determine type of iterator in
> >>> #foreach loop
> >>> at " + i);
> >>>
> >>> Modified:
> >>> velocity/engine/trunk/src/test/org/apache/velocity/test/
> >>> ForeachTestCase.java
> >>> URL:
> >>> http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/
> >>> apache/velocity/test/ForeachTestCase.java?
> >>> rev=579331&r1=579330&r2=579331&view=diff
> >>>
> >>> ====================================================================
> >>> ==========
> >>> ---
> >>> velocity/engine/trunk/src/test/org/apache/velocity/test/
> >>> ForeachTestCase.java
> >>> (original)
> >>> +++
> >>> velocity/engine/trunk/src/test/org/apache/velocity/test/
> >>> ForeachTestCase.java
> >>> Tue Sep 25 10:59:43 2007
> >>> @@ -21,6 +21,7 @@
> >>>
> >>> import java.io.StringWriter;
> >>> import java.util.ArrayList;
> >>> +import java.util.Iterator;
> >>> import java.util.List;
> >>>
> >>> import junit.framework.TestCase;
> >>> @@ -75,10 +76,10 @@
> >>>      }
> >>>
> >>>      /**
> >>> -     * Tests proper method execution during a Foreach loop with
> >>> items
> >>> -     * of varying classes.
> >>> +     * Tests proper method execution during a Foreach loop over a
> >>> Collection
> >>> +     * with items of varying classes.
> >>>       */
> >>> -    public void testMethodCall()
> >>> +    public void testCollectionAndMethodCall()
> >>>          throws Exception
> >>>      {
> >>>          List col = new ArrayList();
> >>> @@ -94,4 +95,41 @@
> >>>          assertEquals("Method calls while looping over varying
> >>> classes
> >>> failed",
> >>>                       "int 100 str STRVALUE ", writer.toString());
> >>>      }
> >>> +
> >>> +    /**
> >>> +     * Tests that #foreach will be able to retrieve an iterator
> >>> from
> >>> +     * an arbitrary object that happens to have an iterator()
> >>> method.
> >>> +     * (With the side effect of supporting the new Java 5 Iterable
> >>> interface)
> >>> +     */
> >>> +    public void testObjectWithIteratorMethod()
> >>> +        throws Exception
> >>> +    {
> >>> +        context.put("iterable", new MyIterable());
> >>> +
> >>> +        StringWriter writer = new StringWriter();
> >>> +        String template = "#foreach ($i in $iterable)$i #end";
> >>> +        Velocity.evaluate(context, writer, "test", template);
> >>> +        assertEquals("Failed to call iterator() method",
> >>> +                     "1 2 3 ", writer.toString());
> >>> +    }
> >>> +
> >>> +
> >>> +    public static class MyIterable
> >>> +    {
> >>> +        private List foo;
> >>> +
> >>> +        public MyIterable()
> >>> +        {
> >>> +            foo = new ArrayList();
> >>> +            foo.add(new Integer(1));
> >>> +            foo.add(new Long(2));
> >>> +            foo.add("3");
> >>> +        }
> >>> +
> >>> +        public Iterator iterator()
> >>> +        {
> >>> +            return foo.iterator();
> >>> +        }
> >>> +    }
> >>> +
> >>> }
> >>>
> >>>
> >>>
> >>
> >>
> >> --
> >> Forio Business Simulations
> >>
> >> Will Glass-Husain
> >> [EMAIL PROTECTED]
> >> www.forio.com
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to