Class DataDrivenTemplateIterator

java.lang.Object
org.thymeleaf.engine.DataDrivenTemplateIterator
All Implemented Interfaces:
Iterator<Object>

public final class DataDrivenTemplateIterator extends Object implements Iterator<Object>

Throttled implementation of Iterator, meant to be queried in scenarios when an iterated context variable is allowed to be in control of the engine's throttling (i.e. the engine's execution is data-driven).

A common scenario for this would be reactive systems executing the template engine as a part of a flow obtaining data from a data source, so that as the data is obtained, a part of the template is output containing that part of the data.

This class is meant for internal use only from the diverse integrations of Thymeleaf in reactive architectures. There is normally no reason why a user would have to use this class directly.

Since:
3.0.0
  • Field Details

    • SSE_HEAD_EVENT_NAME

      private static final char[] SSE_HEAD_EVENT_NAME
    • SSE_MESSAGE_EVENT_NAME

      private static final char[] SSE_MESSAGE_EVENT_NAME
    • SSE_TAIL_EVENT_NAME

      private static final char[] SSE_TAIL_EVENT_NAME
    • values

      private final List<Object> values
    • writerControl

      private IThrottledTemplateWriterControl writerControl
    • sseControl

    • sseEventsPrefix

      private char[] sseEventsPrefix
    • sseEventsComposedMessageEventName

      private char[] sseEventsComposedMessageEventName
    • sseEventsID

      private long sseEventsID
    • inStep

      private boolean inStep
    • feedingComplete

      private boolean feedingComplete
    • queried

      private boolean queried
  • Constructor Details

    • DataDrivenTemplateIterator

      public DataDrivenTemplateIterator()
  • Method Details

    • setWriterControl

      public void setWriterControl(IThrottledTemplateWriterControl writerControl)
    • setSseEventsPrefix

      public void setSseEventsPrefix(String sseEventsPrefix)
    • setSseEventsFirstID

      public void setSseEventsFirstID(long sseEventsFirstID)
    • takeBackLastEventID

      public void takeBackLastEventID()
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface Iterator<Object>
    • next

      public Object next()
      Specified by:
      next in interface Iterator<Object>
    • startIteration

      public void startIteration()
    • finishIteration

      public void finishIteration()
    • hasBeenQueried

      public boolean hasBeenQueried()

      Returns whether this data driven iterator has been actually queried, i.e., whether its hasNext() or next() methods have been called at least once.

      This indicates if the template has actually reached a point at which this iterator has been already needed or not. The typical use of this is to be able to switch between the "head" and the "data/buffer" phase.

      Returns:
      true if this iterator has been queried, false if not.
      Since:
      3.0.3
    • remove

      public void remove()
      Specified by:
      remove in interface Iterator<Object>
    • isPaused

      boolean isPaused()
    • continueBufferExecution

      public boolean continueBufferExecution()
    • feedBuffer

      public void feedBuffer(List<Object> newElements)
    • startHead

      public void startHead()
    • feedingComplete

      public void feedingComplete()
    • startTail

      public void startTail()
    • finishStep

      public void finishStep()
    • isStepOutputFinished

      public boolean isStepOutputFinished()
    • composeToken

      private char[] composeToken(char[] token)