freemarker.ext.beans
Class IteratorModel

java.lang.Object
  extended by freemarker.ext.beans.BeanModel
      extended by freemarker.ext.beans.IteratorModel
All Implemented Interfaces:
WrapperTemplateModel, AdapterTemplateModel, TemplateCollectionModel, TemplateHashModel, TemplateHashModelEx, TemplateModel, TemplateModelIterator

public class IteratorModel
extends BeanModel
implements TemplateModelIterator, TemplateCollectionModel

A class that adds TemplateModelIterator functionality to the Iterator interface implementers.

It differs from the SimpleCollection in that it inherits from BeanModel, and therefore you can call methods on it directly, even to the effect of calling iterator.remove() in the template.

Using the model as a collection model is NOT thread-safe, as iterators are inherently not thread-safe. Further, you can iterate over it only once. Attempts to call the iterator() method after it was already driven to the end once will throw an exception.

Version:
$Id: IteratorModel.java,v 1.26 2003/06/03 13:21:32 szegedia Exp $
Author:
Attila Szegedi

Field Summary
 
Fields inherited from class freemarker.ext.beans.BeanModel
object, wrapper
 
Fields inherited from interface freemarker.template.TemplateModel
NOTHING
 
Constructor Summary
IteratorModel(java.util.Iterator iterator, BeansWrapper wrapper)
          Creates a new model that wraps the specified iterator object.
 
Method Summary
 boolean getAsBoolean()
          Returns Iterator.hasNext().
 boolean hasNext()
          Calls underlying Iterator.hasNext().
 TemplateModelIterator iterator()
          This allows the iterator to be used in a <foreach> block.
 TemplateModel next()
          Calls underlying Iterator.next() and wraps the result.
 
Methods inherited from class freemarker.ext.beans.BeanModel
get, getAdaptedObject, getWrappedObject, hasPlainGetMethod, invokeGenericGet, isEmpty, keys, keySet, size, toString, unwrap, values, wrap
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

IteratorModel

public IteratorModel(java.util.Iterator iterator,
                     BeansWrapper wrapper)
Creates a new model that wraps the specified iterator object.

Parameters:
iterator - the iterator object to wrap into a model.
wrapper - the BeansWrapper associated with this model. Every model has to have an associated BeansWrapper instance. The model gains many attributes from its wrapper, including the caching behavior, method exposure level, method-over-item shadowing policy etc.
Method Detail

iterator

public TemplateModelIterator iterator()
                               throws TemplateModelException
This allows the iterator to be used in a <foreach> block.

Specified by:
iterator in interface TemplateCollectionModel
Returns:
"this"
Throws:
TemplateModelException

hasNext

public boolean hasNext()
Calls underlying Iterator.hasNext().

Specified by:
hasNext in interface TemplateModelIterator
Returns:
whether there are any more items to iterate over.

next

public TemplateModel next()
                   throws TemplateModelException
Calls underlying Iterator.next() and wraps the result.

Specified by:
next in interface TemplateModelIterator
Throws:
TemplateModelException - if the next model can not be retrieved (i.e. because the iterator is exhausted).

getAsBoolean

public boolean getAsBoolean()
Returns Iterator.hasNext(). Therefore, an iterator that has no more element evaluates to false, and an iterator that has further elements evaluates to true.