freemarker.ext.beans

Class IteratorModel

Implemented Interfaces:
AdapterTemplateModel, TemplateCollectionModel, TemplateHashModel, TemplateHashModelEx, TemplateModel, TemplateModelIterator, WrapperTemplateModel

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(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, keySet, keys, size, toString, unwrap, values, wrap

Constructor Details

IteratorModel

public IteratorModel(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 Details

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.

hasNext

public boolean hasNext()
Calls underlying Iterator.hasNext().
Specified by:
hasNext in interface TemplateModelIterator

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"

next

public TemplateModel next()
            throws TemplateModelException
Calls underlying Iterator.next() and wraps the result.
Specified by:
next in interface TemplateModelIterator