# Class SSIProcessor

java.lang.Object
org.apache.catalina.ssi.SSIProcessor

public class SSIProcessor extends Object
The entry point to SSI processing. This class does the actual parsing, delegating to the SSIMediator, SSICommand, and SSIExternalResolver as necessary.

Author:
  Dan Sandberg, David Becker

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final boolean`
  `allowExec`
  `protected static final String`
  `COMMAND_END`
  The end pattern
  `protected static final String`
  `COMMAND_START`
  The start pattern
  `protected final HashMap<String, SSICommand>`
  `commands`
  `protected final int`
  `debug`
  `protected final SSIExternalResolver`
  `ssiExternalResolver`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SSIProcessor(SSIExternalResolver ssiExternalResolver, int debug, boolean allowExec)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `addBuiltinCommands()`
  `void`
  `addCommand(String name, SSICommand command)`
  `protected boolean`
  `charCmp(String buf, int index, String command)`
  `protected boolean`
  `isQuote(char c)`
  `protected boolean`
  `isSpace(char c)`
  `protected String[]`
  `parseParamNames(StringBuilder cmd, int start)`
  Parse a StringBuilder and take out the param type token.
  `protected String[]`
  `parseParamValues(StringBuilder cmd, int start, int count)`
  Parse a StringBuilder and take out the param token.
  `long`
  `process(Reader reader, long lastModifiedDate, PrintWriter writer)`
  Process a file with server-side commands, reading from reader and writing the processed version to writer.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### COMMAND_START

    protected static final String COMMAND_START
    The start pattern
    See Also:
      - Constant Field Values

  - ### COMMAND_END

    protected static final String COMMAND_END
    The end pattern
    See Also:
      - Constant Field Values

  - ### ssiExternalResolver

    protected final SSIExternalResolver ssiExternalResolver

  - ### commands

    protected final HashMap<String, SSICommand> commands

  - ### debug

    protected final int debug

  - ### allowExec

    protected final boolean allowExec

- ## Constructor Details

  - ### SSIProcessor

    public SSIProcessor(SSIExternalResolver ssiExternalResolver, int debug, boolean allowExec)

- ## Method Details

  - ### addBuiltinCommands

    protected void addBuiltinCommands()

  - ### addCommand

    public void addCommand(String name, SSICommand command)

  - ### process

    public long process(Reader reader, long lastModifiedDate, PrintWriter writer) throws IOException
    Process a file with server-side commands, reading from reader and writing the processed version to writer. NOTE: We really should be doing this in a streaming way rather than converting it to an array first.
    Parameters:
      `reader` - the reader to read the file containing SSIs from
      `lastModifiedDate` - resource last modification date
      `writer` - the writer to write the file with the SSIs processed.
    Returns:
      the most current modified date resulting from any SSI commands
    Throws:
      `IOException` - when things go horribly awry. Should be unlikely since the SSICommand usually catches 'normal' IOExceptions.

  - ### parseParamNames

    protected String[] parseParamNames(StringBuilder cmd, int start)
    Parse a StringBuilder and take out the param type token. Called from `requestHandler`
    Parameters:
      `cmd` - a value of type 'StringBuilder'
      `start` - index on which parsing will start
    Returns:
      an array with the parameter names

  - ### parseParamValues

    protected String[] parseParamValues(StringBuilder cmd, int start, int count)
    Parse a StringBuilder and take out the param token. Called from `requestHandler`
    Parameters:
      `cmd` - a value of type 'StringBuilder'
      `start` - index on which parsing will start
      `count` - number of values which should be parsed
    Returns:
      an array with the parameter values

  - ### charCmp

    protected boolean charCmp(String buf, int index, String command)

  - ### isSpace

    protected boolean isSpace(char c)

  - ### isQuote

    protected boolean isQuote(char c)