Class MiniTemplator
- java.lang.Object
-
- biz.source_code.miniTemplator.MiniTemplator
-
public class MiniTemplator extends Object
A compact template engine for HTML files.Template syntax:
Variables: ${VariableName} Blocks: <!-- $beginBlock blockName --> ... block contents ... <!-- $endBlock blockName --> Conditional blocks: <!-- $if flag1 flag2 --> ... included if flag1 or flag2 is set ... <!-- $elseIf !flag3 flag4 --> ... included if flag3 is not set or flag4 is set ... <!-- $else --> ... included if none of the above conditions is met ... <!-- $endIf --> Short form of conditional blocks: <$? flag1 flag2 > ... included if flag1 or flag2 is set ... <$: !flag3 flag4 > ... included if flag3 is not set or flag4 is set ... <$:> ... included if none of the above conditions is met ... <$/?> Example: <$?de> Hallo Welt! <$:fr> Bonjour tout le monde! <$: > Hello world! <$/?> Include a subtemplate: <!-- $include relativeFileName -->General remarks:
- Variable names, block names, condition flags and commands (e.g. "$beginBlock") are case-insensitive.
- The same variable may be used multiple times within a template.
- Multiple blocks with the same name may occur within a template.
- Blocks can be nested.
- Conditional blocks ($if) and includes ($include) are resolved when the template is parsed. Parsing is done within the MiniTemplator constructor. Condition flags can be passed to the constructor.
- Normal blocks ($beginBlock) must be added (and can be repeated) by the application program using
addBlock().
Project home page: www.source-code.biz/MiniTemplator
Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classMiniTemplator.BlockNotDefinedExceptionThrown whenMinitemplator.addBlockis called with ablockNamethat is not defined within the template.static classMiniTemplator.BuilderSpecifies the parameters for constructing aMiniTemplatorobject.static classMiniTemplator.TemplateSyntaxExceptionThrown when a syntax error is encountered within the template.static classMiniTemplator.VariableNotDefinedExceptionThrown whenMinitemplator.setVariableis called with avariableNamethat is not defined within the template and theisOptionalparameter isfalse.
-
Constructor Summary
Constructors Modifier Constructor Description protectedMiniTemplator()Dummy constructor, used internally in newInstance().
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddBlock(String blockName)Adds an instance of a template block.voidaddBlock(String blockName, boolean isOptional)Adds an instance of a template block.voidaddBlockOpt(String blockName)Adds an instance of an optional template block.booleanblockExists(String blockName)Checks whether a block with the specified name exists within the template.static MiniTemplator.Builderbuilder()MiniTemplatorcloneReset()Clones this MiniTemplator object and resets the clone.static StringescapeHtml(String s)Escapes special HTML characters.StringgenerateOutput()Generates the HTML page and returns it as a string.voidgenerateOutput(Writer outputWriter)Generates the HTML page and writes it to a character stream.voidgenerateOutput(String outputFileName)Generates the HTML page and writes it into a file.Map<String,String>getVariables()Returns a map with the names and current values of the template variables.protected StringloadSubtemplate(String subtemplateName)Loads the template string of a subtemplate (used for the $Include command).voidreset()Resets the MiniTemplator object to the initial state.voidsetVariable(String variableName, int variableValue)Sets a template variable to an integer value.voidsetVariable(String variableName, String variableValue)Sets a template variable.voidsetVariable(String variableName, String variableValue, boolean isOptional)Sets a template variable.voidsetVariableEsc(String variableName, String variableValue)Sets a template variable to an escaped value.voidsetVariableEsc(String variableName, String variableValue, boolean isOptional)Sets a template variable to an escaped value.voidsetVariableOpt(String variableName, int variableValue)Sets an optional template variable to an integer value.voidsetVariableOpt(String variableName, String variableValue)Sets an optional template variable.voidsetVariableOptEsc(String variableName, String variableValue)Sets an optional template variable to an escaped value.booleanvariableExists(String variableName)Checks whether a variable with the specified name exists within the template.
-
-
-
Method Detail
-
builder
public static MiniTemplator.Builder builder()
-
loadSubtemplate
protected String loadSubtemplate(String subtemplateName) throws IOException
Loads the template string of a subtemplate (used for the $Include command). This method can be overridden in a subclass, to load subtemplates from somewhere else, e.g. from a database.This implementation of the method interprets
subtemplateNameas a relative file path name and reads the template string from that file.- Parameters:
subtemplateName- the name of the subtemplate. Normally a relative file path. This is the argument string that was specified with the "$Include" command. If the string has quotes, the quotes are removed before this method is called.- Returns:
- the template text string of the subtemplate.
- Throws:
IOException
-
reset
public void reset()
Resets the MiniTemplator object to the initial state. All variable values are cleared and all added block instances are deleted. This method can be used to produce another HTML page with the same template. It is faster than creating another MiniTemplator object, because the template does not have to be read and parsed again.
-
cloneReset
public MiniTemplator cloneReset()
Clones this MiniTemplator object and resets the clone. This method is used to copy a MiniTemplator object. It is fast, because the template does not have to be parsed again, and the internal data structures that contain the parsed template information are shared among the clones.- Returns:
-
setVariable
public void setVariable(String variableName, String variableValue, boolean isOptional) throws MiniTemplator.VariableNotDefinedException
Sets a template variable.For variables that are used in blocks, the variable value must be set before
addBlock()is called.- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable. May benull.isOptional- specifies whether an exception should be thrown when the variable does not exist in the template. IfisOptionalisfalseand the variable does not exist, an exception is thrown.- Throws:
MiniTemplator.VariableNotDefinedException- when no variable with the specified name exists in the template andisOptionalisfalse.
-
setVariable
public void setVariable(String variableName, String variableValue) throws MiniTemplator.VariableNotDefinedException
Sets a template variable.Convenience method for:
setVariable (variableName, variableValue, false)- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable. May benull.- Throws:
MiniTemplator.VariableNotDefinedException- when no variable with the specified name exists in the template.- See Also:
setVariable(String, String, boolean)
-
setVariable
public void setVariable(String variableName, int variableValue) throws MiniTemplator.VariableNotDefinedException
Sets a template variable to an integer value.Convenience method for:
setVariable (variableName, Integer.toString(variableValue))- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable.- Throws:
MiniTemplator.VariableNotDefinedException- when no variable with the specified name exists in the template.
-
setVariableOpt
public void setVariableOpt(String variableName, String variableValue)
Sets an optional template variable.Convenience method for:
setVariable (variableName, variableValue, true)- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable. May benull.- See Also:
setVariable(String, String, boolean)
-
setVariableOpt
public void setVariableOpt(String variableName, int variableValue)
Sets an optional template variable to an integer value.Convenience method for:
setVariableOpt (variableName, Integer.toString(variableValue))- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable.
-
setVariableEsc
public void setVariableEsc(String variableName, String variableValue, boolean isOptional) throws MiniTemplator.VariableNotDefinedException
Sets a template variable to an escaped value.Convenience method for:
setVariable (variableName, MiniTemplator.escapeHtml(variableValue), isOptional)- Parameters:
variableName- the name of the variable to be set.variableValue- the new value of the variable. May benull. Special HTML/XML characters are escaped.isOptional- specifies whether an exception should be thrown when the variable does not exist in the template. IfisOptionalisfalseand the variable does not exist, an exception is thrown.- Throws:
MiniTemplator.VariableNotDefinedException- when no variable with the specified name exists in the template andisOptionalisfalse.- See Also:
setVariable(String, String, boolean),escapeHtml(String)
-
setVariableEsc
public void setVariableEsc(String variableName, String variableValue) throws MiniTemplator.VariableNotDefinedException
Sets a template variable to an escaped value.Convenience method for:
setVariable (variableName, MiniTemplator.escapeHtml(variableValue), false)- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable. May benull. Special HTML/XML characters are escaped.- Throws:
MiniTemplator.VariableNotDefinedException- when no variable with the specified name exists in the template.- See Also:
setVariable(String, String, boolean),escapeHtml(String)
-
setVariableOptEsc
public void setVariableOptEsc(String variableName, String variableValue)
Sets an optional template variable to an escaped value.Convenience method for:
setVariable (variableName, MiniTemplator.escapeHtml(variableValue), true)- Parameters:
variableName- the name of the variable to be set. Case-insensitive.variableValue- the new value of the variable. May benull. Special HTML/XML characters are escaped.- See Also:
setVariable(String, String, boolean),escapeHtml(String)
-
variableExists
public boolean variableExists(String variableName)
Checks whether a variable with the specified name exists within the template.- Parameters:
variableName- the name of the variable. Case-insensitive.- Returns:
trueif the variable exists.
falseif no variable with the specified name exists in the template.
-
getVariables
public Map<String,String> getVariables()
Returns a map with the names and current values of the template variables.
-
addBlock
public void addBlock(String blockName, boolean isOptional) throws MiniTemplator.BlockNotDefinedException
Adds an instance of a template block.If the block contains variables, these variables must be set before the block is added. If the block contains subblocks (nested blocks), the subblocks must be added before this block is added. If multiple blocks exist with the specified name, an instance is added for each block occurrence.
- Parameters:
blockName- the name of the block to be added. Case-insensitive.isOptional- specifies whether an exception should be thrown when the block does not exist in the template. IfisOptionalisfalseand the block does not exist, an exception is thrown.- Throws:
MiniTemplator.BlockNotDefinedException- when no block with the specified name exists in the template andisOptionalisfalse.
-
addBlock
public void addBlock(String blockName) throws MiniTemplator.BlockNotDefinedException
Adds an instance of a template block.Convenience method for:
addBlock (blockName, false)- Parameters:
blockName- the name of the block to be added. Case-insensitive.- Throws:
MiniTemplator.BlockNotDefinedException- when no block with the specified name exists in the template.- See Also:
addBlock(String, boolean)
-
addBlockOpt
public void addBlockOpt(String blockName)
Adds an instance of an optional template block.Convenience method for:
addBlock (blockName, true)- Parameters:
blockName- the name of the block to be added. Case-insensitive.- See Also:
addBlock(String, boolean)
-
blockExists
public boolean blockExists(String blockName)
Checks whether a block with the specified name exists within the template.- Parameters:
blockName- the name of the block.- Returns:
trueif the block exists.
falseif no block with the specified name exists in the template.
-
generateOutput
public void generateOutput(String outputFileName) throws IOException
Generates the HTML page and writes it into a file.- Parameters:
outputFileName- name of the file to which the generated HTML page will be written.- Throws:
IOException- when an i/o error occurs while writing to the file.
-
generateOutput
public void generateOutput(Writer outputWriter) throws IOException
Generates the HTML page and writes it to a character stream.- Parameters:
outputWriter- a character stream (writer) to which the HTML page will be written.- Throws:
IOException- when an i/o error occurs while writing to the stream.
-
generateOutput
public String generateOutput()
Generates the HTML page and returns it as a string.- Returns:
- A string that contains the generated HTML page.
-
-