Class IteratorTool

  • All Implemented Interfaces:
    java.util.Iterator

    @DefaultKey("mill")
    @Deprecated
    public class IteratorTool
    extends java.lang.Object
    implements java.util.Iterator
    Deprecated.
    Use LoopTool instead

    A convenience tool to use with #foreach loops. It wraps a list to let the designer specify a condition to terminate the loop, and reuse the same list in different loops.

    Example of use:

      Java
      ----
      context.put("mill", new IteratorTool());
    
    
      VTL
      ---
    
      #set ($list = [1, 2, 3, 5, 8, 13])
      #set ($numbers = $mill.wrap($list))
    
      #foreach ($item in $numbers)
      #if ($item < 8) $numbers.more()#end
      #end
    
      $numbers.more()
    
    
      Output
      ------
    
       1 2 3 5
      8
    
     Example tools.xml config (if you want to use this with VelocityView):
     <tools>
       <toolbox scope="request">
         <tool class="org.apache.velocity.tools.generic.IteratorTool"/>
       </toolbox>
     </tools>
     

    Warning: It is not recommended to use hasNext() with this tool as it is used to control the #foreach. Use hasMore() instead.

    Version:
    $Id: IteratorTool.java 598471 2007-11-27 00:26:10Z nbubna $
    Author:
    Denis Bredelet
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private boolean cachedNext
      Deprecated.
       
      private java.util.Iterator iterator
      Deprecated.
       
      protected java.lang.Object next
      Deprecated.
       
      private boolean wantMore
      Deprecated.
       
      private java.lang.Object wrapped
      Deprecated.
       
    • Constructor Summary

      Constructors 
      Constructor Description
      IteratorTool()
      Deprecated.
      Create a IteratorTool instance to use as tool.
      IteratorTool​(java.lang.Object wrapped)
      Deprecated.
      Create a IteratorTool instance to use in #foreach.
    • Method Summary

      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      boolean hasMore()
      Deprecated.
      Returns true if there are more elements in the wrapped list.
      boolean hasNext()
      Deprecated.
      Returns true if there are more elements in the list and more() was called.
      private void internalWrap​(java.lang.Object wrapped)
      Deprecated.
      Wraps a list with the tool.
      java.lang.Object more()
      Deprecated.
      Asks for the next element in the list.
      java.lang.Object next()
      Deprecated.
      Gets the next object in the list.
      void remove()
      Deprecated.
      Removes the current element from the list.
      void reset()
      Deprecated.
      Resets the wrapper so that it starts over at the beginning of the list.
      void stop()
      Deprecated.
      Puts a condition to break out of the loop.
      java.lang.String toString()
      Deprecated.
      Returns this object as a String.
      IteratorTool wrap​(java.lang.Object list)
      Deprecated.
      Wraps a list with the tool.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Iterator

        forEachRemaining
    • Field Detail

      • wrapped

        private java.lang.Object wrapped
        Deprecated.
      • iterator

        private java.util.Iterator iterator
        Deprecated.
      • wantMore

        private boolean wantMore
        Deprecated.
      • cachedNext

        private boolean cachedNext
        Deprecated.
      • next

        protected java.lang.Object next
        Deprecated.
    • Constructor Detail

      • IteratorTool

        public IteratorTool()
        Deprecated.
        Create a IteratorTool instance to use as tool. When it is created this way, the tool returns a new instance each time wrap() is called. This is useful when you want to allow the designers to create instances.
      • IteratorTool

        public IteratorTool​(java.lang.Object wrapped)
        Deprecated.
        Create a IteratorTool instance to use in #foreach.
        Parameters:
        wrapped - The list to wrap.
    • Method Detail

      • wrap

        public IteratorTool wrap​(java.lang.Object list)
        Deprecated.
        Wraps a list with the tool.
        The list can be an array, a Collection, a Map, an Iterator or an Enumeration.
        If the list is a Map, the tool iterates over the values.
        If the list is an Iterator or an Enumeration, the tool can be used only once.
        Parameters:
        list - The list to wrap.
        Returns:
        A new wrapper if this object is used as a tool, or itself if it is a wrapper.
      • internalWrap

        private void internalWrap​(java.lang.Object wrapped)
        Deprecated.
        Wraps a list with the tool. This object can therefore be used instead of the list itself in a #foreach. The list can be an array, a Collection, a Map, an Iterator or an Enumeration.
        - If the list is a Map, the tool iterates over the values.
        - If the list is an Iterator or an Enumeration, the tool can be used only once.
        Parameters:
        wrapped - The list to wrap.
      • reset

        public void reset()
        Deprecated.

        Resets the wrapper so that it starts over at the beginning of the list.

        Note to programmers: This method has no effect if the wrapped object is an enumeration or an iterator.

      • next

        public java.lang.Object next()
        Deprecated.

        Gets the next object in the list. This method is called by #foreach to define $item in:

         #foreach( $item in $list )
         

        This method is not intended for template designers, but they can use them if they want to read the value of the next item without doing more().

        Specified by:
        next in interface java.util.Iterator
        Returns:
        The next item in the list.
        Throws:
        NoSuchElementException - if there are no more elements in the list.
      • hasNext

        public boolean hasNext()
        Deprecated.
        Returns true if there are more elements in the list and more() was called.
        This code always return false:
         tool.hasNext()? tool.hasNext(): false;
         
        Specified by:
        hasNext in interface java.util.Iterator
        Returns:
        true if there are more elements, and either more() or hasNext() was called since last call.
      • remove

        public void remove()
                    throws java.lang.UnsupportedOperationException
        Deprecated.
        Removes the current element from the list. The current element is defined as the last element that was read from the list, either with next() or with more().
        Specified by:
        remove in interface java.util.Iterator
        Throws:
        java.lang.UnsupportedOperationException - if the wrapped list iterator doesn't support this operation.
      • more

        public java.lang.Object more()
        Deprecated.

        Asks for the next element in the list. This method is to be used by the template designer in #foreach loops.

        If this method is called in the body of #foreach, the loop continues as long as there are elements in the list.
        If this method is not called the loop terminates after the current iteration.

        Returns:
        The next element in the list, or null if there are no more elements.
      • hasMore

        public boolean hasMore()
        Deprecated.
        Returns true if there are more elements in the wrapped list.
        If this object doesn't wrap a list, the method always returns false.
        Returns:
        true if there are more elements in the list.
      • stop

        public void stop()
        Deprecated.
        Puts a condition to break out of the loop. The #foreach loop will terminate after this iteration, unless more() is called after stop().
      • toString

        public java.lang.String toString()
        Deprecated.
        Returns this object as a String.
        If this object is used as a tool, it just gives the class name.
        Otherwise it appends the wrapped list to the class name.
        Overrides:
        toString in class java.lang.Object
        Returns:
        A string representation of this object.