org.apache.struts.tiles.xmlDefinition

Class I18nFactorySet

Implemented Interfaces:
ComponentDefinitionsFactory, Serializable

public class I18nFactorySet
extends FactorySet

Definitions factory. This implementation allows to have a set of definition factories. There is a main factory and one factory for each file associated to a Locale. To retrieve a definition, we first search for the appropriate factory using the Locale found in session context. If no factory is found, use the default one. Then we ask the factory for the definition. A definition factory file is loaded using main filename extended with locale code (ex : templateDefinitions_fr.xml). If no file is found under this name, use default file.

Field Summary

static String[]
DEFAULT_DEFINITION_FILENAMES
Possible definition filenames.
static String
DEFINITIONS_CONFIG_PARAMETER_NAME
Config file parameter name.
static String
FILENAME_EXTENSION
Default filenames extension.
static String
PARSER_DETAILS_PARAMETER_NAME
Config file parameter name.
static String
PARSER_VALIDATE_PARAMETER_NAME
Config file parameter name.
protected DefinitionsFactory
defaultFactory
Default factory.
private List
filenames
Names of files containing instances descriptions.
protected boolean
isValidatingParser
Do we want validating parser.
private Map
loaded
Collection of already loaded definitions set, referenced by their suffix.
protected static Log
log
Commons Logging instance.
protected int
parserDetailLevel
Parser detail level.
protected XmlParser
xmlParser
XML parser used.

Fields inherited from class org.apache.struts.tiles.xmlDefinition.FactorySet

factories

Constructor Summary

I18nFactorySet()
Parameterless Constructor.
I18nFactorySet(ServletContext servletContext, Map properties)
Constructor.

Method Summary

private List
calculateSuffixes(Locale locale)
Calculate the suffixes based on the locale.
private String
concatPostfix(String name, String postfix)
Concat postfix to the name.
protected DefinitionsFactory
createDefaultFactory(ServletContext servletContext)
Create default factory .
protected DefinitionsFactory
createFactory(Object key, ServletRequest request, ServletContext servletContext)
Create a factory for specified key.
protected DefinitionsFactory
getDefaultFactory()
Get default factory.
protected Object
getDefinitionsFactoryKey(String name, ServletRequest request, ServletContext servletContext)
Extract key that will be used to get the sub factory.
void
initFactory(ServletContext servletContext, Map properties)
Initialization method.
protected void
initFactory(ServletContext servletContext, String proposedFilename)
Initialization method.
private XmlDefinitionsSet
parseXmlFile(ServletContext servletContext, String filename, XmlDefinitionsSet xmlDefinitions)
Parse specified xml file and add definition to specified definitions set.
private XmlDefinitionsSet
parseXmlFiles(ServletContext servletContext, String postfix, XmlDefinitionsSet xmlDefinitions)
Parse files associated to postix if they exist.
String
toString()
Return String representation.

Methods inherited from class org.apache.struts.tiles.xmlDefinition.FactorySet

createFactory, getDefaultFactory, getDefinition, getDefinitionsFactoryKey, getFactory, initFactory, toString

Field Details

DEFAULT_DEFINITION_FILENAMES

public static final String[] DEFAULT_DEFINITION_FILENAMES
Possible definition filenames.

DEFINITIONS_CONFIG_PARAMETER_NAME

public static final String DEFINITIONS_CONFIG_PARAMETER_NAME
Config file parameter name.

FILENAME_EXTENSION

public static final String FILENAME_EXTENSION
Default filenames extension.

PARSER_DETAILS_PARAMETER_NAME

public static final String PARSER_DETAILS_PARAMETER_NAME
Config file parameter name.

PARSER_VALIDATE_PARAMETER_NAME

public static final String PARSER_VALIDATE_PARAMETER_NAME
Config file parameter name.

defaultFactory

protected DefinitionsFactory defaultFactory
Default factory.

filenames

private List filenames
Names of files containing instances descriptions.

isValidatingParser

protected boolean isValidatingParser
Do we want validating parser. Default is false. Can be set from servlet config file.

loaded

private Map loaded
Collection of already loaded definitions set, referenced by their suffix.

log

protected static Log log
Commons Logging instance.

parserDetailLevel

protected int parserDetailLevel
Parser detail level. Default is 0. Can be set from servlet config file.

xmlParser

protected XmlParser xmlParser
XML parser used. Attribute is transient to allow serialization. In this implementaiton, xmlParser is created each time we need it ;-(.

Constructor Details

I18nFactorySet

public I18nFactorySet()
Parameterless Constructor. Method initFactory must be called prior to any use of created factory.

I18nFactorySet

public I18nFactorySet(ServletContext servletContext,
                      Map properties)
            throws DefinitionsFactoryException
Constructor. Init the factory by reading appropriate configuration file.
Parameters:
servletContext - Servlet context.
properties - Map containing all properties.

Method Details

calculateSuffixes

private List calculateSuffixes(Locale locale)
Calculate the suffixes based on the locale.
Parameters:
locale - the locale

concatPostfix

private String concatPostfix(String name,
                             String postfix)
Concat postfix to the name. Take care of existing filename extension. Transform the given name "name.ext" to have "name" + "postfix" + "ext". If there is no ext, return "name" + "postfix".
Parameters:
name - Filename.
postfix - Postfix to add.
Returns:
Concatenated filename.

createDefaultFactory

protected DefinitionsFactory createDefaultFactory(ServletContext servletContext)
            throws DefinitionsFactoryException,
                   FileNotFoundException
Create default factory . Create InstancesMapper for specified Locale. If creation failes, use default mapper and log error message.
Parameters:
servletContext - Current servlet context. Used to open file.
Returns:
Created default definition factory.
Throws:
DefinitionsFactoryException - If an error occur while creating factory.

createFactory

protected DefinitionsFactory createFactory(Object key,
                                           ServletRequest request,
                                           ServletContext servletContext)
            throws DefinitionsFactoryException
Create a factory for specified key. If creation failes, return default factory and log an error message.
Overrides:
createFactory in interface FactorySet
Parameters:
key - The key.
request - Servlet request.
servletContext - Servlet context.
Returns:
Definition factory for specified key.
Throws:
DefinitionsFactoryException - If an error occur while creating factory.

getDefaultFactory

protected DefinitionsFactory getDefaultFactory()
Get default factory.
Overrides:
getDefaultFactory in interface FactorySet
Returns:
Default factory

getDefinitionsFactoryKey

protected Object getDefinitionsFactoryKey(String name,
                                          ServletRequest request,
                                          ServletContext servletContext)
Extract key that will be used to get the sub factory.
Overrides:
getDefinitionsFactoryKey in interface FactorySet
Parameters:
name - Name of requested definition
request - Current servlet request.
servletContext - Current servlet context.
Returns:
the key or null if not found.

initFactory

public void initFactory(ServletContext servletContext,
                        Map properties)
            throws DefinitionsFactoryException
Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).
Specified by:
initFactory in interface ComponentDefinitionsFactory
Overrides:
initFactory in interface FactorySet
Parameters:
servletContext - Servlet Context passed to newly created factory.
properties - Map of name/property passed to newly created factory. Map can contains more properties than requested.
Throws:
DefinitionsFactoryException - An error occur during initialization.

initFactory

protected void initFactory(ServletContext servletContext,
                           String proposedFilename)
            throws DefinitionsFactoryException,
                   FileNotFoundException
Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).
Parameters:
servletContext - Servlet Context passed to newly created factory.
proposedFilename - File names, comma separated, to use as base file names.
Throws:
DefinitionsFactoryException - An error occur during initialization.

parseXmlFile

private XmlDefinitionsSet parseXmlFile(ServletContext servletContext,
                                       String filename,
                                       XmlDefinitionsSet xmlDefinitions)
            throws DefinitionsFactoryException
Parse specified xml file and add definition to specified definitions set. This method is used to load several description files in one instances list. If filename exists and definition set is null, create a new set. Otherwise, return passed definition set (can be null).
Parameters:
servletContext - Current servlet context. Used to open file.
filename - Name of file to parse.
xmlDefinitions - Definitions set to which definitions will be added. If null, a definitions set is created on request.
Returns:
XmlDefinitionsSet The definitions set created or passed as parameter.
Throws:
DefinitionsFactoryException - On errors parsing file.

parseXmlFiles

private XmlDefinitionsSet parseXmlFiles(ServletContext servletContext,
                                        String postfix,
                                        XmlDefinitionsSet xmlDefinitions)
            throws DefinitionsFactoryException
Parse files associated to postix if they exist. For each name in filenames, append postfix before file extension, then try to load the corresponding file. If file doesn't exist, try next one. Each file description is added to the XmlDefinitionsSet description. The XmlDefinitionsSet description is created only if there is a definition file. Inheritance is not resolved in the returned XmlDefinitionsSet. If no description file can be opened and no definiion set is provided, return null.
Parameters:
postfix - Postfix to add to each description file.
xmlDefinitions - Definitions set to which definitions will be added. If null, a definitions set is created on request.
Returns:
XmlDefinitionsSet The definitions set created or passed as parameter.
Throws:
DefinitionsFactoryException - On errors parsing file.

toString

public String toString()
Return String representation.
Overrides:
toString in interface FactorySet
Returns:
String representation.

Copyright B) 2000-2007 - The Apache Software Foundation