Package org.apache.catalina.ssi

## Class SSIProcessor

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

-     public class SSIProcessor
      extends java.lang.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 boolean` | `allowExec` |
    `protected static java.lang.String` | `COMMAND_END` | The end pattern
    `protected static java.lang.String` | `COMMAND_START` | The start pattern
    `protected java.util.HashMap<java.lang.String,​SSICommand>` | `commands` |
    `protected int` | `debug` |
    `protected SSIExternalResolver` | `ssiExternalResolver` |

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `addBuiltinCommands()` |
    `void` | `addCommand​(java.lang.String name, SSICommand command)` |
    `protected boolean` | `charCmp​(java.lang.String buf, int index, java.lang.String command)` |
    `protected boolean` | `isQuote​(char c)` |
    `protected boolean` | `isSpace​(char c)` |
    `protected java.lang.String[]` | `parseParamNames​(java.lang.StringBuilder cmd, int start)` | Parse a StringBuilder and take out the param type token.
    `protected java.lang.String[]` | `parseParamValues​(java.lang.StringBuilder cmd, int start, int count)` | Parse a StringBuilder and take out the param token.
    `long` | `process​(java.io.Reader reader, long lastModifiedDate, java.io.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 Detail

    - #### COMMAND_START

          protected static final java.lang.String COMMAND_START

      The start pattern
      See Also:
        Constant Field Values

    - #### COMMAND_END

          protected static final java.lang.String COMMAND_END

      The end pattern
      See Also:
        Constant Field Values

    - #### ssiExternalResolver

          protected final SSIExternalResolver ssiExternalResolver

    - #### commands

          protected final java.util.HashMap<java.lang.String,​SSICommand> commands

    - #### debug

          protected final int debug

    - #### allowExec

          protected final boolean allowExec

  - ### Constructor Detail

    - #### SSIProcessor

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

  - ### Method Detail

    - #### addBuiltinCommands

          protected void addBuiltinCommands()

    - #### addCommand

          public void addCommand​(java.lang.String name,
                                 SSICommand command)

    - #### process

          public long process​(java.io.Reader reader,
                              long lastModifiedDate,
                              java.io.PrintWriter writer)
                       throws java.io.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:
        `java.io.IOException` - when things go horribly awry. Should be unlikely since the SSICommand usually catches 'normal' IOExceptions.

    - #### parseParamNames

          protected java.lang.String[] parseParamNames​(java.lang.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 java.lang.String[] parseParamValues​(java.lang.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​(java.lang.String buf,
                                    int index,
                                    java.lang.String command)

    - #### isSpace

          protected boolean isSpace​(char c)

    - #### isQuote

          protected boolean isQuote​(char c)