# Class SSIMediator

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

public class SSIMediator extends Object
Allows the different SSICommand implementations to share data/talk to each other. Acts as the central hub for SSI processing, managing variables, configuration, and file access.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final String`
`className`
Name of this class, used for variable name scoping.
`protected final SSIConditionalState`
`conditionalState`
State tracker for nested conditional directives.
`protected String`
`configErrMsg`
Current error message configuration.
`protected String`
`configSizeFmt`
Current size format configuration.
`protected String`
`configTimeFmt`
Current time format configuration.
`protected static final String`
`DEFAULT_CONFIG_ERR_MSG`
Default error message displayed when a directive fails.
`protected static final String`
`DEFAULT_CONFIG_SIZE_FMT`
Default size format (abbreviated).
`protected static final String`
`DEFAULT_CONFIG_TIME_FMT`
Default time format string for date/time variables.
`protected static final String`
`ENCODING_ENTITY`
Encoding constant for HTML entity encoding.
`protected static final String`
`ENCODING_NONE`
Encoding constant for no encoding.
`protected static final String`
`ENCODING_URL`
Encoding constant for URL encoding.
`protected int`
`lastMatchCount`
Number of regex match groups from the last match operation.
`protected final long`
`lastModifiedDate`
Last modified date of the document being processed.
`protected final SSIExternalResolver`
`ssiExternalResolver`
External resolver for file and variable access.
`protected Strftime`
`strftime`
Strftime formatter for date/time formatting.

## Constructor Summary

Constructors
Constructor
Description
`SSIMediator(SSIExternalResolver ssiExternalResolver, long lastModifiedDate)`
Creates a new mediator with the given external resolver and document last modified date.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`clearMatchGroups()`
Clears all regex match group variables.
`protected String`
`encode(String value, String encoding)`
Encodes the given value using the specified encoding type.
`protected String`
`formatDate(Date date, TimeZone timeZone)`
Formats a date using the configured strftime pattern and the given time zone.
`SSIConditionalState`
`getConditionalState()`
Returns the conditional state tracker for nested if/else/endif directives.
`String`
`getConfigErrMsg()`
Returns the current error message configuration.
`String`
`getConfigSizeFmt()`
Returns the current size format configuration.
`String`
`getConfigTimeFmt()`
Returns the current time format configuration.
`long`
`getFileLastModified(String path, boolean virtual)`
Returns the last modified timestamp of the specified file.
`long`
`getFileSize(String path, boolean virtual)`
Returns the size of the specified file in bytes.
`String`
`getFileText(String path, boolean virtual)`
Returns the text content of the specified file.
`Collection<String>`
`getVariableNames()`
Returns the collection of all available variable names, including built-in and external variables.
`String`
`getVariableValue(String variableName)`
Returns the value of the named variable with no encoding applied.
`String`
`getVariableValue(String variableName, String encoding)`
Returns the value of the named variable with the specified encoding applied.
`protected boolean`
`isNameReserved(String name)`
Checks whether the given variable name is reserved by this class.
`void`
`log(String message)`
Logs a message without an associated throwable.
`void`
`log(String message, Throwable throwable)`
Logs a message with an associated throwable.
`protected void`
`populateMatchGroups(Matcher matcher)`
Populates match group variables from the given regex matcher.
`void`
`setConfigErrMsg(String configErrMsg)`
Sets the error message displayed when a directive fails.
`void`
`setConfigSizeFmt(String configSizeFmt)`
Sets the size format for fsize output.
`void`
`setConfigTimeFmt(String configTimeFmt)`
Sets the time format string for date/time variables.
`void`
`setConfigTimeFmt(String configTimeFmt, boolean fromConstructor)`
Sets the time format string and updates date variables accordingly.
`protected void`
`setDateVariables(boolean fromConstructor)`
Updates the built-in date variables (DATE_GMT, DATE_LOCAL, LAST_MODIFIED).
`void`
`setVariableValue(String variableName, String variableValue)`
Sets the value of the named variable.
`String`
`substituteVariables(String val)`
Applies variable substitution to the specified String and returns the new resolved string.

### Methods inherited from class Object

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

## Field Details

### ENCODING_NONE

protected static final String ENCODING_NONE
Encoding constant for no encoding.

See Also:
  - Constant Field Values

### ENCODING_ENTITY

protected static final String ENCODING_ENTITY
Encoding constant for HTML entity encoding.

See Also:
  - Constant Field Values

### ENCODING_URL

protected static final String ENCODING_URL
Encoding constant for URL encoding.

See Also:
  - Constant Field Values

### DEFAULT_CONFIG_ERR_MSG

protected static final String DEFAULT_CONFIG_ERR_MSG
Default error message displayed when a directive fails.

See Also:
  - Constant Field Values

### DEFAULT_CONFIG_TIME_FMT

protected static final String DEFAULT_CONFIG_TIME_FMT
Default time format string for date/time variables.

See Also:
  - Constant Field Values

### DEFAULT_CONFIG_SIZE_FMT

protected static final String DEFAULT_CONFIG_SIZE_FMT
Default size format (abbreviated).

See Also:
  - Constant Field Values

### configErrMsg

protected String configErrMsg
Current error message configuration.

### configTimeFmt

protected String configTimeFmt
Current time format configuration.

### configSizeFmt

protected String configSizeFmt
Current size format configuration.

### className

protected final String className
Name of this class, used for variable name scoping.

### ssiExternalResolver

protected final SSIExternalResolver ssiExternalResolver
External resolver for file and variable access.

### lastModifiedDate

protected final long lastModifiedDate
Last modified date of the document being processed.

### strftime

protected Strftime strftime
Strftime formatter for date/time formatting.

### conditionalState

protected final SSIConditionalState conditionalState
State tracker for nested conditional directives.

### lastMatchCount

protected int lastMatchCount
Number of regex match groups from the last match operation.

## Constructor Details

### SSIMediator

public SSIMediator(SSIExternalResolver ssiExternalResolver, long lastModifiedDate)
Creates a new mediator with the given external resolver and document last modified date.

Parameters:
  `ssiExternalResolver` - the external resolver for file/variable access
  `lastModifiedDate` - the last modified date of the document being processed

## Method Details

### setConfigErrMsg

public void setConfigErrMsg(String configErrMsg)
Sets the error message displayed when a directive fails.

Parameters:
  `configErrMsg` - the error message to use

### setConfigTimeFmt

public void setConfigTimeFmt(String configTimeFmt)
Sets the time format string for date/time variables.

Parameters:
  `configTimeFmt` - the time format string

### setConfigTimeFmt

public void setConfigTimeFmt(String configTimeFmt, boolean fromConstructor)
Sets the time format string and updates date variables accordingly.

Parameters:
  `configTimeFmt` - the time format string
  `fromConstructor` - true if called from the constructor

### setConfigSizeFmt

public void setConfigSizeFmt(String configSizeFmt)
Sets the size format for fsize output.

Parameters:
  `configSizeFmt` - the size format string

### getConfigErrMsg

public String getConfigErrMsg()
Returns the current error message configuration.

Returns:
  the error message

### getConfigTimeFmt

public String getConfigTimeFmt()
Returns the current time format configuration.

Returns:
  the time format string

### getConfigSizeFmt

public String getConfigSizeFmt()
Returns the current size format configuration.

Returns:
  the size format string

### getConditionalState

public SSIConditionalState getConditionalState()
Returns the conditional state tracker for nested if/else/endif directives.

Returns:
  the conditional state

### getVariableNames

public Collection<String> getVariableNames()
Returns the collection of all available variable names, including built-in and external variables.

Returns:
  the collection of variable names

### getFileSize

public long getFileSize(String path, boolean virtual) throws IOException
Returns the size of the specified file in bytes.

Parameters:
  `path` - the file path
  `virtual` - true for virtual path, false for physical path
Returns:
  the file size in bytes
Throws:
  `IOException` - if the file cannot be accessed

### getFileLastModified

public long getFileLastModified(String path, boolean virtual) throws IOException
Returns the last modified timestamp of the specified file.

Parameters:
  `path` - the file path
  `virtual` - true for virtual path, false for physical path
Returns:
  the last modified time in milliseconds
Throws:
  `IOException` - if the file cannot be accessed

### getFileText

public String getFileText(String path, boolean virtual) throws IOException
Returns the text content of the specified file.

Parameters:
  `path` - the file path
  `virtual` - true for virtual path, false for physical path
Returns:
  the file content as a string
Throws:
  `IOException` - if the file cannot be read

### isNameReserved

protected boolean isNameReserved(String name)
Checks whether the given variable name is reserved by this class.

Parameters:
  `name` - the variable name to check
Returns:
  true if the name is reserved

### getVariableValue

public String getVariableValue(String variableName)
Returns the value of the named variable with no encoding applied.

Parameters:
  `variableName` - the name of the variable
Returns:
  the variable value, or null if not found

### setVariableValue

public void setVariableValue(String variableName, String variableValue)
Sets the value of the named variable. Reserved names cannot be set.

Parameters:
  `variableName` - the name of the variable
  `variableValue` - the value to set, or null to remove

### getVariableValue

public String getVariableValue(String variableName, String encoding)
Returns the value of the named variable with the specified encoding applied.

Parameters:
  `variableName` - the name of the variable
  `encoding` - the encoding to apply (none, entity, url)
Returns:
  the variable value, or null if not found

### substituteVariables

public String substituteVariables(String val)
Applies variable substitution to the specified String and returns the new resolved string.

Parameters:
  `val` - The value which should be checked
Returns:
  the value after variable substitution

### formatDate

protected String formatDate(Date date, TimeZone timeZone)
Formats a date using the configured strftime pattern and the given time zone.

Parameters:
  `date` - the date to format
  `timeZone` - the time zone to use, or null for the default
Returns:
  the formatted date string

### encode

protected String encode(String value, String encoding)
Encodes the given value using the specified encoding type.

Parameters:
  `value` - the value to encode
  `encoding` - the encoding type (none, entity, url)
Returns:
  the encoded value

### log

public void log(String message)
Logs a message without an associated throwable.

Parameters:
  `message` - the log message

### log

public void log(String message, Throwable throwable)
Logs a message with an associated throwable.

Parameters:
  `message` - the log message
  `throwable` - the associated throwable

### setDateVariables

protected void setDateVariables(boolean fromConstructor)
Updates the built-in date variables (DATE_GMT, DATE_LOCAL, LAST_MODIFIED).

Parameters:
  `fromConstructor` - true if called from the constructor

### clearMatchGroups

protected void clearMatchGroups()
Clears all regex match group variables.

### populateMatchGroups

protected void populateMatchGroups(Matcher matcher)
Populates match group variables from the given regex matcher.

Parameters:
  `matcher` - the regex matcher containing the groups