# 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.

- ## 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 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)