Class ThrottledTemplateProcessor

java.lang.Object
org.thymeleaf.engine.ThrottledTemplateProcessor
All Implemented Interfaces:
IThrottledTemplateProcessor

public final class ThrottledTemplateProcessor extends Object implements IThrottledTemplateProcessor

Standard implementation of IThrottledTemplateProcessor.

This class is for internal use only. There is usually no reason why user's code should directly reference it.

Since:
3.0.0
  • Field Details

    • logger

      private static final org.slf4j.Logger logger
    • timerLogger

      private static final org.slf4j.Logger timerLogger
    • NANOS_IN_SECOND

      private static final int NANOS_IN_SECOND
      See Also:
    • OUTPUT_TYPE_CHARS

      private static final String OUTPUT_TYPE_CHARS
      See Also:
    • OUTPUT_TYPE_BYTES

      private static final String OUTPUT_TYPE_BYTES
      See Also:
    • identifierGenerator

      private static final AtomicLong identifierGenerator
    • identifier

      private final String identifier
    • templateSpec

      private final TemplateSpec templateSpec
    • context

      private final IEngineContext context
    • templateModel

      private final TemplateModel templateModel
    • templateHandler

      private final ITemplateHandler templateHandler
    • processorTemplateHandler

      private final ProcessorTemplateHandler processorTemplateHandler
    • flowController

      private final TemplateFlowController flowController
    • writer

      private final ThrottledTemplateWriter writer
    • offset

      private int offset
    • eventProcessingFinished

      private boolean eventProcessingFinished
    • allProcessingFinished

      private volatile boolean allProcessingFinished
  • Constructor Details

  • Method Details

    • getThrottledTemplateWriterControl

      public IThrottledTemplateWriterControl getThrottledTemplateWriterControl()
    • isFinished

      public boolean isFinished()
      Description copied from interface: IThrottledTemplateProcessor

      Checks whether the processing of the template has already finished.

      NOTE Implementations of this method must be thread-safe as, even if executions of the throttled processor (calls to process(...) methods) should never happen concurrently, determining whether a throttled processor has finished or not can happen concurrently from different threads as a way of short-cutting the execution of the processor (and avoid excessive consumption of upstream data, for example).

      Specified by:
      isFinished in interface IThrottledTemplateProcessor
      Returns:
      true if the template has already been fully processed, false if not.
    • computeFinish

      private boolean computeFinish() throws IOException
      Throws:
      IOException
    • reportFinish

      private void reportFinish(String outputType)
    • getProcessorIdentifier

      public String getProcessorIdentifier()
      Description copied from interface: IThrottledTemplateProcessor

      Returns an identifier for this processor that should enable the tracing of its executions.

      Given throttled processors are often used in reactive environments, in which different executions of a throttled processor might be performed by different threads (in a non-interleaved manner), this identifier should help identifying at the log trace the specific processor being executed independently of the thread ID.

      Though it is not completely required that the identifier returned by this method is unique by construction, it should be unique enough to be of practical use as an identifier.

      Specified by:
      getProcessorIdentifier in interface IThrottledTemplateProcessor
      Returns:
      the identifier for this processor object.
    • getTemplateSpec

      public TemplateSpec getTemplateSpec()
      Description copied from interface: IThrottledTemplateProcessor

      Return the TemplateSpec this throttled template processor object is acting on.

      Specified by:
      getTemplateSpec in interface IThrottledTemplateProcessor
      Returns:
      the template spec.
    • processAll

      public int processAll(Writer writer)
      Description copied from interface: IThrottledTemplateProcessor

      Process the whole template (all parts remaining), with no limit in the amount of chars written to output.

      Specified by:
      processAll in interface IThrottledTemplateProcessor
      Parameters:
      writer - the writer output should be written to.
      Returns:
      the amount of bytes written to output.
    • processAll

      public int processAll(OutputStream outputStream, Charset charset)
      Description copied from interface: IThrottledTemplateProcessor

      Process the whole template (all parts remaining), with no limit in the amount of bytes written to output.

      Specified by:
      processAll in interface IThrottledTemplateProcessor
      Parameters:
      outputStream - the output stream output should be written to.
      charset - the charset to be used for encoding the written output into bytes.
      Returns:
      the amount of bytes written to output.
    • process

      public int process(int maxOutputInChars, Writer writer)
      Description copied from interface: IThrottledTemplateProcessor

      Process the template until at most the specified amount of chars has been written to output, then return control.

      Specified by:
      process in interface IThrottledTemplateProcessor
      Parameters:
      maxOutputInChars - the maximum amount of chars that the engine is allowed to output. A number < 0 or Integer.MAX_VALUE will mean "no limit".
      writer - the writer output should be written to.
      Returns:
      the amount of bytes written to output.
    • process

      public int process(int maxOutputInBytes, OutputStream outputStream, Charset charset)
      Description copied from interface: IThrottledTemplateProcessor

      Process the template until at most the specified amount of bytes has been written to output, then return control.

      Specified by:
      process in interface IThrottledTemplateProcessor
      Parameters:
      maxOutputInBytes - the maximum amount of bytes that the engine is allowed to output. A number < 0 or Integer.MAX_VALUE will mean "no limit".
      outputStream - the output stream output should be written to.
      charset - the charset to be used for encoding the written output into bytes.
      Returns:
      the amount of bytes written to output.
    • process

      private int process(int maxOutput, String outputType)